108 lines
3.2 KiB
C
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 */
|
|
|