Files
Linux_Drivers/freertos/cvitek/common/include/cv1835/aacdec.h
carbon ca03037500 freertos: release the generic version source code
freertos runs on the second core (small one) of the CPU
2023-10-19 14:31:43 +08:00

238 lines
7.0 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
*
* File Name: include/aaacdec.h
* Description:
* Common audio decoder definitions for AAC format.
*/
/*
* \file
* \brief Describes the information about AACDEC.
*/
#ifndef _AACDEC_H
#define _AACDEC_H
#ifdef __cplusplus
#if __cplusplus
extern "C"
{
#endif
#endif
#include "cvi_type.h"
/********************************Macro Definition********************************/
/** \addtogroup AACDEC */
/** @{ */ /** <!-- [AACDEC] */
#ifndef AAC_MAX_NCHANS
#define AAC_MAX_NCHANS 2
#endif
#define AAC_MAX_NSAMPS 1024
#define AAC_MAINBUF_SIZE (768 * AAC_MAX_NCHANS)
/**<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 AAC_NUM_PROFILES 3
#define AAC_PROFILE_MP 0
#define AAC_PROFILE_LC 1
#define AAC_PROFILE_SSR 2
/** @} */ /** <!-- ==== Macro Definition end ==== */
/*************************** Structure Definition ****************************/
/** \addtogroup AACDEC */
/** @{ */ /** <!-- [AACDEC] */
/**Defines AACDEC error code*/
typedef enum {
ERR_AAC_NONE = 0, /**<no decode error*/
ERR_AAC_INDATA_UNDERFLOW = -1, /**<not enough input data*/
ERR_AAC_NULL_POINTER = -2, /**<null pointer*/
ERR_AAC_INVALID_ADTS_HEADER = -3, /**<invalid adts header*/
ERR_AAC_INVALID_ADIF_HEADER = -4, /**<invalid adif header*/
ERR_AAC_INVALID_FRAME = -5, /**<invalid frame*/
ERR_AAC_MPEG4_UNSUPPORTED = -6, /**<unpsupport mpeg4 format*/
ERR_AAC_CHANNEL_MAP = -7, /**<channel map error*/
ERR_AAC_SYNTAX_ELEMENT = -8, /**<element error*/
ERR_AAC_DEQUANT = -9, /**<dequant error*/
ERR_AAC_STEREO_PROCESS = -10, /**<stereo process error*/
ERR_AAC_PNS = -11, /**<pns process error*/
ERR_AAC_SHORT_BLOCK_DEINT = -12, /**<reserved*/
ERR_AAC_TNS = -13, /**<TNS process error*/
ERR_AAC_IMDCT = -14, /**<IMDCT process error*/
ERR_AAC_NCHANS_TOO_HIGH = -15, /**<unsupport multi channel*/
ERR_AAC_SBR_INIT = -16, /**<SBR init error*/
ERR_AAC_SBR_BITSTREAM = -17, /**<SBR bitstream error*/
ERR_AAC_SBR_DATA = -18, /**<SBR data error*/
ERR_AAC_SBR_PCM_FORMAT = -19, /**<SBR pcm data error*/
ERR_AAC_SBR_NCHANS_TOO_HIGH = -20, /**<unsupport SBR multi channel*/
ERR_AAC_SBR_SINGLERATE_UNSUPPORTED = -21, /**<SBR invalid samplerate*/
ERR_AAC_RAWBLOCK_PARAMS = -22, /**<invalid RawBlock params*/
ERR_AAC_PS_INIT = -23, /**<PS init error*/
ERR_AAC_CH_MAPPING = -24,
ERR_UNKNOWN = -9999 /**<reserved*/
} CVI_AACDEC_ERR_E;
typedef struct _AACFrameInfo {
int bitRate;
int nChans; /**<channels,range:1,2*/
int sampRateCore; /**<inner sample rate*/
int sampRateOut; /**<output samplerate*/
int bitsPerSample; /**<bitwidth ,range:16*/
int outputSamps; /**<output samples*/
int profile; /**<profile*/
int tnsUsed; /**<tns tools*/
int pnsUsed; /**<pns tools*/
int bytespassDec;
} AACFrameInfo;
typedef enum {
AACDEC_ADTS = 0,
AACDEC_LOAS = 1,
AACDEC_LATM_MCP1 = 2,
} AACDECTransportType;
typedef void *CVIAACDecoder;
typedef struct hiAACDEC_VERSION_S {
CVI_U8 aVersion[64];
} AACDEC_VERSION_S;
/** @} */ /** <!-- ==== Structure Definition End ==== */
/******************************* API declaration *****************************/
/** \addtogroup AACDEC */
/** @{ */ /** <!-- [AACDEC]*/
/**
*brief Get version information.
*attention \n
*N/A
*param[in] pVersion : version describe struct
*retval ::CVI_SUCCESS : Success
*retval ::CVI_FAILURE : pVersion is NULL, return CVI_FAILURE
*see \n
*N/A
*/
CVI_S32 CVI_AACDEC_GetVersion(AACDEC_VERSION_S *pVersion);
/**
*brief create and initial decoder device.
*attention
*N/A
*param[in] enTranType : transport type
*retval ::CVIAACDecoder : init success, return non-NULL handle.
*retval ::NULL : init failure, return NULL
*see
*N/A
*/
CVIAACDecoder AACInitDecoder(AACDECTransportType enTranType);
/**
*brief destroy AAC-Decoder, free the memory.
*attention \n
*N/A
*param[in] CVIAACDecoder : AAC-Decoder handle
*see \n
*N/A
*/
CVI_VOID AACFreeDecoder(CVIAACDecoder CVIAACDecoder);
/**
*brief set RawMode before decode Raw Format aac bitstream(Reserved API, unused now.)
*attention \n
*N/A
*param[in] CVIAACDecoder : AAC-Decoder handle
*param[in] Chans : inout channels
*param[in] sampRate : input sample rate
*retval ::CVI_FAILURE : RESERVED API, always return CVI_FAILURE.
*see \n
*N/A
*/
CVI_S32 AACSetRawMode(CVIAACDecoder CVIAACDecoder,
CVI_S32 nChans,
CVI_S32 sampRate);
/**
*brief look for valid AAC sync header
*attention \n
*N/A
*param[in] CVIAACDecoder : AAC-Decoder handle
*param[in/out] ppInbufPtr : address of the pointer of start-point of the bitstream
*param[in/out] pBytesLeft : pointer to BytesLeft that indicates bitstream numbers at input buffer
*retval ::<0 : err, always return ERR_AAC_INDATA_UNDERFLOW
*retval ::other : Success, return number bytes of current frame
*see \n
*N/A
*/
CVI_S32 AACDecodeFindSyncHeader(CVIAACDecoder CVIAACDecoder,
CVI_U8 **ppInbufPtr,
CVI_S32 *pBytesLeft);
/**
*brief decoding AAC frame and output 1024(LC) OR
*2048(HEAAC/eAAC/eAAC+) 16bit PCM samples per channel.
*attention \n
*param[in] CVIAACDecoder : AAC-Decoder handle
*param[in] ppInbufPtr : address of the pointer of start-point of the bitstream
*param[in/out] pBytesLeft : pointer to BytesLeft that indicates
*bitstream numbers at input buffer,indicates the left bytes
*param[in] pOutPcm : the address of the out pcm buffer,
*pcm data in noninterlaced fotmat: L/L/L/... R/R/R/...
*retval :: SUCCESS : Success
*retval :: ERROR_CODE : FAILURE, return error_code.
*see \n
*/
CVI_S32 AACDecodeFrame(CVIAACDecoder CVIAACDecoder,
CVI_U8 **ppInbufPtr,
CVI_S32 *pBytesLeft,
CVI_S16 *pOutPcm);
/**
*brief get the frame information.
*attention \n
*param[in] CVIAACDecoder : AAC-Decoder handle
*param[out] aacFrameInfo : frame information
*retval :: CVI_SUCCESS : Success
*retval :: ERROR_CODE : FAILURE, return error_code.
*see \n
*N/A
*/
CVI_S32 AACGetLastFrameInfo(CVIAACDecoder CVIAACDecoder,
AACFrameInfo *aacFrameInfo);
/**
*brief set eosflag.
*attention \n
*param[in] CVIAACDecoder : AAC-Decoder handle
*param[in] s32Eosflag : end flag
*retval :: CVI_SUCCESS : Success
*retval :: ERROR_CODE : FAILURE, return error_code.
*see \n
*N/A
*/
CVI_S32 AACDecoderSetEosFlag(CVIAACDecoder CVIAACDecoder,
CVI_S32 s32Eosflag);
/**
*brief flush internal codec state (after seeking, for example)
*attention \n
*param[in] CVIAACDecoder : AAC-Decoder handle
*retval :: CVI_SUCCESS : Success
*retval :: ERROR_CODE : FAILURE, return error_code.
*see \n
*N/A
*/
CVI_S32 AACFlushCodec(CVIAACDecoder CVIAACDecoder);
/** @} */ /** <!-- ==== API declaration end ==== */
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* _AACDEC_H */