75 lines
1.9 KiB
C
75 lines
1.9 KiB
C
#ifndef AUDIOPIPELINE_AUDIO_DEMUXER_MP3_H__INCLUDED
|
|
#define AUDIOPIPELINE_AUDIO_DEMUXER_MP3_H__INCLUDED
|
|
|
|
#include <stdbool.h>
|
|
#include "audio.h"
|
|
|
|
/**
|
|
* Creates a demuxer element for MP3 files
|
|
*
|
|
* This demuxer just searches for MP3 sync markers, decodes the header to calculate frame length
|
|
* and then will forward the MP3 data to the next element in the chain frame by frame.
|
|
* The maximum size of data buffered before calling the decoder is around 14 kB.
|
|
* The theoretical maximum decoded data from this packet is 11520 samples which could be
|
|
* up to 45kB of data and between 0.96 and 1.44 seconds of audio playback time.
|
|
*
|
|
* Formula: FrameSize = (144 * BitRate / SampleRate) + PaddingBit
|
|
*
|
|
* @returns Initialized `AudioPipelineElement` that can be used in call to `audio_pipeline_assemble`
|
|
*/
|
|
AudioPipelineElement *audio_demuxer_mp3(void);
|
|
|
|
|
|
typedef enum {
|
|
MPEGVersion2_5 = 0,
|
|
MPEGVersionReserved = 1,
|
|
MPEGVersion2 = 2,
|
|
MPEGVersion1 = 3
|
|
} MPEGVersion;
|
|
|
|
typedef enum {
|
|
MPEGLayerReserved = 0,
|
|
MPEGLayer3 = 1,
|
|
MPEGLayer2 = 2,
|
|
MPEGLayer1 = 3
|
|
} MPEGLayer;
|
|
|
|
typedef enum {
|
|
MPEGChannelModeStereo = 0,
|
|
MPEGChannelModeJointStereo = 1,
|
|
MPEGChannelModeDualChannel = 2,
|
|
MPEGChannelModeMono = 3
|
|
} MPEGChannelMode;
|
|
|
|
typedef enum {
|
|
MPEGEmphasisNone = 0,
|
|
MPEGEmphasis50_15 = 1,
|
|
MPEGEmphasisReserved = 2,
|
|
MPEGEmphasisCCITJ17 = 3
|
|
} MPEGEmphasis;
|
|
|
|
typedef struct _MP3Header {
|
|
MPEGVersion version;
|
|
MPEGLayer layer;
|
|
uint8_t bitrateIndex;
|
|
uint8_t sampleRateIndex;
|
|
MPEGChannelMode channelMode;
|
|
uint8_t jointStereoModeExtension;
|
|
MPEGEmphasis emphasis;
|
|
|
|
bool has_crc;
|
|
bool has_padding;
|
|
bool has_copyright;
|
|
bool is_original;
|
|
bool is_private;
|
|
|
|
bool valid;
|
|
uint32_t bitrate;
|
|
uint32_t sampleRate;
|
|
uint16_t packetLength;
|
|
} MP3Header;
|
|
|
|
MP3Header demuxer_mp3_decode_header(uint8_t data[4]);
|
|
|
|
#endif /* AUDIOPIPELINE_AUDIO_DEMUXER_MP3_H__INCLUDED */
|
|
|