/* * Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved. * * File Name: include/cvi_comm_aio.h * Description: basic audio in out definition */ #ifndef __CVI_COMM_AIO_H__ #define __CVI_COMM_AIO_H__ #include #include #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* End of #ifdef __cplusplus */ #define CVI_MAX_AUDIO_FRAME_NUM 300 /*max count of audio frame in Buffer */ #define CVI_AUD_MAX_VOICE_POINT_NUM 1280 /*max sample per frame for voice encode */ #define CVI_AUD_MAX_AUDIO_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/ #define CVI_AUD_MAX_CHANNEL_NUM 3 #define CVI_MAX_AUDIO_STREAM_LEN (4 * 4096) #define MAX_AUDIO_FILE_PATH_LEN 256 #define MAX_AUDIO_FILE_NAME_LEN 256 #define MAX_AUDIO_VQE_CUSTOMIZE_NAME 64 /*The VQE EQ Band num.*/ #define VQE_EQ_BAND_NUM 10 #define AI_RECORDVQE_MASK_HPF 0x1 #define AI_RECORDVQE_MASK_RNR 0x2 #define AI_RECORDVQE_MASK_HDR 0x4 #define AI_RECORDVQE_MASK_DRC 0x8 #define AI_RECORDVQE_MASK_EQ 0x10 #define AI_RECORDVQE_MASK_AGC 0x20 //#define AI_TALKVQE_MASK_HPF 0x1//not support #define AI_TALKVQE_MASK_AEC 0x3 #define AI_TALKVQE_MASK_ANR 0x4 #define AI_TALKVQE_MASK_AGC 0x8 #define AI_TALKVQE_MASK_NOTCH_FILTER 0x30 //#define AI_TALKVQE_MASK_EQ 0x10//not supoort #define NEXT_SSP_ALGO 1 /* LP AEC Control */ #define LP_AEC_ENABLE 0x1 /* bit 0 */ /* NLP AES Control */ #define NLP_AES_ENABLE 0x2 /* bit 1 */ /* NR Control */ #define NR_ENABLE 0x4 /* bit 2 */ /* AGC Control */ #define AGC_ENABLE 0x8 /* bit 3 */ /* Notch Filter Control */ #define NOTCH_ENABLE 0x10 /* bit 4 */ /* DC Filter Control */ #define DCREMOVER_ENABLE 0x20 /* bit 5 */ /* DG Control */ #define DG_ENABLE 0x40 /* bit 6 */ /* Delay Control */ #define DELAY_ENABLE 0x80 /* bit 7 */ //control for AO_VQE /* AGC Control in SPK Path */ #define SPK_AGC_ENABLE 0x1 /* bit 0 */ #define SPK_EQ_ENABLE 0x2 /* bit 1 */ #define DNVQE_HPFILTER 0x1 #define DNVQE_EQ 0x2 #define DNVQE_DRC_EXPANDER_COMPRESS 0x4 #define DNVQE_DRC_LIMITER 0x8 #define CVI_MAX_AI_DEVICE_ID_NUM 5 #define CVI_MAX_AI_CARD_ID_NUM 5 #define CVI_MAX_AO_DEVICE_ID_NUM 5 #define CVI_MAX_AO_CARD_ID_NUM 5 /* define macro */ #define CHECK_AI_DEVID_VALID(x) \ ((((x) > (CVI_MAX_AI_DEVICE_ID_NUM-1))) ? 1:0) #define CHECK_AI_CARD_VALID(x) \ ((((x) > (CVI_MAX_AI_CARD_ID_NUM-1))) ? 1:0) #define CHECK_AO_DEVID_VALID(x) \ ((((x) > (CVI_MAX_AO_DEVICE_ID_NUM-1))) ? 1:0) #define CHECK_AO_CARD_VALID(x) \ ((((x) > (CVI_MAX_AO_CARD_ID_NUM-1))) ? 1:0) #define CHECK_AENC_DEVID_VALID(x) \ ((((x) > (AENC_MAX_CHN_NUM-1))) ? 1:0) #define CHECK_ADEC_DEVID_VALID(x) \ ((((x) > (ADEC_MAX_CHN_NUM-1))) ? 1:0) typedef enum _AUDIO_SAMPLE_RATE_E { AUDIO_SAMPLE_RATE_8000 = 8000, /* 8K samplerate*/ /* 12K samplerate(not support in this version)*/ AUDIO_SAMPLE_RATE_11025 = 11025, /* 11.025K samplerate*/ AUDIO_SAMPLE_RATE_16000 = 16000, /* 16K samplerate*/ AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.050K samplerate*/ AUDIO_SAMPLE_RATE_24000 = 24000, /* 24K samplerate*/ AUDIO_SAMPLE_RATE_32000 = 32000, /* 32K samplerate*/ AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1K samplerate*/ AUDIO_SAMPLE_RATE_48000 = 48000, /* 48K samplerate*/ AUDIO_SAMPLE_RATE_64000 = 64000, /* 64K samplerate*/ /* 96K samplerate is not support in cv183x series*/ AUDIO_SAMPLE_RATE_BUTT, } AUDIO_SAMPLE_RATE_E; typedef enum _AUDIO_BIT_WIDTH_E { AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */ AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/ AUDIO_BIT_WIDTH_24 = 2, /* 24bit width*/ AUDIO_BIT_WIDTH_32 = 3, /* 24bit width*/ AUDIO_BIT_WIDTH_BUTT, } AUDIO_BIT_WIDTH_E; typedef enum _AIO_MODE_E { AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */ AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */ AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */ AIO_MODE_PCM_SLAVE_NSTD, /* AIO PCM slave non-standard mode */ AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */ AIO_MODE_PCM_MASTER_NSTD, /* AIO PCM master non-standard mode */ AIO_MODE_BUTT } AIO_MODE_E; typedef enum { AIO_I2STYPE_INNERCODEC = 0, /* AIO I2S connect inner audio CODEC */ AIO_I2STYPE_INNERHDMI, /* AIO I2S connect Inner HDMI */ AIO_I2STYPE_EXTERN, /* AIO I2S connect extern hardware */ } AIO_I2STYPE_E; typedef enum _AIO_SOUND_MODE_E { AUDIO_SOUND_MODE_MONO = 0, /*mono*/ AUDIO_SOUND_MODE_STEREO = 1, /*stereo only support interlace mode*/ AUDIO_SOUND_MODE_BUTT } AUDIO_SOUND_MODE_E; /*An example of the packing scheme for G726-32 codewords is as */ /*shown, and bit A3 is the least significant */ /*bit of the first codeword:*/ /*RTP G726-32:*/ /*0 1*/ /*0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5*/ /*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-*/ /*|B B B B|A A A A|D D D D|C C C C| ...*/ /*|0 1 2 3|0 1 2 3|0 1 2 3|0 1 2 3|*/ /*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-*/ /*MEDIA G726-32:*/ /*0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5*/ /*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-*/ /*|A A A A|B B B B|C C C C|D D D D| ...*/ /*|3 2 1 0|3 2 1 0|3 2 1 0|3 2 1 0|*/ /*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-*/ typedef enum _G726_BPS_E { G726_16K = 0, /* G726 16kbps, see RFC3551.txt 4.5.4 G726-16 */ G726_24K, /* G726 24kbps, see RFC3551.txt 4.5.4 G726-24 */ G726_32K, /* G726 32kbps, see RFC3551.txt 4.5.4 G726-32 */ G726_40K, /* G726 40kbps, see RFC3551.txt 4.5.4 G726-40 */ MEDIA_G726_16K, /* G726 16kbps for ASF ... */ MEDIA_G726_24K, /* G726 24kbps for ASF ... */ MEDIA_G726_32K, /* G726 32kbps for ASF ... */ MEDIA_G726_40K, /* G726 40kbps for ASF ... */ G726_BUTT, } G726_BPS_E; typedef enum _ADPCM_TYPE_E { /* see DVI4 diiffers in three respects from the IMA ADPCM at RFC3551.txt 4.5.1 DVI4 */ ADPCM_TYPE_DVI4 = 0, /* 32kbps ADPCM(DVI4) for RTP */ ADPCM_TYPE_IMA, /* 32kbps ADPCM(IMA),NOTICE:point num must be 161/241/321/481 */ ADPCM_TYPE_ORG_DVI4, ADPCM_TYPE_BUTT, } ADPCM_TYPE_E; #define AI_EXPAND 0x01 #define AI_CUT 0x02 typedef struct _AIO_ATTR_S { AUDIO_SAMPLE_RATE_E enSamplerate; /* sample rate */ AUDIO_BIT_WIDTH_E enBitwidth; /* bitwidth */ AIO_MODE_E enWorkmode; /* master or slave mode */ AUDIO_SOUND_MODE_E enSoundmode; /* momo or steror */ CVI_U32 u32EXFlag; /* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit),*/ /*use AI_CUT(only valid for extern Codec for 24bit) */ CVI_U32 u32FrmNum; /* frame num in buf[2,CVI_MAX_AUDIO_FRAME_NUM] */ CVI_U32 u32PtNumPerFrm; /* point num per frame (80/160/240/320/480/1024/2048) */ /*(ADPCM IMA should add 1 point, AMR only support 160) */ CVI_U32 u32ChnCnt; /* channel number on FS, valid value:1/2/4/8 */ CVI_U32 u32ClkSel; /* 0: AI and AO clock is separate*/ /* 1: AI and AO clock is inseparate, AI use AO's clock*/ AIO_I2STYPE_E enI2sType; /* i2s type */ } AIO_ATTR_S; typedef struct _AI_CHN_PARAM_S { CVI_U32 u32UsrFrmDepth; } AI_CHN_PARAM_S; typedef struct _AUDIO_FRAME_S { AUDIO_BIT_WIDTH_E enBitwidth;/*audio frame bitwidth*/ AUDIO_SOUND_MODE_E enSoundmode;/*audio frame momo or stereo mode*/ CVI_U8 * u64VirAddr[2]; CVI_U64 u64PhyAddr[2]; CVI_U64 u64TimeStamp; /*audio frame timestamp*/ CVI_U32 u32Seq; /*audio frame seq*/ CVI_U32 u32Len; /*data length per channel in frame*/ CVI_U32 u32PoolId[2]; } AUDIO_FRAME_S; typedef struct _AEC_FRAME_S { AUDIO_FRAME_S stRefFrame; /* AEC reference audio frame */ CVI_BOOL bValid; /* whether frame is valid */ CVI_BOOL bSysBind; /* whether is sysbind */ } AEC_FRAME_S; typedef struct _AUDIO_FRAME_INFO_S { AUDIO_FRAME_S *pstFrame;/*frame ptr*/ CVI_U32 u32Id; /*frame id*/ } AUDIO_FRAME_INFO_S; typedef struct _AUDIO_STREAM_S { /* CVI_U8 ATTRIBUTE *pStream;the virtual address of stream */ /* CVI_U64 ATTRIBUTE u64PhyAddr; the physics address of stream */ CVI_U8 *pStream; /* the virtual address of stream */ CVI_U64 u64PhyAddr; /* the physics address of stream */ CVI_U32 u32Len; /* stream length, by bytes */ CVI_U64 u64TimeStamp; /* frame time stamp*/ CVI_U32 u32Seq; /* frame seq,if stream is not a valid frame,u32Seq is 0*/ } AUDIO_STREAM_S; typedef struct _AO_CHN_STATE_S { CVI_U32 u32ChnTotalNum; /* total number of channel buffer */ CVI_U32 u32ChnFreeNum; /* free number of channel buffer */ CVI_U32 u32ChnBusyNum; /* busy number of channel buffer */ } AO_CHN_STATE_S; typedef enum _AUDIO_TRACK_MODE_E { AUDIO_TRACK_NORMAL = 0, AUDIO_TRACK_BOTH_LEFT = 1, AUDIO_TRACK_BOTH_RIGHT = 2, AUDIO_TRACK_EXCHANGE = 3, AUDIO_TRACK_MIX = 4, AUDIO_TRACK_LEFT_MUTE = 5, AUDIO_TRACK_RIGHT_MUTE = 6, AUDIO_TRACK_BOTH_MUTE = 7, AUDIO_TRACK_BUTT } AUDIO_TRACK_MODE_E; typedef enum _AUDIO_FADE_RATE_E { AUDIO_FADE_RATE_NONE = 0, AUDIO_FADE_RATE_10 = 10, AUDIO_FADE_RATE_20 = 20, AUDIO_FADE_RATE_30 = 30, AUDIO_FADE_RATE_50 = 50, AUDIO_FADE_RATE_100 = 100, AUDIO_FADE_RATE_200 = 200, AUDIO_FADE_RATE_BUTT = -1 } AUDIO_FADE_RATE_E; typedef struct _AUDIO_FADE_S { CVI_BOOL bFade; AUDIO_FADE_RATE_E enFadeInRate; AUDIO_FADE_RATE_E enFadeOutRate; } AUDIO_FADE_S; /**Defines the configure parameters of AEC.*/ typedef struct _AI_AEC_CONFIG_S { CVI_U16 para_aec_filter_len; CVI_U16 para_aes_std_thrd; /* the threshold of STD/DTD, [0, 35] */ CVI_U16 para_aes_supp_coeff; /* the residual echo suppression level in AES, [0, 24] */ } AI_AEC_CONFIG_S; /**Defines the configure parameters of UPVQE work state.*/ typedef enum _VQE_WORKSTATE_E { VQE_WORKSTATE_COMMON = 0, /* common environment, Applicable to the family of voice calls. */ VQE_WORKSTATE_MUSIC = 1, /* music environment , Applicable to the family of music environment. */ VQE_WORKSTATE_NOISY = 2, /* noisy environment , Applicable to the noisy voice calls. */ } VQE_WORKSTATE_E; /**Defines record type*/ typedef enum _VQE_RECORD_TYPE { VQE_RECORD_NORMAL = 0, /*