arduino-audio-tools
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members

Common interface for muxers (MuxerAVI, MuxerMP4) that combine an already-encoded video track (and optionally an audio track) into a container written to a Print (a local File to record, or e.g. a network Client to publish a live stream to an HTTP/TCP client). Write code against this interface instead of a concrete class if it should work with either container format. More...

#include <ContainerCommon.h>

Inheritance diagram for Muxer:
VideoOutput MuxerAVI MuxerMP4 MuxerMPG

Public Member Functions

virtual size_t addAudioFrame (const uint8_t *data, size_t len)=0
 
virtual size_t addI420Frame (const uint8_t *data, size_t len)=0
 
virtual size_t addJpegFrame (const uint8_t *data, size_t len)=0
 
virtual size_t addRGB565Frame (const uint8_t *data, size_t len)=0
 
virtual size_t addVideoFrame (const uint8_t *data, size_t len, bool isKeyFrame=true)=0
 
virtual size_t addYUV422Frame (const uint8_t *data, size_t len)=0
 
virtual AudioInfoFormataudioInfo ()=0
 Provides read/write access to the audio track's AudioInfoFormat.
 
virtual bool begin ()=0
 
virtual void end ()=0
 Closes the muxer.
 
virtual void flush ()
 
float getAudioSamplesPerVideoFrame ()
 
virtual MuxerVideoConfig getVideoInfo ()=0
 Provides the video track configuration.
 
virtual const char * mime ()=0
 
virtual operator bool ()=0
 
virtual void setAudioInfo (AudioInfoFormat info)=0
 
virtual void setOutput (Print &out)=0
 Defines the output: e.g. a local File or a network Client.
 
virtual void setStreamType (StreamContentType type)=0
 Selects whether write() feeds the video or the audio track.
 
virtual void setVideoInfo (MuxerVideoConfig config)=0
 Defines the video track configuration - call before begin()
 
virtual StreamContentType streamType ()=0
 The track write() currently targets (see setStreamType())
 
virtual size_t write (const uint8_t *data, size_t len)=0
 

Protected Attributes

Printp_print = nullptr
 

Detailed Description

Common interface for muxers (MuxerAVI, MuxerMP4) that combine an already-encoded video track (and optionally an audio track) into a container written to a Print (a local File to record, or e.g. a network Client to publish a live stream to an HTTP/TCP client). Write code against this interface instead of a concrete class if it should work with either container format.

write() (VideoOutput) treats each call as one complete, already-encoded frame for both MuxerAVI and MuxerMP4 - callers must hand over the full frame in a single call, not build it up incrementally across several write() calls. flush() is a no-op for both.

Author
Phil Schatzmann

Member Function Documentation

◆ addAudioFrame()

virtual size_t addAudioFrame ( const uint8_t *  data,
size_t  len 
)
pure virtual

Writes one complete audio frame/block. Meaning is container- and codec-specific (e.g. one raw AAC frame vs. an arbitrary PCM block); see the concrete class.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ addI420Frame()

virtual size_t addI420Frame ( const uint8_t *  data,
size_t  len 
)
pure virtual

Writes one planar 4:2:0 YUV (I420/IYUV) frame. Expects exactly width*height*3/2 bytes.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ addJpegFrame()

virtual size_t addJpegFrame ( const uint8_t *  data,
size_t  len 
)
pure virtual

Writes one complete Motion-JPEG frame (a full, already-encoded JPEG image).

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ addRGB565Frame()

virtual size_t addRGB565Frame ( const uint8_t *  data,
size_t  len 
)
pure virtual

Writes one uncompressed RGB565 (16-bit, 5-6-5) frame. Expects exactly width*height*2 bytes.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ addVideoFrame()

virtual size_t addVideoFrame ( const uint8_t *  data,
size_t  len,
bool  isKeyFrame = true 
)
pure virtual

Writes one complete, already-encoded video frame (e.g. one H.264 access unit).

Parameters
isKeyFramehints that the frame is independently decodable (a sync/seek point) - used where the container format can express it (e.g. MP4's 'trun' sample flags); ignored where it can't (AVI).

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ addYUV422Frame()

virtual size_t addYUV422Frame ( const uint8_t *  data,
size_t  len 
)
pure virtual

Writes one packed 4:2:2 YUV frame (YUY2/YUYV byte order). Expects exactly width*height*2 bytes.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ audioInfo()

virtual AudioInfoFormat & audioInfo ( )
pure virtual

Provides read/write access to the audio track's AudioInfoFormat.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ begin()

virtual bool begin ( )
pure virtual

Writes the container header. Call after configuring video (and audio, if any) and before writing any frames.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ end()

virtual void end ( )
pure virtual

Closes the muxer.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ flush()

virtual void flush ( )
inlinevirtual

Finalizes the frame most recently written via one or more write() calls - see class comment. Default no-op for implementations that display/decode synchronously in write() instead.

Reimplemented from VideoOutput.

◆ getAudioSamplesPerVideoFrame()

float getAudioSamplesPerVideoFrame ( )
inline

Average number of audio samples per video frame, derived from audioInfo().sample_rate and getVideoInfo().fps - the natural audio chunk size to write once per video frame if you want to keep both tracks advancing at roughly the same pace as you write them (not a hard requirement - see addAudioFrame()/addVideoFrame()). 0 if fps hasn't been set.

◆ getVideoInfo()

virtual MuxerVideoConfig getVideoInfo ( )
pure virtual

Provides the video track configuration.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ mime()

virtual const char * mime ( )
pure virtual

The container's MIME type (e.g. "video/avi", "video/mp4") - useful for e.g. an HTTP Content-Type header when streaming the muxed output to a client.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ operator bool()

virtual operator bool ( )
pure virtual

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ setAudioInfo()

virtual void setAudioInfo ( AudioInfoFormat  info)
pure virtual

Adds an (optional) interleaved audio track, including the codec selection (the 'format' field) - which AudioFormat values are actually supported (and what they mean, e.g. default codec if unset) is container-specific; see the concrete class. Call before begin().

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ setOutput()

virtual void setOutput ( Print out)
pure virtual

Defines the output: e.g. a local File or a network Client.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ setStreamType()

virtual void setStreamType ( StreamContentType  type)
pure virtual

Selects whether write() feeds the video or the audio track.

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ setVideoInfo()

virtual void setVideoInfo ( MuxerVideoConfig  config)
pure virtual

Defines the video track configuration - call before begin()

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ streamType()

virtual StreamContentType streamType ( )
pure virtual

The track write() currently targets (see setStreamType())

Implemented in MuxerAVI, MuxerMP4, and MuxerMPG.

◆ write()

virtual size_t write ( const uint8_t *  data,
size_t  len 
)
pure virtualinherited

Member Data Documentation

◆ p_print

Print* p_print = nullptr
protected

The documentation for this class was generated from the following file: