#ifndef AUDIOPIPELINE_AUDIO_DEMUXER_ADTS_H__INCLUDED #define AUDIOPIPELINE_AUDIO_DEMUXER_ADTS_H__INCLUDED #include #include "audio.h" /** * Creates a demuxer element for ADTS streams * * This demuxer searches for sync markers, decodes the header to calculate frame length * and then will forward the compressed data to the next element in the chain frame by frame. * * @returns Initialized `AudioPipelineElement` that can be used in call to `audio_pipeline_assemble` */ AudioPipelineElement *audio_demuxer_adts(void); typedef enum { ADTSMPEGVersion4 = 0, ADTSMPEGVersion2 = 1 } ADTSMPEGVersion; typedef enum { AudioObjectTypeNull = 0, AudioObjectTypeAACMain = 1, AudioObjectTypeAACLC = 2, AudioObjectTypeAACSSR = 3, AudioObjectTypeAACLTP = 4, AudioObjectTypeSBR = 5, AudioObjectTypeAACScalable = 6, AudioObjectTypeTwinVQ = 7, AudioObjectTypeCELP = 8, AudioObjectTypeHXVC = 9, AudioObjectTypeReserved1 = 10, AudioObjectTypeReserved2 = 11, AudioObjectTypeTTSI = 12, AudioObjectTypeMainSynthesis = 13, AudioObjectTypeWavetableSynthesis = 14, AudioObjectTypeGeneralMIDI = 15, AudioObjectTypeASAE = 16, AudioObjectTypeAACLC_ER = 17, AudioObjectTypeReserved3 = 18, AudioObjectTypeAACLTP_ER = 19, AudioObjectTypeAACScalable_ER = 20, AudioObjectTypeTwinVQ_ER = 21, AudioObjectTypeBSAC_ER = 22, AudioObjectTypeAACLD_ER = 23, AudioObjectTypeCELP_ER = 24, AudioObjectTypeHVXC_ER = 25, AudioObjectTypeHILN_ER = 26, AudioObjectTypeParametric_ER = 27, AudioObjectTypeSSC = 28, AudioObjectTypePS = 29, AudioObjectTypeMPEGSurround = 30, AudioObjectTypeESCAPE = 31, // Only internally used AudioObjectTypeLayer1 = 32, AudioObjectTypeLayer2 = 33, AudioObjectTypeLayer3 = 34, AudioObjectTypeDST = 35, AudioObjectTypeALS = 36, AudioObjectTypeSLS = 37, AudioObjectTypeSLS_non_core = 38, AudioObjectTypeAACELD_ER = 39, AudioObjectTypeSMR = 40, AudioObjectTypeSMRMain = 41, AudioObjectTypeUSAC_no_SBR = 42, AudioObjectTypeSAOC = 43, AudioObjectTypeMPEGSurroundLD = 44, AudioObjectTypeUSAC = 45 } MPEG4AudioObjectType; typedef enum { ChannelConfigAOT = 0, // special config ChannelConfigMono = 1, // 1 channel ChannelConfigStereo = 2, // 2 channels ChannelConfig3Front = 3, // 3 channels ChannelConfig3Front1Back = 4, // 4 channels ChannelConfig3Front2Back = 5, // 5 channels ChannelConfig3Front2BackLFE = 6, // 5.1 channels ChannelConfig3Front2Side2BackLFE = 7 // 7.1 channels } MPEG4ChannelConfig; typedef struct _ADTSHeader { ADTSMPEGVersion version; MPEG4AudioObjectType type; uint8_t sampleRateIndex; MPEG4ChannelConfig channelMode; bool has_crc; bool has_copyright; bool copyright_start; bool is_original; bool is_private; bool is_home; uint16_t packetLength; uint8_t numAACFrames; bool valid; uint32_t bitrate; uint32_t sampleRate; } ADTSHeader; ADTSHeader demuxer_adts_decode_header(uint8_t data[7]); #endif /* AUDIOPIPELINE_AUDIO_DEMUXER_ADTS_H__INCLUDED */