xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_aio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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