1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_MPI_COMM_AIO_H_ 5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_MPI_COMM_AIO_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "rk_common.h" 8*4882a593Smuzhiyun #include "rk_comm_mb.h" 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifdef __cplusplus 11*4882a593Smuzhiyun #if __cplusplus 12*4882a593Smuzhiyun extern "C" { 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun #endif /* __cplusplus */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define MAX_AUDIO_FILE_PATH_LEN 256 17*4882a593Smuzhiyun #define MAX_AUDIO_FILE_NAME_LEN 256 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* 20*4882a593Smuzhiyun * G726 bitrate and bitdepth map: 21*4882a593Smuzhiyun * bitrate : 16000 24000 32000 40000 22*4882a593Smuzhiyun * bit depth: 2 3 4 5 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun typedef enum rkAUDIO_G726_BPS_E { 25*4882a593Smuzhiyun G726_BPS_16K = 16000, // 2bit 26*4882a593Smuzhiyun G726_BPS_24K = 24000, // 3bit 27*4882a593Smuzhiyun G726_BPS_32K = 32000, // 4bit 28*4882a593Smuzhiyun G726_BPS_40K = 40000, // 5bit 29*4882a593Smuzhiyun G726_BPS_BUTT, 30*4882a593Smuzhiyun } AUDIO_G726_BPS; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun typedef enum rkAUDIO_SAMPLE_RATE_E { 33*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_DISABLE = 0, 34*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_8000 = 8000, /* 8K samplerate*/ 35*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_12000 = 12000, /* 12K samplerate*/ 36*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_11025 = 11025, /* 11.025K samplerate*/ 37*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_16000 = 16000, /* 16K samplerate*/ 38*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.050K samplerate*/ 39*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_24000 = 24000, /* 24K samplerate*/ 40*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_32000 = 32000, /* 32K samplerate*/ 41*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1K samplerate*/ 42*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_48000 = 48000, /* 48K samplerate*/ 43*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_64000 = 64000, /* 64K samplerate*/ 44*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_96000 = 96000, /* 96K samplerate*/ 45*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_BUTT, 46*4882a593Smuzhiyun } AUDIO_SAMPLE_RATE_E; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun typedef struct rkAUDIO_STREAM_S { 49*4882a593Smuzhiyun MB_BLK pMbBlk; 50*4882a593Smuzhiyun RK_U32 u32Len; /* stream lenth, by bytes */ 51*4882a593Smuzhiyun RK_U64 u64TimeStamp; /* frame time stamp*/ 52*4882a593Smuzhiyun RK_U32 u32Seq; /* frame seq,if stream is not a valid frame, u32Seq is 0*/ 53*4882a593Smuzhiyun RK_BOOL bBypassMbBlk; /* FALSE: copy, TRUE: MbBlock owned by internal */ 54*4882a593Smuzhiyun } AUDIO_STREAM_S; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun typedef enum rkAUDIO_BIT_WIDTH_E { 57*4882a593Smuzhiyun AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */ 58*4882a593Smuzhiyun AUDIO_BIT_WIDTH_16 = 1, /* 16bit width */ 59*4882a593Smuzhiyun AUDIO_BIT_WIDTH_24 = 2, /* 24bit width */ 60*4882a593Smuzhiyun AUDIO_BIT_WIDTH_32 = 3, /* 32bit width */ 61*4882a593Smuzhiyun AUDIO_BIT_WIDTH_FLT = 4, /* float, 32bit width */ 62*4882a593Smuzhiyun AUDIO_BIT_WIDTH_BUTT, 63*4882a593Smuzhiyun } AUDIO_BIT_WIDTH_E; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun typedef enum rkAIO_SOUND_MODE_E { 66*4882a593Smuzhiyun AUDIO_SOUND_MODE_MONO = 0,/*mono*/ 67*4882a593Smuzhiyun AUDIO_SOUND_MODE_STEREO = 1,/*stereo*/ 68*4882a593Smuzhiyun AUDIO_SOUND_MODE_4_CHN = 4, 69*4882a593Smuzhiyun AUDIO_SOUND_MODE_6_CHN = 6, 70*4882a593Smuzhiyun AUDIO_SOUND_MODE_8_CHN = 8, 71*4882a593Smuzhiyun AUDIO_SOUND_MODE_BUTT 72*4882a593Smuzhiyun } AUDIO_SOUND_MODE_E; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun typedef enum rkAUDIO_CHN_MODE_E { 75*4882a593Smuzhiyun AUDIO_CHN_MODE_LEFT = 10, 76*4882a593Smuzhiyun AUDIO_CHN_MODE_RIGHT = 11, 77*4882a593Smuzhiyun AUDIO_CHN_MODE_BUTT 78*4882a593Smuzhiyun } AUDIO_CHN_MODE_E; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun typedef enum rkAUDIO_LOOPBACK_MODE_E { 81*4882a593Smuzhiyun AUDIO_LOOPBACK_NONE = 0, /* audio no use loopback */ 82*4882a593Smuzhiyun AUDIO_LOOPBACK_SW_MICL_REFR, /* audio use software loopback (Mic Left + Ref Right) */ 83*4882a593Smuzhiyun AUDIO_LOOPBACK_SW_REFL_MICR, /* audio use software loopback (Ref Left + Mic Right) */ 84*4882a593Smuzhiyun AUDIO_LOOPBACK_BUTT 85*4882a593Smuzhiyun } AUDIO_LOOPBACK_MODE_E; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun typedef enum rkAUDIO_CHN_ATTR_MODE_E { 88*4882a593Smuzhiyun AUDIO_CHN_ATTR_PPM = 1, 89*4882a593Smuzhiyun AUDIO_CHN_ATTR_RATE = 2, 90*4882a593Smuzhiyun AUDIO_CHN_ATTR_BUTT 91*4882a593Smuzhiyun } AUDIO_CHN_ATTR_MODE_E; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun typedef struct rkAUDIO_FRAME_S { 94*4882a593Smuzhiyun MB_BLK pMbBlk; 95*4882a593Smuzhiyun AUDIO_BIT_WIDTH_E enBitWidth; /*audio frame bitwidth*/ 96*4882a593Smuzhiyun AUDIO_SOUND_MODE_E enSoundMode; /*audio frame momo or stereo mode*/ 97*4882a593Smuzhiyun RK_U64 u64TimeStamp; /*audio frame timestamp*/ 98*4882a593Smuzhiyun RK_U32 u32Seq; /*audio frame seq*/ 99*4882a593Smuzhiyun RK_U32 u32Len; /*data lenth per channel in frame, u32Len <= 0 mean eos*/ 100*4882a593Smuzhiyun RK_BOOL bBypassMbBlk; /* FALSE: copy, TRUE: MbBlock owned by internal */ 101*4882a593Smuzhiyun } AUDIO_FRAME_S; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun typedef struct rkAEC_FRAME_S { 104*4882a593Smuzhiyun AUDIO_FRAME_S stRefFrame; /* AEC reference audio frame */ 105*4882a593Smuzhiyun RK_BOOL bValid; /* whether frame is valid */ 106*4882a593Smuzhiyun RK_BOOL bSysBind; /* whether is sysbind */ 107*4882a593Smuzhiyun } AEC_FRAME_S; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun typedef struct rkAUDIO_FRAME_INFO_S { 110*4882a593Smuzhiyun AUDIO_FRAME_S *pstFrame;/*frame ptr*/ 111*4882a593Smuzhiyun RK_U32 u32Id; /*frame id*/ 112*4882a593Smuzhiyun } AUDIO_FRAME_INFO_S; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun typedef struct rkAUDIO_ADENC_PARAM_S { 115*4882a593Smuzhiyun RK_U8 *pu8InBuf; 116*4882a593Smuzhiyun RK_U32 u32InLen; 117*4882a593Smuzhiyun RK_U64 u64InTimeStamp; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun RK_U8 *pu8OutBuf; 120*4882a593Smuzhiyun RK_U32 u32OutLen; 121*4882a593Smuzhiyun RK_U64 u64OutTimeStamp; 122*4882a593Smuzhiyun } AUDIO_ADENC_PARAM_S; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun typedef enum rkAIO_MODE_E { 125*4882a593Smuzhiyun AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */ 126*4882a593Smuzhiyun AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */ 127*4882a593Smuzhiyun AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */ 128*4882a593Smuzhiyun AIO_MODE_PCM_SLAVE_NSTD, /* AIO PCM slave non-standard mode */ 129*4882a593Smuzhiyun AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */ 130*4882a593Smuzhiyun AIO_MODE_PCM_MASTER_NSTD, /* AIO PCM master non-standard mode */ 131*4882a593Smuzhiyun AIO_MODE_BUTT 132*4882a593Smuzhiyun } AIO_MODE_E; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun typedef struct rkAIO_SOUND_CARD { 135*4882a593Smuzhiyun RK_U32 channels; 136*4882a593Smuzhiyun RK_U32 sampleRate; 137*4882a593Smuzhiyun AUDIO_BIT_WIDTH_E bitWidth; 138*4882a593Smuzhiyun } AIO_SOUND_CARD; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun typedef struct rkAIO_ATTR_S { 141*4882a593Smuzhiyun // params of sound card 142*4882a593Smuzhiyun AIO_SOUND_CARD soundCard; 143*4882a593Smuzhiyun // input data sample rate 144*4882a593Smuzhiyun AUDIO_SAMPLE_RATE_E enSamplerate; 145*4882a593Smuzhiyun // bitwidth 146*4882a593Smuzhiyun AUDIO_BIT_WIDTH_E enBitwidth; 147*4882a593Smuzhiyun // momo or steror 148*4882a593Smuzhiyun AUDIO_SOUND_MODE_E enSoundmode; 149*4882a593Smuzhiyun /* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit), 150*4882a593Smuzhiyun * use AI_CUT(only valid for extern Codec for 24bit) 151*4882a593Smuzhiyun */ 152*4882a593Smuzhiyun RK_U32 u32EXFlag; 153*4882a593Smuzhiyun /* frame num in buf[2,MAX_AUDIO_FRAME_NUM] */ 154*4882a593Smuzhiyun RK_U32 u32FrmNum; 155*4882a593Smuzhiyun /* 156*4882a593Smuzhiyun * point num per frame (80/160/240/320/480/1024/2048) 157*4882a593Smuzhiyun * (ADPCM IMA should add 1 point, AMR only support 160) 158*4882a593Smuzhiyun */ 159*4882a593Smuzhiyun RK_U32 u32PtNumPerFrm; 160*4882a593Smuzhiyun RK_U32 u32ChnCnt; /* channle number on FS, valid value:1/2/4/8 */ 161*4882a593Smuzhiyun /* 162*4882a593Smuzhiyun * name of sound card, if it is setted, we will 163*4882a593Smuzhiyun * using it to open sound card, otherwise, use 164*4882a593Smuzhiyun * the index of device to open sound card 165*4882a593Smuzhiyun */ 166*4882a593Smuzhiyun RK_U8 u8CardName[64]; 167*4882a593Smuzhiyun } AIO_ATTR_S; 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun typedef struct rkAI_CHN_PARAM_S { 170*4882a593Smuzhiyun RK_S32 s32UsrFrmDepth; 171*4882a593Smuzhiyun RK_S32 s32UsrFrmCount; 172*4882a593Smuzhiyun AUDIO_LOOPBACK_MODE_E enLoopbackMode; 173*4882a593Smuzhiyun } AI_CHN_PARAM_S; 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun typedef struct rkAO_CHN_PARAM_S { 176*4882a593Smuzhiyun AUDIO_CHN_MODE_E enMode; 177*4882a593Smuzhiyun AUDIO_LOOPBACK_MODE_E enLoopbackMode; 178*4882a593Smuzhiyun } AO_CHN_PARAM_S; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun typedef struct rkAI_CHN_ATTR_S { 181*4882a593Smuzhiyun AUDIO_CHN_ATTR_MODE_E enChnAttr; 182*4882a593Smuzhiyun union { 183*4882a593Smuzhiyun RK_S32 s32Ppm; 184*4882a593Smuzhiyun RK_U32 u32SampleRate; 185*4882a593Smuzhiyun }; 186*4882a593Smuzhiyun } AI_CHN_ATTR_S; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun typedef struct rkAO_CHN_ATTR_S { 189*4882a593Smuzhiyun AUDIO_CHN_ATTR_MODE_E enChnAttr; 190*4882a593Smuzhiyun union { 191*4882a593Smuzhiyun RK_S32 s32Ppm; 192*4882a593Smuzhiyun RK_U32 u32SampleRate; 193*4882a593Smuzhiyun }; 194*4882a593Smuzhiyun } AO_CHN_ATTR_S; 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun typedef struct rkAO_CHN_STATE_S { 197*4882a593Smuzhiyun RK_U32 u32ChnTotalNum; /* total number of channel buffer */ 198*4882a593Smuzhiyun RK_U32 u32ChnFreeNum; /* free number of channel buffer */ 199*4882a593Smuzhiyun RK_U32 u32ChnBusyNum; /* busy number of channel buffer */ 200*4882a593Smuzhiyun } AO_CHN_STATE_S; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun typedef enum rkAUDIO_TRACK_MODE_E { 203*4882a593Smuzhiyun AUDIO_TRACK_NORMAL = 0, 204*4882a593Smuzhiyun AUDIO_TRACK_BOTH_LEFT = 1, 205*4882a593Smuzhiyun AUDIO_TRACK_BOTH_RIGHT = 2, 206*4882a593Smuzhiyun AUDIO_TRACK_EXCHANGE = 3, 207*4882a593Smuzhiyun AUDIO_TRACK_MIX = 4, 208*4882a593Smuzhiyun AUDIO_TRACK_LEFT_MUTE = 5, 209*4882a593Smuzhiyun AUDIO_TRACK_RIGHT_MUTE = 6, 210*4882a593Smuzhiyun AUDIO_TRACK_BOTH_MUTE = 7, 211*4882a593Smuzhiyun AUDIO_TRACK_FRONT_LEFT = 8, 212*4882a593Smuzhiyun AUDIO_TRACK_FRONT_RIGHT = 9, 213*4882a593Smuzhiyun AUDIO_TRACK_OUT_STEREO = 10, 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun AUDIO_TRACK_BUTT 216*4882a593Smuzhiyun } AUDIO_TRACK_MODE_E; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun typedef enum rkAUDIO_FADE_RATE_E { 219*4882a593Smuzhiyun AUDIO_FADE_RATE_1 = 0, 220*4882a593Smuzhiyun AUDIO_FADE_RATE_2 = 1, 221*4882a593Smuzhiyun AUDIO_FADE_RATE_4 = 2, 222*4882a593Smuzhiyun AUDIO_FADE_RATE_8 = 3, 223*4882a593Smuzhiyun AUDIO_FADE_RATE_16 = 4, 224*4882a593Smuzhiyun AUDIO_FADE_RATE_32 = 5, 225*4882a593Smuzhiyun AUDIO_FADE_RATE_64 = 6, 226*4882a593Smuzhiyun AUDIO_FADE_RATE_128 = 7, 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun AUDIO_FADE_RATE_BUTT 229*4882a593Smuzhiyun } AUDIO_FADE_RATE_E; 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun typedef struct rkAUDIO_FADE_S { 232*4882a593Smuzhiyun RK_BOOL bFade; 233*4882a593Smuzhiyun AUDIO_FADE_RATE_E enFadeInRate; 234*4882a593Smuzhiyun AUDIO_FADE_RATE_E enFadeOutRate; 235*4882a593Smuzhiyun } AUDIO_FADE_S; 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun typedef enum rkAUDIO_VOLUME_CURVE_E { 238*4882a593Smuzhiyun AUDIO_CURVE_UNSET = 0, 239*4882a593Smuzhiyun AUDIO_CURVE_LINEAR = 1, 240*4882a593Smuzhiyun AUDIO_CURVE_LOGARITHM = 2, 241*4882a593Smuzhiyun AUDIO_CURVE_CUSTOMIZE = 3, 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun AUDIO_CURVE_BUTT 244*4882a593Smuzhiyun } AUDIO_VOLUME_CURVE_E; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun typedef struct rkAUDIO_VOLUME_CURVE_S { 247*4882a593Smuzhiyun AUDIO_VOLUME_CURVE_E enCurveType; 248*4882a593Smuzhiyun RK_S32 s32Resolution; 249*4882a593Smuzhiyun RK_FLOAT fMinDB; 250*4882a593Smuzhiyun RK_FLOAT fMaxDB; 251*4882a593Smuzhiyun RK_U32 *pCurveTable; 252*4882a593Smuzhiyun } AUDIO_VOLUME_CURVE_S; 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun /*Defines the configure parameters of AI saving file.*/ 255*4882a593Smuzhiyun typedef struct rkAUDIO_SAVE_FILE_INFO_S { 256*4882a593Smuzhiyun RK_BOOL bCfg; 257*4882a593Smuzhiyun RK_CHAR aFilePath[MAX_AUDIO_FILE_PATH_LEN]; 258*4882a593Smuzhiyun RK_CHAR aFileName[MAX_AUDIO_FILE_NAME_LEN]; 259*4882a593Smuzhiyun RK_U32 u32FileSize; /*in KB*/ 260*4882a593Smuzhiyun } AUDIO_SAVE_FILE_INFO_S; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun /*Defines whether the file is saving or not .*/ 263*4882a593Smuzhiyun typedef struct rkAUDIO_FILE_STATUS_S { 264*4882a593Smuzhiyun RK_BOOL bSaving; 265*4882a593Smuzhiyun } AUDIO_FILE_STATUS_S; 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun typedef enum rkAIO_VQE_CONFIG_METHOD { 268*4882a593Smuzhiyun AIO_VQE_CONFIG_NONE, 269*4882a593Smuzhiyun AIO_VQE_CONFIG_USER, // user set all configs by parameters 270*4882a593Smuzhiyun AIO_VQE_CONFIG_LOAD_FILE, // read and parse config file 271*4882a593Smuzhiyun } AIO_VQE_CONFIG_METHOD; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun typedef enum rkAI_VQE_TYPE_S { 274*4882a593Smuzhiyun AI_VQE_NONE = 0, 275*4882a593Smuzhiyun AI_VQE_RECORD, 276*4882a593Smuzhiyun AI_VQE_TALK, 277*4882a593Smuzhiyun } AI_VQE_TYPE_S; 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun typedef struct rkAI_VQE_CONFIG_S { 280*4882a593Smuzhiyun AIO_VQE_CONFIG_METHOD enCfgMode; /* see AIO_VQE_CONFIG_METHOD */ 281*4882a593Smuzhiyun RK_S32 s32WorkSampleRate; /* Sample Rate: 8KHz/16KHz/48KHz. default: 16KHz*/ 282*4882a593Smuzhiyun RK_S32 s32FrameSample; /* VQE frame length, default: 256 frames(16ms,16KHz) */ 283*4882a593Smuzhiyun union { 284*4882a593Smuzhiyun /* config file if enCfgMode = AIO_VQE_CONFIG_LOAD_FILE */ 285*4882a593Smuzhiyun RK_CHAR aCfgFile[MAX_AUDIO_FILE_PATH_LEN]; 286*4882a593Smuzhiyun }; 287*4882a593Smuzhiyun } AI_VQE_CONFIG_S; 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun typedef struct rkAI_AED_CONFIG_S { 290*4882a593Smuzhiyun RK_FLOAT fSnrDB; 291*4882a593Smuzhiyun RK_FLOAT fLsdDB; 292*4882a593Smuzhiyun RK_S32 s32Policy; 293*4882a593Smuzhiyun } AI_AED_CONFIG_S; 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun typedef struct rkAI_AED_RESULT_S { 296*4882a593Smuzhiyun RK_BOOL bAcousticEventDetected; 297*4882a593Smuzhiyun RK_BOOL bLoudSoundDetected; 298*4882a593Smuzhiyun RK_FLOAT lsdResult; 299*4882a593Smuzhiyun } AI_AED_RESULT_S; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun typedef RK_VOID (*AI_BCD_CB)(void); 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun typedef struct rkAI_BCD_CONFIG_S { 304*4882a593Smuzhiyun RK_S32 mFrameLen; // Statistics frame length, the longer it is, the harder it is to wake up 305*4882a593Smuzhiyun RK_S32 mBlankFrameMax; // Reset the frame length, and re-statistics when the frame length exceeds it 306*4882a593Smuzhiyun RK_FLOAT mCryEnergy; 307*4882a593Smuzhiyun RK_FLOAT mJudgeEnergy; 308*4882a593Smuzhiyun RK_FLOAT mCryThres1; 309*4882a593Smuzhiyun RK_FLOAT mCryThres2; 310*4882a593Smuzhiyun } AI_BCD_CONFIG_S; 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun typedef struct rkAI_BCD_RESULT_S { 313*4882a593Smuzhiyun RK_BOOL bBabyCry; 314*4882a593Smuzhiyun } AI_BCD_RESULT_S; 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun typedef struct rkAI_BUZ_CONFIG_S { 317*4882a593Smuzhiyun RK_S32 mFrameLen; // Statistics frame length, the longer it is, the harder it is to wake up 318*4882a593Smuzhiyun RK_S32 mBlankFrameMax; // Reset the frame length, and re-statistics when the frame length exceeds it 319*4882a593Smuzhiyun RK_FLOAT mEnergyMean; 320*4882a593Smuzhiyun RK_FLOAT mEnergyMax; 321*4882a593Smuzhiyun RK_FLOAT mBuzThres1; 322*4882a593Smuzhiyun RK_FLOAT mBuzThres2; 323*4882a593Smuzhiyun } AI_BUZ_CONFIG_S; 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun typedef struct rkAI_BUZ_RESULT_S { 326*4882a593Smuzhiyun RK_BOOL bBuzz; 327*4882a593Smuzhiyun } AI_BUZ_RESULT_S; 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun typedef struct rkAI_GBS_CONFIG_S { 330*4882a593Smuzhiyun RK_S32 mFrameLen; // Statistics frame length, the longer it is, the harder it is to wake up 331*4882a593Smuzhiyun } AI_GBS_CONFIG_S; 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun typedef struct rkAI_GBS_RESULT_S { 334*4882a593Smuzhiyun RK_BOOL bGbs; 335*4882a593Smuzhiyun } AI_GBS_RESULT_S; 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /**Defines the configure parameters of ANR.*/ 338*4882a593Smuzhiyun typedef struct rkAUDIO_ANR_CONFIG_S { 339*4882a593Smuzhiyun RK_FLOAT fNoiseFactor; 340*4882a593Smuzhiyun RK_S32 s32SwU; 341*4882a593Smuzhiyun RK_FLOAT fPsiMin; 342*4882a593Smuzhiyun RK_FLOAT fPsiMax; 343*4882a593Smuzhiyun RK_FLOAT fGmin; 344*4882a593Smuzhiyun } AUDIO_ANR_CONFIG_S; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun typedef struct rkAUDIO_AGC_CONFIG_S { 347*4882a593Smuzhiyun RK_FLOAT fAttackTime; 348*4882a593Smuzhiyun RK_FLOAT fReleaseTime; 349*4882a593Smuzhiyun RK_FLOAT fAttenuateTime; 350*4882a593Smuzhiyun RK_FLOAT fMaxGain; 351*4882a593Smuzhiyun RK_FLOAT fMaxPeak; 352*4882a593Smuzhiyun RK_FLOAT fRth0; 353*4882a593Smuzhiyun RK_FLOAT fRth1; 354*4882a593Smuzhiyun RK_FLOAT fRth2; 355*4882a593Smuzhiyun RK_FLOAT fRk0; 356*4882a593Smuzhiyun RK_FLOAT fRk1; 357*4882a593Smuzhiyun RK_FLOAT fRk2; 358*4882a593Smuzhiyun RK_FLOAT fLineGainDb; 359*4882a593Smuzhiyun RK_S32 s32SwSmL0; 360*4882a593Smuzhiyun RK_S32 s32SwSmL1; 361*4882a593Smuzhiyun RK_S32 s32SwSmL2; 362*4882a593Smuzhiyun } AUDIO_AGC_CONFIG_S; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun typedef enum rkAO_VQE_MASK { 365*4882a593Smuzhiyun AO_VQE_MASK_NONE = 1 << 0, 366*4882a593Smuzhiyun AO_VQE_MASK_3A = 1 << 1, 367*4882a593Smuzhiyun AO_VQE_MASK_AGC = 1 << 2, 368*4882a593Smuzhiyun AO_VQE_MASK_ANR = 1 << 3, 369*4882a593Smuzhiyun } AO_VQE_MASK; 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun typedef struct rkAO_VQE_USER_CONFIG_S { 372*4882a593Smuzhiyun RK_U32 u32OpenMask; /* see AO_VQE_MASK */ 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun AUDIO_AGC_CONFIG_S stAgcCfg; 375*4882a593Smuzhiyun AUDIO_ANR_CONFIG_S stAnrCfg; 376*4882a593Smuzhiyun } AO_VQE_USER_CONFIG_S; 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun typedef struct rkAO_VQE_CONFIG_S { 379*4882a593Smuzhiyun AIO_VQE_CONFIG_METHOD enCfgMode; /* see AIO_VQE_CONFIG_METHOD */ 380*4882a593Smuzhiyun RK_S32 s32WorkSampleRate; /* Sample Rate: 8KHz/16KHz/48KHz. default: 16KHz*/ 381*4882a593Smuzhiyun RK_S32 s32FrameSample; /* VQE frame length, default: 256 frames(16ms,16KHz) */ 382*4882a593Smuzhiyun union { 383*4882a593Smuzhiyun /* config file if enCfgMode = AIO_VQE_CONFIG_LOAD_FILE */ 384*4882a593Smuzhiyun RK_CHAR aCfgFile[MAX_AUDIO_FILE_PATH_LEN]; 385*4882a593Smuzhiyun /* set user' parameters if enCfgMode = AIO_VQE_CONFIG_USER */ 386*4882a593Smuzhiyun AO_VQE_USER_CONFIG_S stUsrCfg; 387*4882a593Smuzhiyun }; 388*4882a593Smuzhiyun } AO_VQE_CONFIG_S; 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun typedef enum rkEN_AIO_ERR_CODE_E { 391*4882a593Smuzhiyun AIO_ERR_VQE_ERR = 65 , /*vqe error*/ 392*4882a593Smuzhiyun } RK_AIO_ERR_CODE_E; 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* at lease one parameter is illagal ,eg, an illegal enumeration value */ 395*4882a593Smuzhiyun #define RK_ERR_AIO_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_AIO, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 396*4882a593Smuzhiyun /* using a NULL point */ 397*4882a593Smuzhiyun #define RK_ERR_AIO_NULL_PTR RK_DEF_ERR(RK_ID_AIO, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 398*4882a593Smuzhiyun /* operation is not supported by NOW */ 399*4882a593Smuzhiyun #define RK_ERR_AIO_NOT_PERM RK_DEF_ERR(RK_ID_AIO, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 400*4882a593Smuzhiyun /* vqe err */ 401*4882a593Smuzhiyun #define RK_ERR_AIO_REGISTER_ERR RK_DEF_ERR(RK_ID_AIO, RK_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR) 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* invlalid device ID */ 404*4882a593Smuzhiyun #define RK_ERR_AI_INVALID_DEVID RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID) 405*4882a593Smuzhiyun /* invlalid channel ID */ 406*4882a593Smuzhiyun #define RK_ERR_AI_INVALID_CHNID RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID) 407*4882a593Smuzhiyun /* at lease one parameter is illagal ,eg, an illegal enumeration value */ 408*4882a593Smuzhiyun #define RK_ERR_AI_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 409*4882a593Smuzhiyun /* using a NULL point */ 410*4882a593Smuzhiyun #define RK_ERR_AI_NULL_PTR RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 411*4882a593Smuzhiyun /* try to enable or initialize system,device or channel, before configing attribute */ 412*4882a593Smuzhiyun #define RK_ERR_AI_NOT_CONFIG RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG) 413*4882a593Smuzhiyun /* operation is not supported by NOW */ 414*4882a593Smuzhiyun #define RK_ERR_AI_NOT_SUPPORT RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) 415*4882a593Smuzhiyun /* operation is not permitted ,eg, try to change stati attribute */ 416*4882a593Smuzhiyun #define RK_ERR_AI_NOT_PERM RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 417*4882a593Smuzhiyun /* the devide is not enabled */ 418*4882a593Smuzhiyun #define RK_ERR_AI_NOT_ENABLED RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) 419*4882a593Smuzhiyun /* failure caused by malloc memory */ 420*4882a593Smuzhiyun #define RK_ERR_AI_NOMEM RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) 421*4882a593Smuzhiyun /* failure caused by malloc buffer */ 422*4882a593Smuzhiyun #define RK_ERR_AI_NOBUF RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 423*4882a593Smuzhiyun /* no data in buffer */ 424*4882a593Smuzhiyun #define RK_ERR_AI_BUF_EMPTY RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) 425*4882a593Smuzhiyun /* no buffer for new data */ 426*4882a593Smuzhiyun #define RK_ERR_AI_BUF_FULL RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) 427*4882a593Smuzhiyun /* system is not ready,had not initialed or loaded*/ 428*4882a593Smuzhiyun #define RK_ERR_AI_SYS_NOTREADY RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun #define RK_ERR_AI_BUSY RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) 431*4882a593Smuzhiyun /* vqe err */ 432*4882a593Smuzhiyun #define RK_ERR_AI_VQE_ERR RK_DEF_ERR(RK_ID_AI, RK_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR) 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun /* invlalid device ID */ 435*4882a593Smuzhiyun #define RK_ERR_AO_INVALID_DEVID RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID) 436*4882a593Smuzhiyun /* invlalid channel ID */ 437*4882a593Smuzhiyun #define RK_ERR_AO_INVALID_CHNID RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID) 438*4882a593Smuzhiyun /* at lease one parameter is illagal ,eg, an illegal enumeration value */ 439*4882a593Smuzhiyun #define RK_ERR_AO_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 440*4882a593Smuzhiyun /* using a NULL point */ 441*4882a593Smuzhiyun #define RK_ERR_AO_NULL_PTR RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 442*4882a593Smuzhiyun /* try to enable or initialize system,device or channel, before configing attribute */ 443*4882a593Smuzhiyun #define RK_ERR_AO_NOT_CONFIG RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG) 444*4882a593Smuzhiyun /* operation is not supported by NOW */ 445*4882a593Smuzhiyun #define RK_ERR_AO_NOT_SUPPORT RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) 446*4882a593Smuzhiyun /* operation is not permitted ,eg, try to change stati attribute */ 447*4882a593Smuzhiyun #define RK_ERR_AO_NOT_PERM RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 448*4882a593Smuzhiyun /* the devide is not enabled */ 449*4882a593Smuzhiyun #define RK_ERR_AO_NOT_ENABLED RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) 450*4882a593Smuzhiyun /* failure caused by malloc memory */ 451*4882a593Smuzhiyun #define RK_ERR_AO_NOMEM RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) 452*4882a593Smuzhiyun /* failure caused by malloc buffer */ 453*4882a593Smuzhiyun #define RK_ERR_AO_NOBUF RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 454*4882a593Smuzhiyun /* no data in buffer */ 455*4882a593Smuzhiyun #define RK_ERR_AO_BUF_EMPTY RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) 456*4882a593Smuzhiyun /* no buffer for new data */ 457*4882a593Smuzhiyun #define RK_ERR_AO_BUF_FULL RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) 458*4882a593Smuzhiyun /* system is not ready,had not initialed or loaded*/ 459*4882a593Smuzhiyun #define RK_ERR_AO_SYS_NOTREADY RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun #define RK_ERR_AO_BUSY RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) 462*4882a593Smuzhiyun /* vqe err */ 463*4882a593Smuzhiyun #define RK_ERR_AO_VQE_ERR RK_DEF_ERR(RK_ID_AO, RK_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR) 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun #ifdef __cplusplus 467*4882a593Smuzhiyun #if __cplusplus 468*4882a593Smuzhiyun } 469*4882a593Smuzhiyun #endif 470*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */ 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun #endif // INCLUDE_RT_MPI_MPI_COMM_AIO_H_ 473