arduino-audio-tools
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
M4ACommonDemuxer Class Referenceabstract

Abstract base class for M4A/MP4 demuxers. Provides shared functionality for both file-based and stream-based demuxers. More...

#include <M4ACommonDemuxer.h>

Inheritance diagram for M4ACommonDemuxer:
M4AAudioDemuxer M4AAudioFileDemuxer

Classes

struct  ESDSParser
 A parser for the ESDS segment to extract the relevant aac information. More...
 
struct  Frame
 
struct  M4AAudioConfig
 
class  SampleExtractor
 Extracts audio data based on the sample sizes defined in the stsz box. It collects the data from the mdat box and calls the callback with the extracted frames. More...
 

Public Types

enum class  Codec { Unknown , AAC , ALAC , MP3 }
 
using FrameCallback = std::function< void(const Frame &, void *ref)>
 

Public Member Functions

 M4ACommonDemuxer ()=default
 
virtual ~M4ACommonDemuxer ()=default
 
void begin ()
 
M4AAudioConfig getM4AAudioConfig ()
 
uint32_t getSampleCount () const
 samples in stsz
 
uint32_t getStszFileOffset () const
 File offset of stsz box.
 
void resize (int size)
 
void setAACConfig (int profile, int srIdx, int chCfg)
 Sets the AAC configuration for ADTS header generation.
 
virtual void setCallback (FrameCallback cb)
 Sets the callback for extracted audio frames.
 
void setChunkOffsetsBuffer (BaseBuffer< uint32_t > &buffer)
 Sets the buffer to use for sample sizes.
 
void setM4AAudioConfig (M4AAudioConfig cfg)
 
void setSampleSizesBuffer (BaseBuffer< stsz_sample_size_t > &buffer)
 Sets the buffer to use for sample sizes.
 
virtual void setupParser ()=0
 

Protected Member Functions

bool checkType (uint8_t *buffer, const char *type, int offset)
 Checks if the buffer at the given offset matches the specified type.
 
void onAlac (const MP4Parser::Box &box)
 Handles the alac box.
 
void onEsds (const MP4Parser::Box &box)
 Handles the esds (Elementary Stream Descriptor) box.
 
void onMp4a (const MP4Parser::Box &box)
 Handles the mp4a box.
 
void onStsd (const MP4Parser::Box &box)
 
void onStsz (MP4Parser::Box &box)
 Handles the stsz (Sample Size) box.
 
void printHexDump (const MP4Parser::Box &box)
 
uint32_t readU32Buffer ()
 

Static Protected Member Functions

static uint32_t readU32 (const uint32_t num)
 
static uint32_t readU32 (const uint8_t *p)
 Reads a 32-bit big-endian unsigned integer from a buffer.
 

Protected Attributes

M4AAudioConfig audio_config
 
SingleBuffer< uint8_tbuffer
 Buffer for incremental data.
 
uint32_t chunk_offsets_count = 0
 
size_t default_size = 2 * 1024
 Default buffer size.
 
FrameCallback frame_callback = nullptr
 
MP4Parser parser
 Underlying MP4 parser.
 
uint32_t sample_count = 0
 Number of samples in stsz.
 
SampleExtractor sampleExtractor
 Extractor for audio samples.
 
bool stco_processed = false
 Marks the stco table as processed.
 
bool stsd_processed = false
 
uint32_t stsz_offset = 0
 
bool stsz_processed = false
 Marks the stsz table as processed.
 

Detailed Description

Abstract base class for M4A/MP4 demuxers. Provides shared functionality for both file-based and stream-based demuxers.

Member Typedef Documentation

◆ FrameCallback

using FrameCallback = std::function<void(const Frame&, void* ref)>

Member Enumeration Documentation

◆ Codec

enum class Codec
strong
Enumerator
Unknown 
AAC 
ALAC 
MP3 

Constructor & Destructor Documentation

◆ M4ACommonDemuxer()

M4ACommonDemuxer ( )
default

◆ ~M4ACommonDemuxer()

virtual ~M4ACommonDemuxer ( )
virtualdefault

Member Function Documentation

◆ begin()

void begin ( )
inline

◆ checkType()

bool checkType ( uint8_t buffer,
const char type,
int  offset 
)
inlineprotected

Checks if the buffer at the given offset matches the specified type.

Parameters
bufferPointer to the buffer.
type4-character type string (e.g. "mp4a").
offsetOffset in the buffer to check.
Returns
true if the type matches, false otherwise.

◆ getM4AAudioConfig()

M4AAudioConfig getM4AAudioConfig ( )
inline

◆ getSampleCount()

uint32_t getSampleCount ( ) const
inline

samples in stsz

◆ getStszFileOffset()

uint32_t getStszFileOffset ( ) const
inline

File offset of stsz box.

◆ onAlac()

void onAlac ( const MP4Parser::Box box)
inlineprotected

Handles the alac box.

Parameters
boxMP4 box.

◆ onEsds()

void onEsds ( const MP4Parser::Box box)
inlineprotected

Handles the esds (Elementary Stream Descriptor) box.

Parameters
boxMP4 box.

◆ onMp4a()

void onMp4a ( const MP4Parser::Box box)
inlineprotected

Handles the mp4a box.

Parameters
boxMP4 box.

for mp4a we expect to contain a esds: child boxes start at 36

◆ onStsd()

void onStsd ( const MP4Parser::Box box)
inlineprotected

◆ onStsz()

void onStsz ( MP4Parser::Box box)
inlineprotected

Handles the stsz (Sample Size) box.

Parameters
boxMP4 box.

◆ printHexDump()

void printHexDump ( const MP4Parser::Box box)
inlineprotected

◆ readU32() [1/2]

static uint32_t readU32 ( const uint32_t  num)
inlinestaticprotected

◆ readU32() [2/2]

static uint32_t readU32 ( const uint8_t p)
inlinestaticprotected

Reads a 32-bit big-endian unsigned integer from a buffer.

Parameters
pPointer to buffer.
Returns
32-bit unsigned integer.

◆ readU32Buffer()

uint32_t readU32Buffer ( )
inlineprotected

◆ resize()

void resize ( int  size)
inline

◆ setAACConfig()

void setAACConfig ( int  profile,
int  srIdx,
int  chCfg 
)
inline

Sets the AAC configuration for ADTS header generation.

Parameters
profileAAC profile.
srIdxSample rate index.
chCfgChannel configuration.

◆ setCallback()

virtual void setCallback ( FrameCallback  cb)
inlinevirtual

Sets the callback for extracted audio frames.

Parameters
cbFrame callback function.

Reimplemented in M4AAudioDemuxer, and M4AAudioFileDemuxer.

◆ setChunkOffsetsBuffer()

void setChunkOffsetsBuffer ( BaseBuffer< uint32_t > &  buffer)
inline

Sets the buffer to use for sample sizes.

Parameters
bufferReference to the buffer to use.

◆ setM4AAudioConfig()

void setM4AAudioConfig ( M4AAudioConfig  cfg)
inline

◆ setSampleSizesBuffer()

void setSampleSizesBuffer ( BaseBuffer< stsz_sample_size_t > &  buffer)
inline

Sets the buffer to use for sample sizes.

Parameters
bufferReference to the buffer to use.

◆ setupParser()

virtual void setupParser ( )
pure virtual

Implemented in M4AAudioDemuxer, and M4AAudioFileDemuxer.

Member Data Documentation

◆ audio_config

M4AAudioConfig audio_config
protected

◆ buffer

SingleBuffer<uint8_t> buffer
protected

Buffer for incremental data.

◆ chunk_offsets_count

uint32_t chunk_offsets_count = 0
protected

◆ default_size

size_t default_size = 2 * 1024
protected

Default buffer size.

◆ frame_callback

FrameCallback frame_callback = nullptr
protected

◆ parser

MP4Parser parser
protected

Underlying MP4 parser.

◆ sample_count

uint32_t sample_count = 0
protected

Number of samples in stsz.

◆ sampleExtractor

SampleExtractor sampleExtractor
protected
Initial value:
{
M4AAudioConfig audio_config
Definition M4ACommonDemuxer.h:443

Extractor for audio samples.

◆ stco_processed

bool stco_processed = false
protected

Marks the stco table as processed.

◆ stsd_processed

bool stsd_processed = false
protected

◆ stsz_offset

uint32_t stsz_offset = 0
protected

◆ stsz_processed

bool stsz_processed = false
protected

Marks the stsz table as processed.


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