152 lines
4.5 KiB
C
152 lines
4.5 KiB
C
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
#ifndef _AUDIO_CODEC_MP3_H_
|
|
#define _AUDIO_CODEC_MP3_H_
|
|
|
|
#include "xmedia_type.h"
|
|
#include "xmedia_audio_codec.h"
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
/*samples per frame for MP3LC and MP3Plus */
|
|
#define MP3_SAMPLES_PER_FRAME 1152
|
|
|
|
/*max length of MP3 stream by bytes */
|
|
#define MAX_MP3_MAINBUF_SIZE 1152 * 2
|
|
|
|
typedef enum
|
|
{
|
|
MP3_BPS_8K = 8000,
|
|
MP3_BPS_16K = 16000,
|
|
MP3_BPS_24K = 24000,
|
|
MP3_BPS_32K = 32000,
|
|
MP3_BPS_40K = 40000,
|
|
MP3_BPS_48K = 48000,
|
|
MP3_BPS_56K = 56000,
|
|
MP3_BPS_64K = 64000,
|
|
MP3_BPS_80K = 80000,
|
|
MP3_BPS_96K = 96000,
|
|
MP3_BPS_112K = 112000,
|
|
MP3_BPS_128K = 128000,
|
|
MP3_BPS_144K = 144000,
|
|
MP3_BPS_160K = 160000,
|
|
MP3_BPS_192K = 192000,
|
|
MP3_BPS_224K = 224000,
|
|
MP3_BPS_256K = 256000,
|
|
MP3_BPS_320K = 320000,
|
|
MP3_BPS_MAX
|
|
} mp3_bps;
|
|
|
|
typedef enum
|
|
{
|
|
MP3_VBR_OFF=0,
|
|
MP3_VBR_MT, /* obsolete, same as vbr_mtrh */
|
|
MP3_VBR_RH,
|
|
MP3_VBR_ABR,
|
|
MP3_VBR_MTRH,
|
|
MP3_VBR_MAX_INDICATOR, /* Don't use this! It's used for sanity checks. */
|
|
MP3_VBR_DEFAULT=MP3_VBR_MTRH /* change this to change the default VBR mode of LAME */
|
|
} mp3_vbr_mode;
|
|
|
|
typedef struct
|
|
{
|
|
/*vbr_off for constant bitrate
|
|
vbr_abr for variable bitrate abr mode
|
|
vbr_default for variable bitrate vbr mode
|
|
*/
|
|
mp3_vbr_mode mode;
|
|
/* quality setting 0..9., default is 7
|
|
0 = slowest algorithms, but potentially highest quality
|
|
9 = faster algorithms, very poor quality
|
|
*/
|
|
xmedia_u32 quality;
|
|
/*
|
|
MPEG-1 layer III sample frequencies (kHz): 32 48 44.1
|
|
bitrates (kbps): 32 40 48 56 64 80 96 112 128 160 192 224 256 320
|
|
MPEG-2 layer III sample frequencies (kHz): 16 24 22.05
|
|
bitrates (kbps): 8 16 24 32 40 48 56 64 80 96 112 128 144 160
|
|
MPEG-2.5 layer III sample frequencies (kHz): 8 12 11.025
|
|
bitrates (kbps): 8 16 24 32 40 48 56 64
|
|
The bitrate to be used. Default is 128kbps in MPEG1 (64 for mono),
|
|
64kbps in MPEG2 (32 for mono) and 32kbps in MPEG2.5 (16 for mono).
|
|
*/
|
|
mp3_bps bit_rate;
|
|
xmedia_s32 bit_per_sample;
|
|
xmedia_u32 channels;
|
|
xmedia_u32 sample_rate;
|
|
} mp3_encoder_config;
|
|
|
|
typedef struct
|
|
{
|
|
xmedia_void* reversed;
|
|
} mp3_decoder_config;
|
|
|
|
#define mp3_enc_get_default_config(config) \
|
|
do { \
|
|
((mp3_encoder_config *)(config))->quality = 7; \
|
|
((mp3_encoder_config *)(config))->bit_rate = MP3_BPS_128K; \
|
|
((mp3_encoder_config *)(config))->sample_rate = 48000; \
|
|
((mp3_encoder_config *)(config))->channels = 2; \
|
|
((mp3_encoder_config *)(config))->bit_per_sample = 16; \
|
|
((mp3_encoder_config *)(config))->mode = MP3_VBR_OFF; \
|
|
} while (0)
|
|
|
|
#define mp3_enc_get_default_param(open_param, private_config) \
|
|
do { \
|
|
xmedia_u32 in_sample_per_frame = 1152; \
|
|
((encoder_param *)(open_param))->channels = \
|
|
((mp3_encoder_config *)private_config)->channels; \
|
|
((encoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
|
((encoder_param *)(open_param))->bit_per_sample = \
|
|
((mp3_encoder_config *)private_config)->bit_per_sample; \
|
|
((encoder_param *)(open_param))->sample_rate = \
|
|
((mp3_encoder_config *)private_config)->sample_rate; \
|
|
((encoder_param *)(open_param))->sample_per_frame = in_sample_per_frame; \
|
|
((encoder_param *)(open_param))->encoder_config = (xmedia_void *)private_config; \
|
|
} while (0)
|
|
|
|
#define mp3_dec_get_default_config(config) \
|
|
do { \
|
|
} while (0)
|
|
|
|
#define mp3_dec_get_default_param(open_param, private_config) \
|
|
do { \
|
|
((decoder_param *)(open_param))->desired_out_channels = 2; \
|
|
((decoder_param *)(open_param))->desired_out_samplerate = 48000; \
|
|
((decoder_param *)(open_param))->bit_per_sample = 16; \
|
|
((decoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
|
((decoder_param *)(open_param))->decoder_config = (xmedia_void *)private_config; \
|
|
} while (0)
|
|
|
|
/*
|
|
* 函数功能:获取aac编码器句柄
|
|
* 函数参数:
|
|
* 无
|
|
* 返回值:
|
|
* 编码器入口句柄
|
|
*/
|
|
audio_encoder* xmedia_mp3_enc_get_handle(xmedia_void);
|
|
|
|
/*
|
|
* 函数功能:获取mp3解码器句柄
|
|
* 函数参数:
|
|
* 无
|
|
* 返回值:
|
|
* 解码器入口句柄
|
|
*/
|
|
audio_decoder* xmedia_mp3_dec_get_handle(xmedia_void);
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
#endif
|
|
|