arduino-audio-tools
Loading...
Searching...
No Matches
ContainerCommon.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace audio_tools {
7
12 uint16_t width = 320;
13 uint16_t height = 240;
14 float fps = 25.0f;
20 const char *fourcc = nullptr;
21};
22
42class Muxer : public VideoOutput {
43 public:
47 virtual const char *mime() = 0;
48
50 virtual void setOutput(Print &out) = 0;
51
53 virtual void setVideoInfo(MuxerVideoConfig config) = 0;
56
62 virtual void setAudioInfo(AudioInfoFormat info) = 0;
64 virtual AudioInfoFormat &audioInfo() = 0;
65
73 float fps = getVideoInfo().fps;
74 return fps > 0 ? (float)audioInfo().sample_rate / fps : 0;
75 }
76
79 virtual bool begin() = 0;
81 virtual void end() = 0;
82 virtual operator bool() = 0;
83
85 virtual void setStreamType(StreamContentType type) = 0;
88
94 virtual size_t addVideoFrame(const uint8_t *data, size_t len,
95 bool isKeyFrame = true) = 0;
98 virtual size_t addJpegFrame(const uint8_t *data, size_t len) = 0;
101 virtual size_t addYUV422Frame(const uint8_t *data, size_t len) = 0;
104 virtual size_t addRGB565Frame(const uint8_t *data, size_t len) = 0;
107 virtual size_t addI420Frame(const uint8_t *data, size_t len) = 0;
111 virtual size_t addAudioFrame(const uint8_t *data, size_t len) = 0;
112
113 virtual void flush() {
114 if (p_print) p_print->flush();
115 }
116
117 protected:
118 Print *p_print = nullptr;
119};
120
137class MuxerVideoSink : public Print {
138 public:
139 void begin(Muxer &muxer) { p_muxer = &muxer; }
140 size_t write(uint8_t c) override { return write(&c, 1); }
141 size_t write(const uint8_t *data, size_t len) override {
142 bool is_key = true;
144 is_key = isH264KeyFrame(data, len);
145 }
146 return p_muxer->addVideoFrame(data, len, is_key);
147 }
148
149 protected:
150 Muxer *p_muxer = nullptr;
151};
152
164class Demuxer : public ContainerDecoder {
165 public:
167 virtual const char *mime() = 0;
168
172 virtual void setOutputAudio(Print &out) = 0;
175 virtual void setOutputVideo(Print &out) = 0;
176
178 virtual VideoInfo getVideoInfo() = 0;
182
186 virtual void setSendWavHeader(bool flag) = 0;
187};
188
189} // namespace audio_tools
Definition Arduino.h:56
virtual void flush()
Definition Arduino.h:130
Parent class for all container formats.
Definition AudioCodecsBase.h:87
Common interface for demuxers (DemuxerAVI, DemuxerMP4) that split a container's video and (optional) ...
Definition ContainerCommon.h:164
virtual void setOutputVideo(Print &out)=0
virtual AudioInfoFormat getAudioInfo()=0
virtual VideoInfo getVideoInfo()=0
Common video info (width/height/format/frame_size/total_file_size)
virtual void setOutputAudio(Print &out)=0
virtual void setSendWavHeader(bool flag)=0
virtual const char * mime()=0
The container's MIME type (e.g. "video/avi", "video/mp4").
Common interface for muxers (MuxerAVI, MuxerMP4) that combine an already-encoded video track (and opt...
Definition ContainerCommon.h:42
virtual void setVideoInfo(MuxerVideoConfig config)=0
Defines the video track configuration - call before begin()
virtual MuxerVideoConfig getVideoInfo()=0
Provides the video track configuration.
virtual size_t addJpegFrame(const uint8_t *data, size_t len)=0
virtual void setAudioInfo(AudioInfoFormat info)=0
virtual size_t addAudioFrame(const uint8_t *data, size_t len)=0
virtual size_t addVideoFrame(const uint8_t *data, size_t len, bool isKeyFrame=true)=0
virtual void end()=0
Closes the muxer.
virtual size_t addYUV422Frame(const uint8_t *data, size_t len)=0
virtual size_t addRGB565Frame(const uint8_t *data, size_t len)=0
virtual void setOutput(Print &out)=0
Defines the output: e.g. a local File or a network Client.
float getAudioSamplesPerVideoFrame()
Definition ContainerCommon.h:72
virtual void setStreamType(StreamContentType type)=0
Selects whether write() feeds the video or the audio track.
Print * p_print
Definition ContainerCommon.h:118
virtual size_t addI420Frame(const uint8_t *data, size_t len)=0
virtual void flush()
Definition ContainerCommon.h:113
virtual AudioInfoFormat & audioInfo()=0
Provides read/write access to the audio track's AudioInfoFormat.
virtual StreamContentType streamType()=0
The track write() currently targets (see setStreamType())
virtual const char * mime()=0
virtual bool begin()=0
Print sink that writes each frame it receives to a Muxer's video track via addVideoFrame(),...
Definition ContainerCommon.h:137
size_t write(uint8_t c) override
Definition ContainerCommon.h:140
Muxer * p_muxer
Definition ContainerCommon.h:150
size_t write(const uint8_t *data, size_t len) override
Definition ContainerCommon.h:141
void begin(Muxer &muxer)
Definition ContainerCommon.h:139
Abstract class for video playback. This class is used to assemble a complete video frame in memory....
Definition Video.h:192
VideoFormat
Video codec/pixel-format identifier, shared by two unrelated uses: the (single) video stream of a con...
Definition Video.h:43
bool isH264KeyFrame(const uint8_t *data, size_t len)
True if the given Annex-B H.264 access unit contains an IDR slice NAL unit (nal_unit_type 5) - the re...
Definition Video.h:86
StreamContentType
Which track write() feeds, for muxers (MuxerAVI, MuxerMP4) that double as a plain,...
Definition Video.h:19
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
AudioInfo extended with a WAVEFORMATEX-style codec tag (the "wav code"): identifies the codec (PCM,...
Definition AudioFormat.h:389
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:53
Shared video track configuration for muxers (MuxerAVI, MuxerMP4) - call before begin().
Definition ContainerCommon.h:11
float fps
Definition ContainerCommon.h:14
const char * fourcc
Definition ContainerCommon.h:20
uint16_t height
Definition ContainerCommon.h:13
uint16_t width
Definition ContainerCommon.h:12
VideoFormat format
Definition ContainerCommon.h:15
Basic video information (width/height/codec/frame size), analogous to AudioInfo - common to both Demu...
Definition Video.h:102