arduino-audio-tools
Loading...
Searching...
No Matches
BinaryContainerEncoder Class Reference

Wraps the encoded data into Config, Data, and Meta segments so that we can recover the audio configuration and orignial segments if this is relevant. We assume that a full segment is written with each call of write(); The segments are separated with a new line character. More...

#include <ContainerBinary.h>

Inheritance diagram for BinaryContainerEncoder:
AudioEncoder AudioWriter MimeSource AudioWriter MimeSource AudioInfoSupport AudioInfoSupport AudioInfoSupport AudioInfoSupport

Public Member Functions

 BinaryContainerEncoder ()=default
 BinaryContainerEncoder (AudioEncoder &encoder)
 BinaryContainerEncoder (AudioEncoder *encoder)
AudioInfo audioInfo () override
 provides the actual input AudioInfo
virtual AudioInfo audioInfoOut ()
virtual AudioInfo audioInfoOut ()
virtual bool begin (AudioInfo info)
bool begin () override
void end ()
virtual uint32_t frameDurationUs ()
 Optional rtsp function: provide the frame duration in microseconds.
virtual uint32_t frameDurationUs ()
 Optional rtsp function: provide the frame duration in microseconds.
virtual int frameSize ()
virtual int frameSize ()
virtual const char * mime ()
 Provides the mime type of the encoded result.
 operator bool ()
virtual uint16_t samplesPerFrame ()
 Optional rtsp function: provide samples per the frame.
virtual uint16_t samplesPerFrame ()
 Optional rtsp function: provide samples per the frame.
void setAudioInfo (AudioInfo from) override
 Defines the sample rate, number of channels and bits per sample.
void setAudioInfo (AudioInfo info) override
void setEncoder (AudioEncoder *encoder)
void setOutput (Print &outStream)
 Default output assignment (encoders may override to store Print reference).
void setVideoInfo (VideoInfo info)
VideoInfo videoInfo ()
size_t write (const uint8_t *data, size_t len)
 Add data segment. On first write we also add a AudioInfo header.
size_t writeMeta (const uint8_t *data, size_t len)
 Adds meta data segment.
size_t writeVideo (const uint8_t *data, size_t len)

Protected Member Functions

size_t output (const uint8_t *data, size_t len)
void writeAudio (const uint8_t *data, size_t len)
void writeBlocking (Print *out, uint8_t *data, size_t len)
void writeBlocking (Print *out, uint8_t *data, size_t len)
void writeHeader ()
void writeVideoHeader ()

Protected Attributes

SimpleContainerConfig cfg
SimpleContainerDataHeader dh
AudioInfo info
bool is_beginning = true
bool is_video_beginning = true
SimpleContainerMetaDataHeader meta
AudioEncoder * p_codec = nullptr
Print * p_out = nullptr
uint64_t packet_count = 0
int repeat_header
SimpleContainerVideoConfig video_cfg
SimpleContainerVideoDataHeader video_dh

Detailed Description

Wraps the encoded data into Config, Data, and Meta segments so that we can recover the audio configuration and orignial segments if this is relevant. We assume that a full segment is written with each call of write(); The segments are separated with a new line character.

Author
Phil Schatzmann

Constructor & Destructor Documentation

◆ BinaryContainerEncoder() [1/3]

BinaryContainerEncoder ( )
default

◆ BinaryContainerEncoder() [2/3]

BinaryContainerEncoder ( AudioEncoder & encoder)
inline

◆ BinaryContainerEncoder() [3/3]

BinaryContainerEncoder ( AudioEncoder * encoder)
inline

Member Function Documentation

◆ audioInfo()

AudioInfo audioInfo ( )
inlineoverridevirtual

provides the actual input AudioInfo

Reimplemented from AudioEncoder.

◆ audioInfoOut() [1/2]

◆ audioInfoOut() [2/2]

◆ begin() [1/2]

virtual bool begin ( AudioInfo info)
inlinevirtualinherited

Reimplemented in AudioDecoder, and AudioDecoder.

◆ begin() [2/2]

bool begin ( )
inlineoverridevirtual

Implements AudioWriter.

◆ end()

void end ( )
inlinevirtual

Implements AudioWriter.

◆ frameDurationUs() [1/2]

virtual uint32_t frameDurationUs ( )
inlinevirtualinherited

Optional rtsp function: provide the frame duration in microseconds.

Reimplemented in ADPCMEncoder, MetaDataFilterEncoder, MP3EncoderShine, MP3ParserEncoder, and OpusOggEncoder.

◆ frameDurationUs() [2/2]

virtual uint32_t frameDurationUs ( )
inlinevirtualinherited

Optional rtsp function: provide the frame duration in microseconds.

Reimplemented in ADPCMEncoder, MetaDataFilterEncoder, MP3EncoderShine, MP3ParserEncoder, and OpusOggEncoder.

◆ frameSize() [1/2]

virtual int frameSize ( )
inlinevirtualinherited

Optional rtsp function: provide the encoded size (in bytes) of one frame, once known (e.g. after the encoder has seen real data). Lets an RTSPFormat size its RTP fragments to match one frame instead of a fixed guess, so throughput actually tracks frameDurationUs() - a fragment size covering several frames' worth of bytes sent at one-frame timing overruns real-time bandwidth and, over UDP (no flow control), causes packet loss. Returns 0 if not yet known/not applicable (fixed-frame-size codecs have no need to override this).

Reimplemented in ADPCMEncoder, AMRNBEncoder, AMRWBEncoder, EncoderALAC, and MP3ParserEncoder.

◆ frameSize() [2/2]

virtual int frameSize ( )
inlinevirtualinherited

Optional rtsp function: provide the encoded size (in bytes) of one frame, once known (e.g. after the encoder has seen real data). Lets an RTSPFormat size its RTP fragments to match one frame instead of a fixed guess, so throughput actually tracks frameDurationUs() - a fragment size covering several frames' worth of bytes sent at one-frame timing overruns real-time bandwidth and, over UDP (no flow control), causes packet loss. Returns 0 if not yet known/not applicable (fixed-frame-size codecs have no need to override this).

Reimplemented in ADPCMEncoder, AMRNBEncoder, AMRWBEncoder, EncoderALAC, and MP3ParserEncoder.

◆ mime()

virtual const char * mime ( )
inlinevirtual

Provides the mime type of the encoded result.

Implements AudioEncoder.

◆ operator bool()

operator bool ( )
inlinevirtual

Implements AudioWriter.

◆ output()

size_t output ( const uint8_t * data,
size_t len )
inlineprotected

◆ samplesPerFrame() [1/2]

virtual uint16_t samplesPerFrame ( )
inlinevirtualinherited

Optional rtsp function: provide samples per the frame.

Reimplemented in MetaDataFilterEncoder, MP3EncoderShine, MP3ParserEncoder, OpusAudioEncoder, and OpusMultiStreamAudioEncoder.

◆ samplesPerFrame() [2/2]

virtual uint16_t samplesPerFrame ( )
inlinevirtualinherited

Optional rtsp function: provide samples per the frame.

Reimplemented in MetaDataFilterEncoder, MP3EncoderShine, MP3ParserEncoder, OpusAudioEncoder, and OpusMultiStreamAudioEncoder.

◆ setAudioInfo() [1/2]

void setAudioInfo ( AudioInfo from)
inlineoverridevirtualinherited

Defines the sample rate, number of channels and bits per sample.

Implements AudioWriter.

Reimplemented in CodecNOP, and CodecNOP.

◆ setAudioInfo() [2/2]

void setAudioInfo ( AudioInfo info)
inlineoverride

◆ setEncoder()

void setEncoder ( AudioEncoder * encoder)
inline

◆ setOutput()

void setOutput ( Print & out_stream)
inlinevirtual

Default output assignment (encoders may override to store Print reference).

Reimplemented from AudioEncoder.

◆ setVideoInfo()

void setVideoInfo ( VideoInfo info)
inline

Defines the video track configuration (width/height/format/...) - the VideoHeader segment is (re-)sent before the next writeVideo() call.

◆ videoInfo()

VideoInfo videoInfo ( )
inline

◆ write()

size_t write ( const uint8_t * data,
size_t len )
inlinevirtual

Add data segment. On first write we also add a AudioInfo header.

Implements AudioWriter.

◆ writeAudio()

void writeAudio ( const uint8_t * data,
size_t len )
inlineprotected

◆ writeBlocking() [1/2]

void writeBlocking ( Print * out,
uint8_t * data,
size_t len )
inlineprotectedinherited

◆ writeBlocking() [2/2]

void writeBlocking ( Print * out,
uint8_t * data,
size_t len )
inlineprotectedinherited

◆ writeHeader()

void writeHeader ( )
inlineprotected

◆ writeMeta()

size_t writeMeta ( const uint8_t * data,
size_t len )
inline

Adds meta data segment.

◆ writeVideo()

size_t writeVideo ( const uint8_t * data,
size_t len )
inline

Adds one already-encoded video/image frame (e.g. one H.264 access unit or one complete JPEG image) as a Video segment - a single call must provide the full frame. On the first call (or after setVideoInfo()) a VideoHeader segment is emitted first.

◆ writeVideoHeader()

void writeVideoHeader ( )
inlineprotected

Member Data Documentation

◆ cfg

SimpleContainerConfig cfg
protected

◆ dh

◆ info

AudioInfo info
protectedinherited

◆ is_beginning

bool is_beginning = true
protected

◆ is_video_beginning

bool is_video_beginning = true
protected

◆ meta

◆ p_codec

AudioEncoder* p_codec = nullptr
protected

◆ p_out

Print* p_out = nullptr
protected

◆ packet_count

uint64_t packet_count = 0
protected

◆ repeat_header

int repeat_header
protected

◆ video_cfg

SimpleContainerVideoConfig video_cfg
protected

◆ video_dh

SimpleContainerVideoDataHeader video_dh
protected

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