GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
#ifndef _AUDIO_CODEC_AAC_H_
|
||||
#define _AUDIO_CODEC_AAC_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 AACLC and aacPlus */
|
||||
#define AACLD_SAMPLES_PER_FRAME 512
|
||||
#define AACLC_SAMPLES_PER_FRAME 1024
|
||||
#define AACPLUS_SAMPLES_PER_FRAME 2048
|
||||
|
||||
/*max length of AAC stream by bytes */
|
||||
#define MAX_AAC_MAINBUF_SIZE 768*2
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_TYPE_AACLC = 0,
|
||||
AAC_TYPE_EAAC = 1, /* eAAC (HEAAC or AAC+ or aacPlusV1) */
|
||||
AAC_TYPE_EAACPLUS = 2, /* eAAC+ (AAC++ or aacPlusV2) */
|
||||
AAC_TYPE_AACLD = 3,
|
||||
AAC_TYPE_AACELD = 4,
|
||||
AAC_TYPE_MAX
|
||||
} aac_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_BPS_8K = 8000,
|
||||
AAC_BPS_16K = 16000,
|
||||
AAC_BPS_22K = 22000,
|
||||
AAC_BPS_24K = 24000,
|
||||
AAC_BPS_32K = 32000,
|
||||
AAC_BPS_48K = 48000,
|
||||
AAC_BPS_64K = 64000,
|
||||
AAC_BPS_96K = 96000,
|
||||
AAC_BPS_128K = 128000,
|
||||
AAC_BPS_256K = 256000,
|
||||
AAC_BPS_320K = 320000,
|
||||
AAC_BPS_MAX
|
||||
} aac_bps;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AAC_TRANS_TYPE_ADTS = 0,
|
||||
AAC_TRANS_TYPE_LOAS= 1,
|
||||
AAC_TRANS_TYPE_MAX
|
||||
} aac_trans_type;
|
||||
|
||||
/*
|
||||
AAC Commendatory Parameter:
|
||||
Sampling Rate(HZ) LC bit_rate(Kbit/s) EAAC bit_rate (Kbit/s) EAAC+ bit_rate (Kbit/s)
|
||||
48000 128 48 32,24
|
||||
44100 128 48 32,24
|
||||
32000 96 22 16
|
||||
24000 64
|
||||
22050 64
|
||||
16000 48
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
aac_type type; /* AAC profile type */
|
||||
aac_bps bit_rate; /* AAC bit_rate (LC:16~320, EAAC:24~128, EAAC+:16~64, AACLD:16~320, AACELD:32~320) */
|
||||
xmedia_u32 sample_rate; /* AAC sample rate (LC:8~48, EAAC:16~48, EAAC+:16~48, AACLD:8~48, AACELD:8~48) */
|
||||
xmedia_u32 bit_width; /* AAC bit width (only support 16bit) */
|
||||
xmedia_u32 channels;
|
||||
aac_trans_type trans_type;
|
||||
xmedia_u16 band_width; /* targeted audio band_width in Hz (0 or 1000~enSmpRate/2), the default is 0 */
|
||||
} aac_encoder_config;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
aac_trans_type trans_type;
|
||||
} aac_decoder_config;
|
||||
|
||||
#define aac_enc_get_default_config(config) \
|
||||
do { \
|
||||
((aac_encoder_config *)(config))->type = AAC_TYPE_AACLC; \
|
||||
((aac_encoder_config *)(config))->bit_width = 16; \
|
||||
((aac_encoder_config *)(config))->bit_rate = 128000; \
|
||||
((aac_encoder_config *)(config))->sample_rate = 48000; \
|
||||
((aac_encoder_config *)(config))->band_width = ((aac_encoder_config *)(config))->sample_rate / 2; \
|
||||
((aac_encoder_config *)(config))->channels = 2; \
|
||||
((aac_encoder_config *)(config))->trans_type = AAC_TRANS_TYPE_ADTS; \
|
||||
} while (0)
|
||||
|
||||
#define aac_enc_get_default_param(open_param, private_config) \
|
||||
do { \
|
||||
xmedia_u32 in_sample_per_frame = 1024; \
|
||||
if ((((aac_encoder_config *)private_config)->type == AAC_TYPE_EAAC) || \
|
||||
(((aac_encoder_config *)private_config)->type == AAC_TYPE_EAACPLUS)) { \
|
||||
in_sample_per_frame <<= 1; \
|
||||
} else if ((((aac_encoder_config *)private_config)->type == AAC_TYPE_AACLD) || \
|
||||
(((aac_encoder_config *)private_config)->type == AAC_TYPE_AACELD)) { \
|
||||
in_sample_per_frame >>= 1; \
|
||||
} \
|
||||
((encoder_param *)(open_param))->channels = \
|
||||
((aac_encoder_config *)private_config)->channels; \
|
||||
((encoder_param *)(open_param))->interleaved = XMEDIA_TRUE; \
|
||||
((encoder_param *)(open_param))->bit_per_sample = \
|
||||
((aac_encoder_config *)private_config)->bit_width; \
|
||||
((encoder_param *)(open_param))->sample_rate = \
|
||||
((aac_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 aac_dec_get_default_config(config) \
|
||||
do { \
|
||||
((aac_decoder_config *)(config))->trans_type = AAC_TRANS_TYPE_ADTS; \
|
||||
} while (0)
|
||||
|
||||
#define aac_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_decoder* xmedia_aac_dec_get_handle(xmedia_void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取aac编码器句柄
|
||||
* 函数参数:
|
||||
* 无
|
||||
* 返回值:
|
||||
* 编码器入口句柄
|
||||
*/
|
||||
audio_encoder* xmedia_aac_enc_get_handle(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user