Files
gk-sdk/source/gmp/include/xmedia_audio_codec_mp3.h

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