• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __HI_COMM_AIO_H__
17 #define __HI_COMM_AIO_H__
18 
19 #include "hi_common.h"
20 #include "hi_errno.h"
21 
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif
26 #endif /* End of #ifdef __cplusplus */
27 
28 
29 #define MAX_AUDIO_FRAME_NUM    300      /* max count of audio frame in Buffer */
30 #define MAX_AUDIO_POINT_BYTES  4        /* max bytes of one sample point(now 32bit max) */
31 
32 #define MAX_VOICE_POINT_NUM    480      /* max sample per frame for voice encode */
33 
34 #define MAX_AUDIO_POINT_NUM    2048     /* max sample per frame for all encoder(aacplus:2048) */
35 #define MAX_AO_POINT_NUM       4096     /* from h3;support 4096 framelen */
36 #define MIN_AUDIO_POINT_NUM    80       /* min sample per frame */
37 #define MAX_AI_POINT_NUM       2048     /* max sample per frame for all encoder(aacplus:2048) */
38 
39 /* max length of audio frame by bytes, one frame contain many sample point */
40 #define MAX_AUDIO_FRAME_LEN    (MAX_AUDIO_POINT_BYTES*MAX_AO_POINT_NUM)
41 
42 /* max length of audio stream by bytes */
43 #define MAX_AUDIO_STREAM_LEN   MAX_AUDIO_FRAME_LEN
44 
45 #define MAX_AI_USRFRM_DEPTH     30      /* max depth of user frame buf */
46 
47 #define MAX_AUDIO_FILE_PATH_LEN 256
48 #define MAX_AUDIO_FILE_NAME_LEN 256
49 
50 /* The VQE EQ Band num. */
51 #define VQE_EQ_BAND_NUM  10
52 #define VQE_DRC_SECNUM 5
53 
54 /* The VQE AEC Band num. */
55 #define AEC_ERL_BAND_NUM       6
56 #define AEC_ERL_BAND_VALUE_NUM 7
57 
58 /* The TalkVQEV2 EQ Band num. */
59 #define TALKVQEV2_EQ_BAND_NUM   30
60 
61 #define AI_TALKVQEV2_MASK_PNR       0x1
62 #define AI_TALKVQEV2_MASK_NR        0x2
63 #define AI_TALKVQEV2_MASK_EQ        0x4
64 #define AI_TALKVQEV2_MASK_AGC       0x8
65 #define AI_TALKVQEV2_MASK_DRC       0x10
66 #define AI_TALKVQEV2_MASK_LIMITER   0x20
67 #define AI_TALKVQEV2_MASK_DEREVERB  0x40
68 #define AI_TALKVQEV2_MASK_FMP       0x80
69 #define AI_TALKVQEV2_MASK_WNR       0x100
70 
71 #define AI_RECORDVQE_MASK_HPF       0x1
72 #define AI_RECORDVQE_MASK_RNR       0x2
73 #define AI_RECORDVQE_MASK_HDR       0x4
74 #define AI_RECORDVQE_MASK_DRC       0x8
75 #define AI_RECORDVQE_MASK_EQ        0x10
76 #define AI_RECORDVQE_MASK_AGC       0x20
77 
78 #define AI_TALKVQE_MASK_HPF     0x1
79 #define AI_TALKVQE_MASK_AEC     0x2
80 #define AI_TALKVQE_MASK_AGC     0x8
81 #define AI_TALKVQE_MASK_EQ      0x10
82 #define AI_TALKVQE_MASK_ANR     0x20
83 
84 #define AO_VQE_MASK_HPF         0x1
85 #define AO_VQE_MASK_ANR         0x2
86 #define AO_VQE_MASK_AGC         0x4
87 #define AO_VQE_MASK_EQ          0x8
88 
89 
90 typedef enum hiAUDIO_SAMPLE_RATE_E {
91     AUDIO_SAMPLE_RATE_8000   = 8000,    /* 8K samplerate */
92     AUDIO_SAMPLE_RATE_12000  = 12000,   /* 12K samplerate */
93     AUDIO_SAMPLE_RATE_11025  = 11025,   /* 11.025K samplerate */
94     AUDIO_SAMPLE_RATE_16000  = 16000,   /* 16K samplerate */
95     AUDIO_SAMPLE_RATE_22050  = 22050,   /* 22.050K samplerate */
96     AUDIO_SAMPLE_RATE_24000  = 24000,   /* 24K samplerate */
97     AUDIO_SAMPLE_RATE_32000  = 32000,   /* 32K samplerate */
98     AUDIO_SAMPLE_RATE_44100  = 44100,   /* 44.1K samplerate */
99     AUDIO_SAMPLE_RATE_48000  = 48000,   /* 48K samplerate */
100     AUDIO_SAMPLE_RATE_64000  = 64000,   /* 64K samplerate */
101     AUDIO_SAMPLE_RATE_96000  = 96000,   /* 96K samplerate */
102     AUDIO_SAMPLE_RATE_BUTT,
103 } AUDIO_SAMPLE_RATE_E;
104 
105 typedef enum hiAUDIO_BIT_WIDTH_E {
106     AUDIO_BIT_WIDTH_8   = 0,   /* 8bit width */
107     AUDIO_BIT_WIDTH_16  = 1,   /* 16bit width */
108     AUDIO_BIT_WIDTH_24  = 2,   /* 24bit width */
109     AUDIO_BIT_WIDTH_BUTT,
110 } AUDIO_BIT_WIDTH_E;
111 
112 typedef enum hiAIO_MODE_E {
113     AIO_MODE_I2S_MASTER  = 0,   /* AIO I2S master mode */
114     AIO_MODE_I2S_SLAVE,         /* AIO I2S slave mode */
115     AIO_MODE_PCM_SLAVE_STD,     /* AIO PCM slave standard mode */
116     AIO_MODE_PCM_SLAVE_NSTD,    /* AIO PCM slave non-standard mode */
117     AIO_MODE_PCM_MASTER_STD,    /* AIO PCM master standard mode */
118     AIO_MODE_PCM_MASTER_NSTD,   /* AIO PCM master non-standard mode */
119     AIO_MODE_BUTT
120 } AIO_MODE_E;
121 
122 typedef enum {
123     AIO_I2STYPE_INNERCODEC = 0, /* AIO I2S connect inner audio CODEC */
124     AIO_I2STYPE_INNERHDMI,      /* AIO I2S connect Inner HDMI */
125     AIO_I2STYPE_EXTERN,         /* AIO I2S connect extern hardware */
126 } AIO_I2STYPE_E;
127 
128 typedef enum hiAIO_SOUND_MODE_E {
129     AUDIO_SOUND_MODE_MONO   = 0, /* mono */
130     AUDIO_SOUND_MODE_STEREO = 1, /* stereo */
131     AUDIO_SOUND_MODE_BUTT
132 } AUDIO_SOUND_MODE_E;
133 
134 /*
135 An example of the packing scheme for G726-32 codewords is as shown,
136 and bit A3 is the least significant bit of the first codeword:
137 RTP G726-32:
138 0                   1
139 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
140 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
141 |B B B B|A A A A|D D D D|C C C C| ...
142 |0 1 2 3|0 1 2 3|0 1 2 3|0 1 2 3|
143 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
144 
145 MEDIA G726-32:
146 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
147 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
148 |A A A A|B B B B|C C C C|D D D D| ...
149 |3 2 1 0|3 2 1 0|3 2 1 0|3 2 1 0|
150 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
151 */
152 typedef enum hiG726_BPS_E {
153     G726_16K = 0,       /* G726 16kbps, see RFC3551.txt  4.5.4 G726-16 */
154     G726_24K,           /* G726 24kbps, see RFC3551.txt  4.5.4 G726-24 */
155     G726_32K,           /* G726 32kbps, see RFC3551.txt  4.5.4 G726-32 */
156     G726_40K,           /* G726 40kbps, see RFC3551.txt  4.5.4 G726-40 */
157     MEDIA_G726_16K,     /* G726 16kbps for ASF ... */
158     MEDIA_G726_24K,     /* G726 24kbps for ASF ... */
159     MEDIA_G726_32K,     /* G726 32kbps for ASF ... */
160     MEDIA_G726_40K,     /* G726 40kbps for ASF ... */
161     G726_BUTT,
162 } G726_BPS_E;
163 
164 typedef enum hiADPCM_TYPE_E {
165     /* see DVI4 diiffers in three respects from the IMA ADPCM at RFC3551.txt 4.5.1 DVI4 */
166     ADPCM_TYPE_DVI4 = 0,    /* 32kbps ADPCM(DVI4) for RTP */
167     ADPCM_TYPE_IMA,         /* 32kbps ADPCM(IMA),NOTICE:point num must be 161/241/321/481 */
168     ADPCM_TYPE_ORG_DVI4,
169     ADPCM_TYPE_BUTT,
170 } ADPCM_TYPE_E;
171 
172 #define AI_EXPAND  0x01
173 #define AI_CUT     0x02
174 
175 typedef struct hiAIO_ATTR_S {
176     AUDIO_SAMPLE_RATE_E enSamplerate;   /* sample rate */
177     AUDIO_BIT_WIDTH_E   enBitwidth;     /* bitwidth */
178     AIO_MODE_E          enWorkmode;     /* master or slave mode */
179     AUDIO_SOUND_MODE_E  enSoundmode;    /* momo or steror */
180     HI_U32              u32EXFlag;      /* expand 8bit to 16bit, use AI_EXPAND(only valid for AI 8bit),
181                                            use AI_CUT(only valid for extern Codec for 24bit) */
182     HI_U32              u32FrmNum;      /* frame num in buf[2,MAX_AUDIO_FRAME_NUM] */
183     HI_U32              u32PtNumPerFrm; /* point num per frame (80/160/240/320/480/1024/2048)
184                                            (ADPCM IMA should add 1 point, AMR only support 160) */
185     HI_U32              u32ChnCnt;      /* channle number on FS, valid value:1/2/4/8 */
186     HI_U32              u32ClkSel;      /* 0: AI and AO clock is separate
187                                            1: AI and AO clock is inseparate, AI use AO's clock */
188     AIO_I2STYPE_E       enI2sType;      /* i2s type */
189 } AIO_ATTR_S;
190 
191 typedef struct hiAI_CHN_PARAM_S {
192     HI_U32 u32UsrFrmDepth;
193 } AI_CHN_PARAM_S;
194 
195 typedef enum hiAI_CHN_MODE_E {
196     AI_CHN_MODE_NORMAL = 0,     /* normal mode for AI chn */
197     AI_CHN_MODE_FAST,           /* fast mode for AI chn */
198     AI_CHN_MODE_BUTT,
199 } AI_CHN_MODE_E;
200 
201 typedef struct hiAI_CHN_ATTR_S {
202     AI_CHN_MODE_E enMode;       /* operating mode */
203 } AI_CHN_ATTR_S;
204 
205 typedef struct hiAUDIO_FRAME_S {
206     AUDIO_BIT_WIDTH_E   enBitwidth;     /* audio frame bitwidth */
207     AUDIO_SOUND_MODE_E  enSoundmode;    /* audio frame momo or stereo mode */
208     HI_U8  *u64VirAddr[2];              /* 2: 2chn */
209     HI_U64  u64PhyAddr[2];              /* 2: 2chn */
210     HI_U64  u64TimeStamp;               /* audio frame timestamp */
211     HI_U32  u32Seq;                     /* audio frame seq */
212     HI_U32  u32Len;                     /* data length per channel in frame */
213     HI_U32  u32PoolId[2];               /* 2: 2chn */
214 } AUDIO_FRAME_S;
215 
216 typedef struct hiAEC_FRAME_S {
217     AUDIO_FRAME_S   stRefFrame;    /* AEC reference audio frame */
218     HI_BOOL         bValid;        /* whether frame is valid */
219     HI_BOOL         bSysBind;      /* whether is sysbind */
220 } AEC_FRAME_S;
221 
222 
223 typedef struct hiAUDIO_FRAME_INFO_S {
224     AUDIO_FRAME_S *pstFrame; /* frame ptr */
225     HI_U32         u32Id;   /* frame id */
226 } AUDIO_FRAME_INFO_S;
227 
228 typedef struct hiAUDIO_STREAM_S {
229     HI_U8 ATTRIBUTE *pStream;         /* the virtual address of stream */
230     HI_U64 ATTRIBUTE u64PhyAddr;      /* the physics address of stream */
231     HI_U32 u32Len;          /* stream length, by bytes */
232     HI_U64 u64TimeStamp;    /* frame time stamp */
233     HI_U32 u32Seq;          /* frame seq, if stream is not a valid frame,u32Seq is 0 */
234 } AUDIO_STREAM_S;
235 
236 
237 typedef struct hiAO_CHN_STATE_S {
238     HI_U32                  u32ChnTotalNum;    /* total number of channel buffer */
239     HI_U32                  u32ChnFreeNum;     /* free number of channel buffer */
240     HI_U32                  u32ChnBusyNum;     /* busy number of channel buffer */
241 } AO_CHN_STATE_S;
242 
243 typedef enum hiAUDIO_TRACK_MODE_E {
244     AUDIO_TRACK_NORMAL      = 0,
245     AUDIO_TRACK_BOTH_LEFT   = 1,
246     AUDIO_TRACK_BOTH_RIGHT  = 2,
247     AUDIO_TRACK_EXCHANGE    = 3,
248     AUDIO_TRACK_MIX         = 4,
249     AUDIO_TRACK_LEFT_MUTE   = 5,
250     AUDIO_TRACK_RIGHT_MUTE  = 6,
251     AUDIO_TRACK_BOTH_MUTE   = 7,
252 
253     AUDIO_TRACK_BUTT
254 } AUDIO_TRACK_MODE_E;
255 
256 
257 typedef enum hiAUDIO_FADE_RATE_E {
258     AUDIO_FADE_RATE_1   = 0,
259     AUDIO_FADE_RATE_2   = 1,
260     AUDIO_FADE_RATE_4   = 2,
261     AUDIO_FADE_RATE_8   = 3,
262     AUDIO_FADE_RATE_16  = 4,
263     AUDIO_FADE_RATE_32  = 5,
264     AUDIO_FADE_RATE_64  = 6,
265     AUDIO_FADE_RATE_128 = 7,
266 
267     AUDIO_FADE_RATE_BUTT
268 } AUDIO_FADE_RATE_E;
269 
270 typedef struct hiAUDIO_FADE_S {
271     HI_BOOL         bFade;
272     AUDIO_FADE_RATE_E enFadeInRate;
273     AUDIO_FADE_RATE_E enFadeOutRate;
274 } AUDIO_FADE_S;
275 
276 /* Defines the configure parameters of AEC. */
277 typedef struct hiAI_AEC_CONFIG_S {
278     HI_BOOL bUsrMode;               /* mode 0: auto mode 1: mannual. */
279     HI_S8 s8CngMode;                /* cozy noisy mode: 0 close, 1 open, recommend 1 */
280     HI_S8 s8NearAllPassEnergy;      /* the far-end energy threshold for judging whether unvarnished transmission:
281                                        0 -59dBm0, 1 -49dBm0, 2 -39dBm0, recommend 1 */
282     HI_S8 s8NearCleanSupEnergy;     /* the energy threshold for compelling reset of near-end signal:
283                                        0 12dB, 1 15dB, 2 18dB, recommend 2 */
284 
285     HI_S16 s16DTHnlSortQTh;         /* the threshold of judging single or double talk, recommend 16384, [0, 32767] */
286 
287     HI_S16 s16EchoBandLow;          /* voice processing band1, low frequency parameter,
288                                        [1, 63) for 8k, [1, 127) for 16k, recommend 10 */
289     HI_S16 s16EchoBandHigh;         /* voice processing band1, high frequency parameter, (s16EchoBandLow, 63] for 8k,
290                                        (s16EchoBandLow, 127] for 16k, recommend 41,
291                                        s16EchoBandHigh must be greater than s16EchoBandLow */
292     HI_S16 s16EchoBandLow2;         /* voice processing band2, low frequency parameter,
293                                        [1, 63) for 8k, [1, 127) for 16k, recommend 47 */
294     HI_S16 s16EchoBandHigh2;        /* voice processing band2, high frequency parameter,
295                                        (s16EchoBandLow2, 63] for 8k, (s16EchoBandLow2, 127] for 16k,
296                                        recommend 72, s16EchoBandHigh2 must be greater than s16EchoBandLow2 */
297 
298     HI_S16 s16ERLBand[AEC_ERL_BAND_NUM];    /* ERL protect area, [1, 63] for 8k, [1, 127] for 16k,
299                                                frequency band calculated by s16ERLBand * 62.5,
300                                                besides, s16ERLBand[n+1] should be greater than s16ERLBand[n] */
301     HI_S16 s16ERL[AEC_ERL_BAND_VALUE_NUM];  /* ERL protect value of ERL protect area,
302                                                the smaller its value, the more strength its protect ability,[0, 18] */
303     HI_S16 s16VioceProtectFreqL;    /* protect area of near-end low frequency,
304                                        [1, 63) for 8k, [1, 127) for 16k, recommend 3 */
305     HI_S16 s16VioceProtectFreqL1;   /* protect area of near-end low frequency1, (s16VioceProtectFreqL, 63] for 8k,
306                                        (s16VioceProtectFreqL, 127] for 16k, recommend 6 */
307     HI_S32 s32Reserved;             /* s16VioceProtectFreqL1 must be greater than s16VioceProtectFreqL */
308 } AI_AEC_CONFIG_S;
309 
310 /* Defines the configure parameters of ANR. */
311 typedef struct hiAUDIO_ANR_CONFIG_S {
312     HI_BOOL bUsrMode;   /* mode 0: auto, mode 1: manual. */
313 
314     HI_S16 s16NrIntensity;       /* noise reduce intensity, range: [0, 25] */
315     HI_S16 s16NoiseDbThr;        /* noise threshold, range: [30, 60] */
316     HI_S8  s8SpProSwitch;        /* switch for music probe, range: [0:close, 1:open] */
317 
318     HI_S32 s32Reserved;
319 } AUDIO_ANR_CONFIG_S;
320 
321 /* Defines the configure parameters of AGC. */
322 typedef struct hiAUDIO_AGC_CONFIG_S {
323     HI_BOOL bUsrMode;          /* mode 0: auto, mode 1: manual. */
324 
325     HI_S8 s8TargetLevel;       /* target voltage level, range: [-40, -1]dB */
326     HI_S8 s8NoiseFloor;        /* noise floor, range: TalkVqe/AoVqe[-65, -20]dB, RecordVqe[-50, -20]dB */
327     HI_S8 s8MaxGain;           /* max gain, range: [0, 30]dB */
328     HI_S8 s8AdjustSpeed;       /* adjustable speed, range: [0, 10]dB/s */
329 
330     HI_S8 s8ImproveSNR;        /* switch for improving SNR, range: [0:close, 1:upper limit 3dB, 2:upper limit 6dB] */
331     HI_S8 s8UseHighPassFilt;   /* switch for using high pass filt,
332     range: [0:close, 1:80Hz, 2:120Hz, 3:150:Hz, 4:300Hz: 5:500Hz] */
333     HI_S8 s8OutputMode;        /* output mode, mute when lower than noise floor, range: [0:close, 1:open] */
334     HI_S16 s16NoiseSupSwitch;  /* switch for noise suppression, range: [0:close, 1:open] */
335 
336     HI_S32 s32Reserved;
337 } AUDIO_AGC_CONFIG_S;
338 
339 /* Defines the configure parameters of HPF. */
340 typedef enum hiAUDIO_HPF_FREQ_E {
341     AUDIO_HPF_FREQ_80   = 80,    /* 80Hz */
342     AUDIO_HPF_FREQ_120  = 120,   /* 120Hz */
343     AUDIO_HPF_FREQ_150  = 150,   /* 150Hz */
344     AUDIO_HPF_FREQ_BUTT,
345 } AUDIO_HPF_FREQ_E;
346 
347 typedef struct hiAUDIO_HPF_CONFIG_S {
348     HI_BOOL bUsrMode;   /* mode 0: auto mode 1: mannual. */
349     AUDIO_HPF_FREQ_E enHpfFreq; /* freq to be processed, value:HiFiVqe/TalkVqe/AoVqe(80Hz, 120Hz, 150Hz),
350                                    RecordVqe(80Hz) */
351 } AUDIO_HPF_CONFIG_S;
352 
353 typedef struct hiAI_RNR_CONFIG_S {
354     HI_BOOL bUsrMode;                /* mode 0: auto, mode 1: mannual. */
355 
356     HI_S32  s32NrMode;               /* mode 0: floor noise; 1:ambient noise */
357 
358     HI_S32 s32MaxNrLevel;            /* max NR level range:[2,20]dB */
359 
360     HI_S32  s32NoiseThresh;          /* noise threshold, range:[-80, -20] */
361 } AI_RNR_CONFIG_S;
362 
363 typedef struct hiAUDIO_EQ_CONFIG_S {
364     HI_S8  s8GaindB[VQE_EQ_BAND_NUM];   /* EQ band, include 100, 200, 250, 350, 500, 800, 1.2k, 2.5k, 4k, 8k in turn,
365                                         range:TalkVqe/AoVqe[-100, 20], RecordVqe[-50, 20] */
366     HI_S32 s32Reserved;
367 } AUDIO_EQ_CONFIG_S;
368 
369 
370 /* Defines the configure parameters of UPVQE work state. */
371 typedef enum hiVQE_WORKSTATE_E {
372     VQE_WORKSTATE_COMMON  = 0,   /* common environment, Applicable to the family of voice calls. */
373     VQE_WORKSTATE_MUSIC   = 1,   /* music environment , Applicable to the family of music environment. */
374     VQE_WORKSTATE_NOISY   = 2,   /* noisy environment , Applicable to the noisy voice calls.  */
375 } VQE_WORKSTATE_E;
376 
377 /* Defines record type */
378 typedef enum hiVQE_RECORD_TYPE {
379     VQE_RECORD_NORMAL        = 0,  /* <double micphone recording. */
380     VQE_RECORD_BUTT,
381 } VQE_RECORD_TYPE;
382 
383 
384 /* HDR Set CODEC GAIN Function Handle type */
385 typedef HI_S32 (*pFuncGainCallBack)(HI_S32 s32SetGain);
386 
387 typedef struct hiAI_HDR_CONFIG_S {
388     HI_BOOL bUsrMode;               /* mode 0: auto mode 1: mannual. */
389 
390     HI_S32 s32MinGaindB;            /* the minimum of MIC(AI) CODEC gain, [0, 120] */
391     HI_S32 s32MaxGaindB;            /* the maximum of MIC(AI) CODEC gain, [0, 120] */
392 
393     HI_S32 s32MicGaindB;            /* the current gain of MIC(AI) CODEC,[s32MinGaindB, s32MaxGaindB] */
394     HI_S32 s32MicGainStepdB;        /* the step size of gain adjustment, [1, 3], recommemd 2 */
395     pFuncGainCallBack pcallback;    /* the callback function pointer of CODEC gain adjustment */
396 } AI_HDR_CONFIG_S;
397 
398 typedef struct hiAI_DRC_CONFIG_S {
399     HI_BOOL bUsrMode;   /* enable user mode or not,default 0: disable user mode,1: user mode. */
400 
401     HI_S16  s16AttackTime;   /* time of signal change from large to small (ms),
402                                 range:HiFiVqe[10, 250]ms, RecordVqe[10, 126]ms */
403     HI_S16  s16ReleaseTime;  /* time of signal change from small to large (ms),
404                                 range:HiFiVqe[10, 250]ms, RecordVqe[10, 126]ms */
405 
406     HI_S16 s16OldLevDb[VQE_DRC_SECNUM];  /* old curve level(dB), default[0, -472, -792, -960, -1280],
407                                             range:[-1440, 0]ms,store from big to small,scale:Q4 */
408     HI_S16 s16NewLevDb[VQE_DRC_SECNUM];  /* new curve level(dB), default[0, -174, -410, -608, -1021],
409                                             range:[-1440, 0]ms, store from big to small,scale:Q4 */
410 } AI_DRC_CONFIG_S;
411 
412 typedef struct hiAI_TALKV2_EQ_CONFIG_S {
413     HI_BOOL bUsrMode;                       /* mode 0: auto, mode 1: mannual. */
414 
415     HI_S8  s8GaindB[TALKVQEV2_EQ_BAND_NUM]; /* EQ band, range:[-50, 20]dB */
416 } AI_TALKV2_EQ_CONFIG_S;
417 
418 typedef struct hiAI_TALKV2_PNR_CONFIG_S {
419     HI_BOOL bUsrMode;           /* mode 0: auto, mode 1: mannual. */
420 
421     HI_S16 s16MinGainLimit;     /* maximum allowable noise rejection, default:5827, range:[0, 32767] */
422     HI_S16 s16SnrPriorLimit;    /* minimum prior signal-to-noise ratio, default:3276, range:[0, 32767] */
423     HI_S16 s16HtThreshold;      /* voice decision threshold, default:10, range:[0, 80] */
424     HI_S16 s16HsThreshold;      /* harmonic detection threshold, default:100, range:[100, 1100] */
425     HI_S16 s16AlphaPh;          /* speech probability smoothing coefficient, default:90, range:[0, 100] */
426     HI_S16 s16AlphaPsd;         /* noise estimation smoothing factor, default:65, range:[0, 100] */
427     HI_S16 s16PriorSnrFixed;    /* fixed prior signal-to-noise ratio, default:30, range:[1, 499] */
428     HI_S16 s16CepThreshold;     /* cepstrum smooth speech threshold, default:16, range:[0, 100] */
429     HI_S16 s16SpeechProtectThreshold;   /* speech protect threshold, default:90, range:[0, 100] */
430     HI_S16 s16HemEnable;        /* harmonic enhancement enable, default:1, range:[0, 1] */
431     HI_S16 s16TcsEnable;        /* cepstral smoothing switch, default:0, range:[0, 1] */
432 
433     HI_S16 s16Reserved[3];      /* 3: reserved */
434 } AI_TALKV2_PNR_CONFIG_S;
435 
436 typedef struct hiAI_TALKV2_NR_CONFIG_S {
437     HI_BOOL bUsrMode;           /* mode 0: auto, mode 1: mannual. */
438 
439     HI_S16 s16MinGainLimit;     /* maximum allowable noise rejection, default:3276, range:[0, 32767] */
440     HI_S16 s16SnrPriorLimit;    /* minimum prior signal-to-noise ratio, default:327, range:[0, 32767] */
441     HI_S16 s16HtThreshold;      /* voice decision threshold, default:10, range:[0, 80] */
442     HI_S16 s16HsThreshold;      /* harmonic detection threshold, default:100, range:[100, 1100] */
443     HI_S16 s16PriNoiseEstiMode; /* single mic noise estimation algorithm mode, default:0, range:[0, 2] */
444     HI_S16 s16PriorSnrFixed;    /* fixed prior signal-to-noise ratio, default:20, range:[1, 499] */
445     HI_S16 s16PrioSnrThreshold; /* instantaneous prior snr, default:7, range:[5, 20] */
446     HI_S16 s16SmPrioSnrThreshold; /* smooth prior snr, default:10, range:[8, 30] */
447 
448     HI_S16 s16Reserved[16];     /* 16: reserved */
449 } AI_TALKV2_NR_CONFIG_S;
450 
451 typedef struct hiAI_TALKV2_AGC_CONFIG_S {
452     HI_BOOL bUsrMode;           /* mode 0: auto, mode 1: mannual. */
453 
454     HI_S8 s8TargetLevel;        /* target level, default:-16, range:[-120, 120] */
455     HI_U8 u8MaxGain;            /* maximum gain, default:80, range:[0, 240] */
456     HI_S8 s8MinGain;            /* minimum gain, default:-60, range:[-120, 0] */
457     HI_S8 s8AdjustSpeed;        /* adjustable speed, default:5, range: [1, 10] */
458 
459     HI_S16 s16Reserved[3];      /* 3: reserved */
460 } AI_TALKV2_AGC_CONFIG_S;
461 
462 typedef struct hiAI_TALKV2_WNR_CONFIG_S {
463     HI_S8 s8Reserved[6];        /* 6: reserved */
464 } AI_TALKV2_WNR_CONFIG_S;
465 
466 /* Defines the configure parameters of TalkV2 VQE. */
467 typedef struct hiAI_TALKVQEV2_CONFIG_S {
468     HI_U32            u32OpenMask;
469 
470     HI_S32            s32WorkSampleRate;    /* sample rate:16kHz */
471     HI_S32            s32FrameSample;       /* VQE frame length:80-4096 */
472     VQE_WORKSTATE_E   enWorkstate;
473 
474     HI_S32            s32InChNum;
475     HI_S32            s32OutChNum;
476 
477     AI_TALKV2_PNR_CONFIG_S  stPnrCfg;
478     AI_TALKV2_NR_CONFIG_S   stNrCfg;
479     AI_TALKV2_EQ_CONFIG_S   stEqCfg;
480     AI_TALKV2_AGC_CONFIG_S  stAgcCfg;
481 
482     HI_BOOL bReserved0;
483     HI_S16  s16Reserved1[19];   /* 19: reserved */
484     HI_U8   u8Reserved2[8];     /* 8: reserved */
485 
486     AI_TALKV2_WNR_CONFIG_S  stWnrCfg;
487 } AI_TALKVQEV2_CONFIG_S;
488 
489 /* Defines the configure parameters of Record VQE. */
490 typedef struct hiAI_RECORDVQE_CONFIG_S {
491     HI_U32              u32OpenMask;
492 
493     HI_S32              s32WorkSampleRate;  /* Sample Rate:16KHz/48KHz */
494     HI_S32              s32FrameSample; /* VQE frame length:80-4096 */
495     VQE_WORKSTATE_E     enWorkstate;
496 
497     HI_S32                s32InChNum;
498     HI_S32                s32OutChNum;
499     VQE_RECORD_TYPE       enRecordType;
500 
501     AUDIO_HPF_CONFIG_S  stHpfCfg;
502     AI_RNR_CONFIG_S     stRnrCfg;
503     AI_HDR_CONFIG_S     stHdrCfg;
504     AI_DRC_CONFIG_S     stDrcCfg;
505     AUDIO_EQ_CONFIG_S   stEqCfg;
506     AUDIO_AGC_CONFIG_S  stAgcCfg;
507 } AI_RECORDVQE_CONFIG_S;
508 
509 /* Defines the configure parameters of Talk VQE. */
510 typedef struct hiAI_TALKVQE_CONFIG_S {
511     HI_U32              u32OpenMask;
512 
513     HI_S32              s32WorkSampleRate;  /* Sample Rate: 8KHz/16KHz. default: 8KHz */
514     HI_S32              s32FrameSample; /* VQE frame length: 80-4096 */
515     VQE_WORKSTATE_E     enWorkstate;
516 
517     AUDIO_HPF_CONFIG_S  stHpfCfg;
518     AI_AEC_CONFIG_S     stAecCfg;
519     AUDIO_ANR_CONFIG_S  stAnrCfg;
520     AUDIO_AGC_CONFIG_S  stAgcCfg;
521     AUDIO_EQ_CONFIG_S   stEqCfg;
522 } AI_TALKVQE_CONFIG_S;
523 
524 typedef struct hiAO_VQE_CONFIG_S {
525     HI_U32              u32OpenMask;
526 
527     HI_S32              s32WorkSampleRate;  /* Sample Rate: 8KHz/16KHz/48KHz. default: 8KHz */
528     HI_S32              s32FrameSample; /* VQE frame length: 80-4096 */
529     VQE_WORKSTATE_E     enWorkstate;
530 
531     AUDIO_HPF_CONFIG_S stHpfCfg;
532     AUDIO_ANR_CONFIG_S stAnrCfg;
533     AUDIO_AGC_CONFIG_S stAgcCfg;
534     AUDIO_EQ_CONFIG_S  stEqCfg;
535 } AO_VQE_CONFIG_S;
536 
537 /* Defines the module register configure of VQE. */
538 typedef struct hiVQE_MODULE_CONFIG_S {
539     HI_VOID *pHandle;
540 } VQE_MODULE_CONFIG_S;
541 
542 typedef struct hiAUDIO_VQE_REGISTER_S {
543     VQE_MODULE_CONFIG_S stResModCfg;
544     VQE_MODULE_CONFIG_S stHpfModCfg;
545     VQE_MODULE_CONFIG_S stHdrModCfg;
546     VQE_MODULE_CONFIG_S stGainModCfg;
547 
548     // Record VQE
549     VQE_MODULE_CONFIG_S stRecordModCfg;
550 
551     // Talk VQE
552     VQE_MODULE_CONFIG_S stAecModCfg;
553     VQE_MODULE_CONFIG_S stAnrModCfg;
554     VQE_MODULE_CONFIG_S stAgcModCfg;
555     VQE_MODULE_CONFIG_S stEqModCfg;
556 
557     // HiFi VQE
558     VQE_MODULE_CONFIG_S stRnrModCfg;
559     VQE_MODULE_CONFIG_S stDrcModCfg;
560     VQE_MODULE_CONFIG_S stPeqModCfg;
561 
562     /* TalkV2 VQE */
563     VQE_MODULE_CONFIG_S stTalkV2ModCfg;
564     VQE_MODULE_CONFIG_S stWnrModCfg;
565 } AUDIO_VQE_REGISTER_S;
566 
567 /* Defines the configure parameters of AI saving file. */
568 typedef struct hiAUDIO_SAVE_FILE_INFO_S {
569     HI_BOOL     bCfg;
570     HI_CHAR     aFilePath[MAX_AUDIO_FILE_PATH_LEN];
571     HI_CHAR     aFileName[MAX_AUDIO_FILE_NAME_LEN];
572     HI_U32      u32FileSize;  /* in KB */
573 } AUDIO_SAVE_FILE_INFO_S;
574 
575 /* Defines whether the file is saving or not . */
576 typedef struct hiAUDIO_FILE_STATUS_S {
577     HI_BOOL     bSaving;
578 } AUDIO_FILE_STATUS_S;
579 
580 /* Defines audio clksel type */
581 typedef enum hiAUDIO_CLKSEL_E {
582     AUDIO_CLKSEL_BASE       = 0,  /* <Audio base clk. */
583     AUDIO_CLKSEL_SPARE,           /* <Audio spare clk. */
584 
585     AUDIO_CLKSEL_BUTT,
586 } AUDIO_CLKSEL_E;
587 
588 /* Defines audio mode parameter. */
589 typedef struct hiAUDIO_MOD_PARAM_S {
590     AUDIO_CLKSEL_E enClkSel;
591 } AUDIO_MOD_PARAM_S;
592 
593 
594 typedef enum hiEN_AIO_ERR_CODE_E {
595     AIO_ERR_VQE_ERR        = 65, /* vqe error */
596 } EN_AIO_ERR_CODE_E;
597 
598 /* at lease one parameter is illagal ,eg, an illegal enumeration value  */
599 #define HI_ERR_AIO_ILLEGAL_PARAM     HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
600 /* using a NULL point */
601 #define HI_ERR_AIO_NULL_PTR          HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
602 /* operation is not supported by NOW */
603 #define HI_ERR_AIO_NOT_PERM          HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
604 /* system is not ready, had not initialed or loaded */
605 #define HI_ERR_AIO_SYS_NOTREADY      HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
606 /* aio is working */
607 #define HI_ERR_AIO_BUSY              HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
608 /* vqe err */
609 #define HI_ERR_AIO_REGISTER_ERR      HI_DEF_ERR(HI_ID_AIO, EN_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR)
610 
611 /* invalid device ID */
612 #define HI_ERR_AI_INVALID_DEVID     HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
613 /* invalid channel ID */
614 #define HI_ERR_AI_INVALID_CHNID     HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
615 /* at lease one parameter is illagal ,eg, an illegal enumeration value  */
616 #define HI_ERR_AI_ILLEGAL_PARAM     HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
617 /* using a NULL point */
618 #define HI_ERR_AI_NULL_PTR          HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
619 /* try to enable or initialize system,device or channel, before configing attribute */
620 #define HI_ERR_AI_NOT_CONFIG        HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
621 /* operation is not supported by NOW */
622 #define HI_ERR_AI_NOT_SUPPORT       HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
623 /* operation is not permitted ,eg, try to change static attribute */
624 #define HI_ERR_AI_NOT_PERM          HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
625 /* the device is not enabled  */
626 #define HI_ERR_AI_NOT_ENABLED       HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
627 /* failure caused by malloc memory */
628 #define HI_ERR_AI_NOMEM             HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
629 /* failure caused by malloc buffer */
630 #define HI_ERR_AI_NOBUF             HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
631 /* no data in buffer */
632 #define HI_ERR_AI_BUF_EMPTY         HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
633 /* no buffer for new data */
634 #define HI_ERR_AI_BUF_FULL          HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
635 /* system is not ready,had not initialed or loaded */
636 #define HI_ERR_AI_SYS_NOTREADY      HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
637 
638 #define HI_ERR_AI_BUSY              HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
639 /* vqe  err */
640 #define HI_ERR_AI_VQE_ERR       HI_DEF_ERR(HI_ID_AI, EN_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR)
641 
642 /* invalid device ID */
643 #define HI_ERR_AO_INVALID_DEVID     HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
644 /* invalid channel ID */
645 #define HI_ERR_AO_INVALID_CHNID     HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
646 /* at lease one parameter is illagal ,eg, an illegal enumeration value  */
647 #define HI_ERR_AO_ILLEGAL_PARAM     HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
648 /* using a NULL point */
649 #define HI_ERR_AO_NULL_PTR          HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
650 /* try to enable or initialize system,device or channel, before configing attribute */
651 #define HI_ERR_AO_NOT_CONFIG        HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
652 /* operation is not supported by NOW */
653 #define HI_ERR_AO_NOT_SUPPORT       HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
654 /* operation is not permitted ,eg, try to change static attribute */
655 #define HI_ERR_AO_NOT_PERM          HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
656 /* the device is not enabled  */
657 #define HI_ERR_AO_NOT_ENABLED       HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
658 /* failure caused by malloc memory */
659 #define HI_ERR_AO_NOMEM             HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
660 /* failure caused by malloc buffer */
661 #define HI_ERR_AO_NOBUF             HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
662 /* no data in buffer */
663 #define HI_ERR_AO_BUF_EMPTY         HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
664 /* no buffer for new data */
665 #define HI_ERR_AO_BUF_FULL          HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
666 /* system is not ready,had not initialed or loaded */
667 #define HI_ERR_AO_SYS_NOTREADY      HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
668 
669 #define HI_ERR_AO_BUSY              HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
670 /* vqe err */
671 #define HI_ERR_AO_VQE_ERR       HI_DEF_ERR(HI_ID_AO, EN_ERR_LEVEL_ERROR, AIO_ERR_VQE_ERR)
672 
673 
674 #ifdef __cplusplus
675 #if __cplusplus
676 }
677 #endif
678 #endif /* End of #ifdef __cplusplus */
679 
680 #endif /* End of #ifndef __HI_COMM_AI_H__ */
681 
682