ss928_framework/ss928sdk/include/ot_aacdec.h

168 lines
9.7 KiB
C
Raw Normal View History

2024-12-16 13:31:45 +08:00
/*
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
*/
#ifndef OT_AACDEC_H
#define OT_AACDEC_H
#include "ot_type.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef OT_AAC_MAX_CHN_NUM
#define OT_AAC_MAX_CHN_NUM 2
#endif
#define OT_AAC_MAX_SAMPLE_NUM 1024
/*
* according to spec (13818-7 section 8.2.2, 14496-3 section 4.5.3),
* 6144 bits = 768 bytes per SCE or CCE-I, 12288 bits = 1536 bytes per CPE
*/
#define OT_AAC_MAINBUF_SIZE (768 * OT_AAC_MAX_CHN_NUM)
#define OT_AAC_NUM_PROFILES 3
#define OT_AAC_PROFILE_MP 0
#define OT_AAC_PROFILE_LC 1
#define OT_AAC_PROFILE_SSR 2
#define OT_AACDEC_VERSION_MAX_BYTE 64 /* version max byte size */
/* Defines AACDEC error code */
typedef enum {
OT_ERR_AAC_NONE = 0, /* no decode error */
OT_ERR_AAC_INDATA_UNDERFLOW = -1, /* not enough input data */
OT_ERR_AAC_NULL_POINTER = -2, /* null pointer */
OT_ERR_AAC_INVALID_ADTS_HEADER = -3, /* invalid adts header */
OT_ERR_AAC_INVALID_ADIF_HEADER = -4, /* invalid adif header */
OT_ERR_AAC_INVALID_FRAME = -5, /* invalid frame */
OT_ERR_AAC_MPEG4_UNSUPPORTED = -6, /* upsupport mpeg4 format */
OT_ERR_AAC_CHANNEL_MAP = -7, /* channel map error */
OT_ERR_AAC_SYNTAX_ELEMENT = -8, /* element error */
OT_ERR_AAC_DEQUANT = -9, /* dequant error */
OT_ERR_AAC_STEREO_PROCESS = -10, /* stereo process error */
OT_ERR_AAC_PNS = -11, /* pns process error */
OT_ERR_AAC_SHORT_BLOCK_DEINT = -12, /* reserved */
OT_ERR_AAC_TNS = -13, /* TNS process error */
OT_ERR_AAC_IMDCT = -14, /* IMDCT process error */
OT_ERR_AAC_NCHANS_TOO_HIGH = -15, /* unsupported mutil channel */
OT_ERR_AAC_SBR_INIT = -16, /* SBR init error */
OT_ERR_AAC_SBR_BITSTREAM = -17, /* SBR bitstream error */
OT_ERR_AAC_SBR_DATA = -18, /* SBR data error */
OT_ERR_AAC_SBR_PCM_FORMAT = -19, /* SBR pcm data error */
OT_ERR_AAC_SBR_NCHANS_TOO_HIGH = -20, /* unsupported SBR multi channel */
OT_ERR_AAC_SBR_SINGLERATE_UNSUPPORTED = -21, /* SBR invalid samplerate */
OT_ERR_AAC_RAWBLOCK_PARAMS = -22, /* invalid RawBlock params */
OT_ERR_AAC_PS_INIT = -23, /* PS init error */
OT_ERR_AAC_CH_MAPPING = -24,
OT_ERR_AAC_WRAP_UNKNOWN = -9999, /* reserved */
OT_ERR_AAC_OUT_OF_MEMORY = 2, /* Heap returned NULL pointer. Output buffer is invalid. */
OT_ERR_AAC_UNKNOWN = 5, /* Error condition is of unknown reason,
or from a another module. Output buffer is invalid. */
OT_ERR_AAC_TRANSPORT_SYNC_ERROR = 4097, /* The transport decoder had syncronisation problems.
Do not exit decoding. Just feed new bitstream data. */
OT_ERR_AAC_NOT_ENOUGH_BITS = 4098, /* The input buffer ran out of bits. */
OT_ERR_AAC_TRANSPORT_FATAL_ERROR = 4099, /* The transport decoder occut fatal error. Reset Transport */
OT_ERR_AAC_INVALID_HANDLE = 8193, /* The handle passed to the function call was invalid (NULL). */
OT_ERR_AAC_UNSUPPORTED_AOT = 8194, /* The AOT found in the configuration is not supported. */
OT_ERR_AAC_UNSUPPORTED_FORMAT = 8195, /* The bitstream format is not supported. */
OT_ERR_AAC_UNSUPPORTED_ER_FORMAT = 8196, /* The error resilience tool format is not supported. */
OT_ERR_AAC_UNSUPPORTED_EPCONFIG = 8197, /* The error protection format is not supported. */
OT_ERR_AAC_UNSUPPORTED_MULTILAYER = 8198, /* More than one layer for AAC scalable is not supported. */
OT_ERR_AAC_UNSUPPORTED_CHANNELCONFIG = 8199, /* The channel configuration (either number or arrangement)
is not supported. */
OT_ERR_AAC_UNSUPPORTED_SAMPLINGRATE = 8200, /* The sample rate specified in the configuration
is not supported. */
OT_ERR_AAC_INVALID_SBR_CONFIG = 8201, /* The SBR configuration is not supported. */
OT_ERR_AAC_SET_PARAM_FAIL = 8202, /* The parameter could not be set. Either the value was out
of range or the parameter does not exist. */
OT_ERR_AAC_NEED_TO_RESTART = 8203, /* The decoder needs to be restarted, since the
required configuration change cannot be performed. */
OT_ERR_AAC_TRANSPORT_ERROR = 16385, /* The transport decoder encountered an unexpected error. */
OT_ERR_AAC_PARSE_ERROR = 16386, /* Error while parsing the bitstream.
Most probably it is corrupted, or the system crashed. */
OT_ERR_AAC_UNSUPPORTED_EXTENSION_PAYLOAD = 16387, /* Error while parsing the extension payload of the bitstream.
The extension payload type found is not supported. */
OT_ERR_AAC_DECODE_FRAME_ERROR = 16388, /* The parsed bitstream value is out of range. Most probably
the bitstream is corrupt, or the system crashed. */
OT_ERR_AAC_CRC_ERROR = 16389, /* The embedded CRC did not match. */
OT_ERR_AAC_INVALID_CODE_BOOK = 16390, /* An invalid codebook was signalled. Most probably the
bitstream is corrupt, or the system crashed. */
OT_ERR_AAC_UNSUPPORTED_PREDICTION = 16391, /* Predictor found, but not supported in the AAC Low
Complexity profile. Most probably the bitstream is corrupt,
or has a wrong format. */
OT_ERR_AAC_UNSUPPORTED_CCE = 16392, /* A CCE element was found which is not supported. Most
probably the bitstream is corrupt, or has a wrong format. */
OT_ERR_AAC_UNSUPPORTED_LFE = 16393, /* A LFE element was found which is not supported. Most
probably the bitstream is corrupt, or has a wrong format. */
OT_ERR_AAC_UNSUPPORTED_GAIN_CONTROL_DATA = 16394, /* Gain control data found but not supported. Most probably
the bitstream is corrupt, or has a wrong format. */
OT_ERR_AAC_UNSUPPORTED_SBA = 16395, /* SBA found, but currently not supported
in the BSAC profile. */
OT_ERR_AAC_TNS_READ_ERROR = 16396, /* Error while reading TNS data. Most probably the bitstream
is corrupt or the system crashed. */
OT_ERR_AAC_RVLC_ERROR = 16397, /* Error while decoding error resillient data. */
OT_ERR_AAC_ANC_DATA_ERROR = 32769, /* Non severe error concerning the ancillary data handling. */
OT_ERR_AAC_TOO_SMALL_ANC_BUFFER = 32770, /* The registered ancillary data buffer is too small to
receive the parsed data. */
OT_ERR_AAC_TOO_MANY_ANC_ELEMENTS = 32771, /* More than the allowed number of ancillary data elements
should be written to buffer. */
} ot_aacdec_err;
typedef struct {
int bit_rate;
int chn_num; /* channels,range:1,2 */
int sample_rate_core; /* inner sample rate */
int sample_rate_out; /* output sample rate */
int bits_per_sample; /* bitwidth ,range:16 */
int output_samples; /* output samples */
int profile; /* profile */
int tns_used; /* tns tools */
int pns_used; /* pns tools */
} ot_aacdec_frame_info;
typedef enum {
OT_AACDEC_ADTS = 0,
OT_AACDEC_LOAS = 1,
OT_AACDEC_LATM_MCP1 = 2,
} ot_aacdec_transport_type;
typedef void *ot_aac_decoder;
typedef struct {
td_u8 version[OT_AACDEC_VERSION_MAX_BYTE];
} ot_aacdec_version;
td_s32 ot_aacdec_get_version(ot_aacdec_version *version);
ot_aac_decoder ot_aacdec_init_decoder(ot_aacdec_transport_type transport_type);
td_void ot_aacdec_free_decoder(ot_aac_decoder aac_decoder);
td_s32 ot_aacdec_set_raw_mode(ot_aac_decoder aac_decoder, td_s32 chn_num, td_s32 sample_rate);
td_s32 ot_aacdec_find_sync_header(ot_aac_decoder aac_decoder, td_u8 **in_buf, td_s32 *bytes_left);
td_s32 ot_aacdec_frame(ot_aac_decoder aac_decoder, td_u8 **in_buf, td_s32 *bytes_left, td_s16 *out_pcm);
td_s32 ot_aacdec_set_eos_flag(ot_aac_decoder aac_decoder, td_s32 eos_flag);
td_s32 ot_aacdec_get_last_frame_info(ot_aac_decoder aac_decoder, ot_aacdec_frame_info *frame_info);
td_s32 ot_aacdec_flush_codec(ot_aac_decoder aac_decoder);
td_s32 ot_aacdec_register_mod(const td_void *mod_handle);
td_void *ot_aac_sbrdec_get_handle(td_void);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* OT_AACDEC_H */