audiolib/audio/audio_demuxer_adts.h

108 lines
3.2 KiB
C

#ifndef AUDIOPIPELINE_AUDIO_DEMUXER_ADTS_H__INCLUDED
#define AUDIOPIPELINE_AUDIO_DEMUXER_ADTS_H__INCLUDED
#include <stdbool.h>
#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 */