659 lines
28 KiB
C
Executable File
659 lines
28 KiB
C
Executable File
/*
|
|
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
|
|
*/
|
|
|
|
#ifndef OT_COMMON_AIO_H
|
|
#define OT_COMMON_AIO_H
|
|
|
|
#include "ot_common.h"
|
|
#include "ot_errno.h"
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
|
|
#define OT_MAX_AUDIO_FRAME_NUM 300 /* max count of audio frame in Buffer */
|
|
#define OT_MAX_AUDIO_POINT_BYTES 4 /* max bytes of one sample point(now 32bit max) */
|
|
|
|
#define OT_MAX_VOICE_POINT_NUM 480 /* max sample per frame for voice encode */
|
|
|
|
#define OT_MAX_AUDIO_POINT_NUM 2048 /* max sample per frame for all encoder(aacplus:2048) */
|
|
#define OT_MAX_AO_POINT_NUM 4096 /* support 4096 framelen */
|
|
#define OT_MIN_AUDIO_POINT_NUM 80 /* min sample per frame */
|
|
#define OT_MAX_AI_POINT_NUM 2048 /* max sample per frame for all encoder(aacplus:2048) */
|
|
|
|
#define OT_AUDIO_FRAME_CHN_NUM 2 /* channel number in frame */
|
|
|
|
/* max length of audio frame by bytes, one frame contain many sample point */
|
|
#define OT_MAX_AUDIO_FRAME_LEN (OT_MAX_AUDIO_POINT_BYTES * OT_MAX_AO_POINT_NUM)
|
|
|
|
/* max length of audio stream by bytes */
|
|
#define OT_MAX_AUDIO_STREAM_LEN OT_MAX_AUDIO_FRAME_LEN
|
|
|
|
#define OT_MAX_AI_USRFRM_DEPTH 30 /* max depth of user frame buf */
|
|
|
|
#define OT_MAX_AUDIO_FILE_PATH_LEN 256
|
|
#define OT_MAX_AUDIO_FILE_NAME_LEN 256
|
|
|
|
/* The VQE EQ Band num. */
|
|
#define OT_VQE_EQ_BAND_NUM 10
|
|
#define OT_VQE_DRC_SEC_NUM 5
|
|
|
|
/* The VQE AEC Band num. */
|
|
#define OT_AEC_ERL_BAND_NUM 6
|
|
#define OT_AEC_ERL_BAND_VALUE_NUM 7
|
|
|
|
/* The TalkVQEV2 EQ Band num. */
|
|
#define OT_TALKVQEV2_EQ_BAND_NUM 30
|
|
|
|
#define OT_AI_TALKVQEV2_MASK_PNR 0x1
|
|
#define OT_AI_TALKVQEV2_MASK_NR 0x2
|
|
#define OT_AI_TALKVQEV2_MASK_EQ 0x4
|
|
#define OT_AI_TALKVQEV2_MASK_AGC 0x8
|
|
#define OT_AI_TALKVQEV2_MASK_DRC 0x10
|
|
#define OT_AI_TALKVQEV2_MASK_LIMITER 0x20
|
|
#define OT_AI_TALKVQEV2_MASK_DEREVERB 0x40
|
|
#define OT_AI_TALKVQEV2_MASK_FMP 0x80
|
|
#define OT_AI_TALKVQEV2_MASK_WNR 0x100
|
|
|
|
#define OT_AI_RECORDVQE_MASK_HPF 0x1
|
|
#define OT_AI_RECORDVQE_MASK_RNR 0x2
|
|
#define OT_AI_RECORDVQE_MASK_HDR 0x4
|
|
#define OT_AI_RECORDVQE_MASK_DRC 0x8
|
|
#define OT_AI_RECORDVQE_MASK_EQ 0x10
|
|
#define OT_AI_RECORDVQE_MASK_AGC 0x20
|
|
|
|
#define OT_AI_TALKVQE_MASK_HPF 0x1
|
|
#define OT_AI_TALKVQE_MASK_AEC 0x2
|
|
#define OT_AI_TALKVQE_MASK_AGC 0x8
|
|
#define OT_AI_TALKVQE_MASK_EQ 0x10
|
|
#define OT_AI_TALKVQE_MASK_ANR 0x20
|
|
|
|
#define OT_AO_VQE_MASK_HPF 0x1
|
|
#define OT_AO_VQE_MASK_ANR 0x2
|
|
#define OT_AO_VQE_MASK_AGC 0x4
|
|
#define OT_AO_VQE_MASK_EQ 0x8
|
|
|
|
typedef enum {
|
|
OT_AUDIO_SAMPLE_RATE_8000 = 8000, /* 8kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_12000 = 12000, /* 12kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_11025 = 11025, /* 11.025kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_16000 = 16000, /* 16kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.05kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_24000 = 24000, /* 24kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_32000 = 32000, /* 32kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_48000 = 48000, /* 48kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_64000 = 64000, /* 64kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_96000 = 96000, /* 96kHz sample rate */
|
|
OT_AUDIO_SAMPLE_RATE_BUTT,
|
|
} ot_audio_sample_rate;
|
|
|
|
typedef enum {
|
|
OT_AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
|
|
OT_AUDIO_BIT_WIDTH_16 = 1, /* 16bit width */
|
|
OT_AUDIO_BIT_WIDTH_24 = 2, /* 24bit width */
|
|
OT_AUDIO_BIT_WIDTH_BUTT,
|
|
} ot_audio_bit_width;
|
|
|
|
typedef enum {
|
|
OT_AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */
|
|
OT_AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */
|
|
OT_AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */
|
|
OT_AIO_MODE_PCM_SLAVE_NON_STD, /* AIO PCM slave non-standard mode */
|
|
OT_AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */
|
|
OT_AIO_MODE_PCM_MASTER_NON_STD, /* AIO PCM master non-standard mode */
|
|
OT_AIO_MODE_BUTT
|
|
} ot_aio_mode;
|
|
|
|
typedef enum {
|
|
OT_AIO_I2STYPE_INNERCODEC = 0, /* AIO I2S connect inner audio CODEC */
|
|
OT_AIO_I2STYPE_INNERHDMI, /* AIO I2S connect Inner HDMI */
|
|
OT_AIO_I2STYPE_EXTERN, /* AIO I2S connect extern hardware */
|
|
} ot_aio_i2s_type;
|
|
|
|
typedef enum {
|
|
OT_AUDIO_SOUND_MODE_MONO = 0, /* mono */
|
|
OT_AUDIO_SOUND_MODE_STEREO = 1, /* stereo */
|
|
OT_AUDIO_SOUND_MODE_BUTT
|
|
} ot_audio_snd_mode;
|
|
|
|
/*
|
|
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 {
|
|
OT_G726_16K = 0, /* G726 16kbps, see RFC3551.txt 4.5.4 G726-16 */
|
|
OT_G726_24K, /* G726 24kbps, see RFC3551.txt 4.5.4 G726-24 */
|
|
OT_G726_32K, /* G726 32kbps, see RFC3551.txt 4.5.4 G726-32 */
|
|
OT_G726_40K, /* G726 40kbps, see RFC3551.txt 4.5.4 G726-40 */
|
|
OT_MEDIA_G726_16K, /* G726 16kbps for ASF ... */
|
|
OT_MEDIA_G726_24K, /* G726 24kbps for ASF ... */
|
|
OT_MEDIA_G726_32K, /* G726 32kbps for ASF ... */
|
|
OT_MEDIA_G726_40K, /* G726 40kbps for ASF ... */
|
|
OT_G726_BUTT,
|
|
} ot_g726_bps;
|
|
|
|
typedef enum {
|
|
/* see DVI4 differs in three respects from the IMA ADPCM at RFC3551.txt 4.5.1 DVI4 */
|
|
OT_ADPCM_TYPE_DVI4 = 0, /* 32kbps ADPCM(DVI4) for RTP */
|
|
OT_ADPCM_TYPE_IMA, /* 32kbps ADPCM(IMA),NOTICE:point num must be 161/241/321/481 */
|
|
OT_ADPCM_TYPE_ORG_DVI4,
|
|
OT_ADPCM_TYPE_BUTT,
|
|
} ot_adpcm_type;
|
|
|
|
#define OT_AI_EXPAND 0x01
|
|
#define OT_AI_CUT 0x02
|
|
|
|
typedef struct {
|
|
ot_audio_sample_rate sample_rate; /* sample rate */
|
|
ot_audio_bit_width bit_width; /* bit_width */
|
|
ot_aio_mode work_mode; /* master or slave mode */
|
|
ot_audio_snd_mode snd_mode; /* mono or stereo */
|
|
td_u32 expand_flag; /* expand 8bit to 16bit, use OT_AI_EXPAND(only valid for AI 8bit),
|
|
use OT_AI_CUT(only valid for extern codec for 24bit) */
|
|
td_u32 frame_num; /* frame num in buf[2,OT_MAX_AUDIO_FRAME_NUM] */
|
|
td_u32 point_num_per_frame; /* point num per frame (80/160/240/320/480/1024/2048)
|
|
(ADPCM IMA should add 1 point, AMR only support 160) */
|
|
td_u32 chn_cnt; /* channel number on FS, valid value:1/2/4/8 */
|
|
td_u32 clk_share; /* 0: AI and AO clock is separate
|
|
1: AI and AO clock is inseparate, AI use AO's clock */
|
|
ot_aio_i2s_type i2s_type; /* i2s type */
|
|
} ot_aio_attr;
|
|
|
|
typedef struct {
|
|
td_u32 usr_frame_depth;
|
|
} ot_ai_chn_param;
|
|
|
|
typedef enum {
|
|
OT_AI_CHN_MODE_NORMAL = 0, /* normal mode for AI chn */
|
|
OT_AI_CHN_MODE_FAST, /* fast mode for AI chn */
|
|
OT_AI_CHN_MODE_BUTT,
|
|
} ot_ai_chn_mode;
|
|
|
|
typedef struct {
|
|
ot_ai_chn_mode mode; /* operating mode */
|
|
} ot_ai_chn_attr;
|
|
|
|
typedef struct {
|
|
ot_audio_bit_width bit_width; /* audio frame bit_width */
|
|
ot_audio_snd_mode snd_mode; /* audio frame mono or stereo mode */
|
|
td_u8 ATTRIBUTE *virt_addr[OT_AUDIO_FRAME_CHN_NUM];
|
|
td_phys_addr_t ATTRIBUTE phys_addr[OT_AUDIO_FRAME_CHN_NUM];
|
|
td_u64 time_stamp; /* audio frame time stamp */
|
|
td_u32 seq; /* audio frame seq */
|
|
td_u32 len; /* data length per channel in frame */
|
|
td_u32 pool_id[OT_AUDIO_FRAME_CHN_NUM];
|
|
} ot_audio_frame;
|
|
|
|
typedef struct {
|
|
ot_audio_frame ref_frame; /* AEC reference audio frame */
|
|
td_bool valid; /* whether frame is valid */
|
|
td_bool sys_bind; /* whether is sysbind */
|
|
} ot_aec_frame;
|
|
|
|
typedef struct {
|
|
ot_audio_frame *frame; /* frame pointer */
|
|
td_u32 id; /* frame id */
|
|
} ot_audio_frame_info;
|
|
|
|
typedef struct {
|
|
td_u8 ATTRIBUTE *stream; /* the virtual address of stream */
|
|
td_phys_addr_t ATTRIBUTE phys_addr; /* the physics address of stream */
|
|
td_u32 len; /* stream length, by bytes */
|
|
td_u64 time_stamp; /* frame time stamp */
|
|
td_u32 seq; /* frame seq, if stream is not a valid frame,seq is 0 */
|
|
} ot_audio_stream;
|
|
|
|
typedef struct {
|
|
td_u32 chn_total_num; /* total number of channel buffer */
|
|
td_u32 chn_free_num; /* free number of channel buffer */
|
|
td_u32 chn_busy_num; /* busy number of channel buffer */
|
|
} ot_ao_chn_state;
|
|
|
|
typedef enum {
|
|
OT_AUDIO_TRACK_NORMAL = 0,
|
|
OT_AUDIO_TRACK_BOTH_LEFT = 1,
|
|
OT_AUDIO_TRACK_BOTH_RIGHT = 2,
|
|
OT_AUDIO_TRACK_EXCHANGE = 3,
|
|
OT_AUDIO_TRACK_MIX = 4,
|
|
OT_AUDIO_TRACK_LEFT_MUTE = 5,
|
|
OT_AUDIO_TRACK_RIGHT_MUTE = 6,
|
|
OT_AUDIO_TRACK_BOTH_MUTE = 7,
|
|
|
|
OT_AUDIO_TRACK_BUTT
|
|
} ot_audio_track_mode;
|
|
|
|
typedef enum {
|
|
OT_AUDIO_FADE_RATE_1 = 0,
|
|
OT_AUDIO_FADE_RATE_2 = 1,
|
|
OT_AUDIO_FADE_RATE_4 = 2,
|
|
OT_AUDIO_FADE_RATE_8 = 3,
|
|
OT_AUDIO_FADE_RATE_16 = 4,
|
|
OT_AUDIO_FADE_RATE_32 = 5,
|
|
OT_AUDIO_FADE_RATE_64 = 6,
|
|
OT_AUDIO_FADE_RATE_128 = 7,
|
|
|
|
OT_AUDIO_FADE_RATE_BUTT
|
|
} ot_audio_fade_rate;
|
|
|
|
typedef struct {
|
|
td_bool fade;
|
|
ot_audio_fade_rate fade_in_rate;
|
|
ot_audio_fade_rate fade_out_rate;
|
|
} ot_audio_fade;
|
|
|
|
/* Defines the configure parameters of AEC. */
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto mode 1: manual. */
|
|
td_s8 cozy_noisy_mode; /* cozy noisy mode: 0 close, 1 open, recommend 1 */
|
|
td_s8 near_all_pass_energy; /* the far-end energy threshold for judging whether unvarnished transmission:
|
|
0 -59dBm0, 1 -49dBm0, 2 -39dBm0, recommend 1 */
|
|
td_s8 near_clean_sup_energy; /* the energy threshold for compelling reset of near-end signal: 0 12dB,
|
|
1 15dB, 2 18dB, recommend 2 */
|
|
|
|
td_s16 double_talk_threshold; /* the threshold of judging single or double talk, recommend 16384, [0, 32767] */
|
|
|
|
td_s16 echo_band_low; /* voice processing band1, low frequency parameter, [1, 63) for 8k,
|
|
[1, 127) for 16k, recommend 10 */
|
|
td_s16 echo_band_high; /* voice processing band1, high frequency parameter, (echo_band_low, 63] for 8k,
|
|
(echo_band_low, 127] for 16k, recommend 41 */
|
|
/* echo_band_high must be greater than echo_band_low */
|
|
td_s16 echo_band_low2; /* voice processing band2, low frequency parameter,
|
|
[1, 63) for 8k, [1, 127) for 16k, recommend 47 */
|
|
td_s16 echo_band_high2; /* voice processing band2, high frequency parameter, (echo_band_low2, 63] for 8k,
|
|
(echo_band_low2, 127] for 16k, recommend 72,
|
|
echo_band_high2 must be greater than echo_band_low2 */
|
|
|
|
td_s16 erl_band[OT_AEC_ERL_BAND_NUM]; /* ERL protect area, [1, 63] for 8k, [1, 127] for 16k,
|
|
frequency band calculated by erl_band * 62.5 */
|
|
/* besides, erl_band[n+1] should be greater than erl_band[n] */
|
|
td_s16 erl[OT_AEC_ERL_BAND_VALUE_NUM]; /* ERL protect value of ERL protect area, the smaller its value,
|
|
the more strength its protect ability,[0, 18] */
|
|
td_s16 voice_protect_freq_l; /* protect area of near-end low frequency,
|
|
[1, 63) for 8k, [1, 127) for 16k, recommend 3 */
|
|
td_s16 voice_protect_freq_l1; /* protect area of near-end low frequency1, (voice_protect_freq_l, 63] for 8k,
|
|
(voice_protect_freq_l, 127] for 16k, recommend 6 */
|
|
td_s32 reserved; /* voice_protect_freq_l1 must be greater than voice_protect_freq_l */
|
|
} ot_ai_aec_cfg;
|
|
|
|
/* Defines the configure parameters of ANR. */
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
|
|
td_s16 nr_intensity; /* noise reduce intensity, range: [0, 25] */
|
|
td_s16 noise_db_threshold; /* noise threshold, range: [30, 60] */
|
|
td_s8 music_probe_switch; /* switch for music probe, range: [0:close, 1:open] */
|
|
|
|
td_s32 reserved;
|
|
} ot_audio_anr_cfg;
|
|
|
|
/* Defines the configure parameters of AGC. */
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
|
|
td_s8 target_level; /* target voltage level, range: [-40, -1]dB */
|
|
td_s8 noise_floor; /* noise floor, range: TalkVQE/AoVQE[-65, -20]dB, RecordVQE[-50, -20]dB */
|
|
td_s8 max_gain; /* max gain, range: [0, 30]dB */
|
|
td_s8 adjust_speed; /* adjustable speed, range: [0, 10]dB/s */
|
|
|
|
td_s8 improve_snr; /* switch for improving SNR, range: [0:close, 1:upper limit 3dB, 2:upper limit 6dB] */
|
|
td_s8 use_hpf; /* switch for using high pass filt,
|
|
range: [0:close, 1:80Hz, 2:120Hz, 3:150Hz, 4:300Hz, 5:500Hz] */
|
|
td_s8 output_mode; /* output mode, mute when lower than noise floor, range: [0:close, 1:open] */
|
|
td_s16 noise_suppress_switch; /* switch for noise suppression, range: [0:close, 1:open] */
|
|
|
|
td_s32 reserved;
|
|
} ot_audio_agc_cfg;
|
|
|
|
/* Defines the configure parameters of HPF. */
|
|
typedef enum {
|
|
OT_AUDIO_HPF_FREQ_80 = 80, /* 80Hz */
|
|
OT_AUDIO_HPF_FREQ_120 = 120, /* 120Hz */
|
|
OT_AUDIO_HPF_FREQ_150 = 150, /* 150Hz */
|
|
OT_AUDIO_HPF_FREQ_BUTT,
|
|
} ot_audio_hpf_freq;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto mode 1: manual. */
|
|
ot_audio_hpf_freq hpf_freq; /* freq to be processed, value:HiFiVQE/TalkVQE/AoVQE(80Hz, 120Hz, 150Hz),
|
|
RecordVQE(80Hz) */
|
|
} ot_audio_hpf_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
td_s32 nr_mode; /* mode 0: floor noise; 1:ambient noise */
|
|
td_s32 max_nr_level; /* max NR level range:[2,20]dB */
|
|
td_s32 noise_threshold; /* noise threshold, range:[-80, -20] */
|
|
} ot_ai_rnr_cfg;
|
|
|
|
typedef struct {
|
|
td_s8 gain_db[OT_VQE_EQ_BAND_NUM]; /* EQ band, include 100, 200, 250, 350, 500, 800, 1.2k, 2.5k, 4k, 8k in turn,
|
|
range:TalkVQE/AoVQE[-100, 20], RecordVQE[-50, 20] */
|
|
td_s32 reserved;
|
|
} ot_audio_eq_cfg;
|
|
|
|
/* Defines the configure parameters of UPVQE work state. */
|
|
typedef enum {
|
|
OT_VQE_WORK_STATE_COMMON = 0, /* common environment, Applicable to the family of voice calls. */
|
|
OT_VQE_WORK_STATE_MUSIC = 1, /* music environment , Applicable to the family of music environment. */
|
|
OT_VQE_WORK_STATE_NOISY = 2, /* noisy environment , Applicable to the noisy voice calls. */
|
|
} ot_vqe_work_state;
|
|
|
|
/* Defines record type */
|
|
typedef enum {
|
|
OT_VQE_RECORD_NORMAL = 0, /* double micphone recording. */
|
|
OT_VQE_RECORD_BUTT,
|
|
} ot_vqe_record_type;
|
|
|
|
/* HDR Set CODEC GAIN Function Handle type */
|
|
typedef td_s32 (*func_gain_callback)(td_s32 set_gain);
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto mode 1: manual. */
|
|
|
|
td_s32 min_gain_db; /* the minimum of MIC(AI) CODEC gain, [0, 120] */
|
|
td_s32 max_gain_db; /* the maximum of MIC(AI) CODEC gain, [0, 120] */
|
|
|
|
td_s32 mic_gain_db; /* the current gain of MIC(AI) CODEC,[min_gain_db, max_gain_db] */
|
|
td_s32 mic_gain_step_db; /* the step size of gain adjustment, [1, 3], recommend 2 */
|
|
func_gain_callback callback; /* the callback function pointer of CODEC gain adjustment */
|
|
} ot_ai_hdr_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* enable user mode or not,default 0: disable user mode,1: user mode. */
|
|
|
|
td_s16 attack_time; /* time of signal change from large to small (ms), range:HiFiVQE[10, 250]ms,
|
|
RecordVQE[10, 126]ms */
|
|
td_s16 release_time; /* time of signal change from small to large (ms), range:HiFiVQE[10, 250]ms,
|
|
RecordVQE[10, 126]ms */
|
|
|
|
td_s16 old_level_db[OT_VQE_DRC_SEC_NUM]; /* old curve level(dB), default[0, -472, -792, -960, -1280],
|
|
range:[-1440, 0]ms,store from big to small,scale:Q4 */
|
|
td_s16 new_level_db[OT_VQE_DRC_SEC_NUM]; /* new curve level(dB), default[0, -174, -410, -608, -1021],
|
|
range:[-1440, 0]ms,store from big to small,scale:Q4 */
|
|
} ot_ai_drc_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
td_s8 gain_db[OT_TALKVQEV2_EQ_BAND_NUM]; /* EQ band, range:[-50, 20]dB */
|
|
} ot_ai_talk_v2_eq_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
|
|
td_s16 min_gain_limit; /* maximum allowable noise rejection, default:5827, range:[0, 32767] */
|
|
td_s16 snr_prior_limit; /* minimum prior signal-to-noise ratio, default:3276, range:[0, 32767] */
|
|
td_s16 ht_threshold; /* voice decision threshold, default:10, range:[0, 80] */
|
|
td_s16 hs_threshold; /* harmonic detection threshold, default:100, range:[100, 1100] */
|
|
td_s16 alpha_ph; /* speech probability smoothing coefficient, default:90, range:[0, 100] */
|
|
td_s16 alpha_psd; /* noise estimation smoothing factor, default:65, range:[0, 100] */
|
|
td_s16 prior_snr_fixed; /* fixed prior signal-to-noise ratio, default:30, range:[1, 499] */
|
|
td_s16 cep_threshold; /* cepstrum smooth speech threshold, default:16, range:[0, 100] */
|
|
td_s16 speech_protect_threshold; /* speech protect threshold, default:90, range:[0, 100] */
|
|
td_s16 hem_enable; /* harmonic enhancement enable, default:1, range:[0, 1] */
|
|
td_s16 tcs_enable; /* cepstral smoothing switch, default:0, range:[0, 1] */
|
|
|
|
td_s16 reserved[3]; /* 3: reserved */
|
|
} ot_ai_talk_v2_pnr_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
|
|
td_s16 min_gain_limit; /* maximum allowable noise rejection, default:3276, range:[0, 32767] */
|
|
td_s16 snr_prior_limit; /* minimum prior signal-to-noise ratio, default:327, range:[0, 32767] */
|
|
td_s16 ht_threshold; /* voice decision threshold, default:10, range:[0, 80] */
|
|
td_s16 hs_threshold; /* harmonic detection threshold, default:100, range:[100, 1100] */
|
|
td_s16 pri_noise_esti_mode; /* single mic noise estimation algorithm mode, default:0, range:[0, 2] */
|
|
td_s16 prior_snr_fixed; /* fixed prior signal-to-noise ratio, default:20, range:[1, 499] */
|
|
td_s16 prio_snr_threshold; /* instantaneous prior snr, default:7, range:[5, 20] */
|
|
td_s16 sm_prio_snr_threshold; /* smooth prior snr, default:10, range:[8, 30] */
|
|
|
|
td_s16 reserved[16]; /* 16: reserved */
|
|
} ot_ai_talk_v2_nr_cfg;
|
|
|
|
typedef struct {
|
|
td_bool usr_mode; /* mode 0: auto, mode 1: manual. */
|
|
|
|
td_s8 target_level; /* target level, default:-16, range:[-120, 120] */
|
|
td_u8 max_gain; /* maximum gain, default:80, range:[0, 240] */
|
|
td_s8 min_gain; /* minimum gain, default:-60, range:[-120, 0] */
|
|
td_s8 adjust_speed; /* adjustable speed, default:5, range: [1, 10] */
|
|
|
|
td_s16 reserved[3]; /* 3: reserved */
|
|
} ot_ai_talk_v2_agc_cfg;
|
|
|
|
typedef struct {
|
|
td_s8 reserved[6]; /* 6: reserved */
|
|
} ot_ai_talk_v2_wnr_cfg;
|
|
|
|
/* Defines the configure parameters of TalkVQEV2. */
|
|
typedef struct {
|
|
td_u32 open_mask;
|
|
|
|
td_s32 work_sample_rate; /* sample rate:16kHz */
|
|
td_s32 frame_sample; /* VQE frame length:80-4096 */
|
|
ot_vqe_work_state work_state;
|
|
|
|
td_s32 in_chn_num;
|
|
td_s32 out_chn_num;
|
|
|
|
ot_ai_talk_v2_pnr_cfg pnr_cfg;
|
|
ot_ai_talk_v2_nr_cfg nr_cfg;
|
|
ot_ai_talk_v2_eq_cfg eq_cfg;
|
|
ot_ai_talk_v2_agc_cfg agc_cfg;
|
|
|
|
td_bool reserved0;
|
|
td_s16 reserved1[19]; /* 19: reserved num */
|
|
td_u8 reserved2[8]; /* 8: reserved */
|
|
|
|
ot_ai_talk_v2_wnr_cfg wnr_cfg;
|
|
} ot_ai_talk_vqe_v2_cfg;
|
|
|
|
/* Defines the configure parameters of record VQE. */
|
|
typedef struct {
|
|
td_u32 open_mask;
|
|
|
|
td_s32 work_sample_rate; /* sample rate:16kHz/48kHz */
|
|
td_s32 frame_sample; /* VQE frame length:80-4096 */
|
|
ot_vqe_work_state work_state;
|
|
|
|
td_s32 in_chn_num;
|
|
td_s32 out_chn_num;
|
|
ot_vqe_record_type record_type;
|
|
|
|
ot_audio_hpf_cfg hpf_cfg;
|
|
ot_ai_rnr_cfg rnr_cfg;
|
|
ot_ai_hdr_cfg hdr_cfg;
|
|
ot_ai_drc_cfg drc_cfg;
|
|
ot_audio_eq_cfg eq_cfg;
|
|
ot_audio_agc_cfg agc_cfg;
|
|
} ot_ai_record_vqe_cfg;
|
|
|
|
/* Defines the configure parameters of talk VQE. */
|
|
typedef struct {
|
|
td_u32 open_mask;
|
|
|
|
td_s32 work_sample_rate; /* sample rate: 8kHz/16kHz. default: 8kHz */
|
|
td_s32 frame_sample; /* VQE frame length: 80-4096 */
|
|
ot_vqe_work_state work_state;
|
|
|
|
ot_audio_hpf_cfg hpf_cfg;
|
|
ot_ai_aec_cfg aec_cfg;
|
|
ot_audio_anr_cfg anr_cfg;
|
|
ot_audio_agc_cfg agc_cfg;
|
|
ot_audio_eq_cfg eq_cfg;
|
|
} ot_ai_talk_vqe_cfg;
|
|
|
|
typedef struct {
|
|
td_u32 open_mask;
|
|
|
|
td_s32 work_sample_rate; /* sample rate: 8kHz/16kHz/48kHz. default: 8kHz */
|
|
td_s32 frame_sample; /* VQE frame length: 80-4096 */
|
|
ot_vqe_work_state work_state;
|
|
|
|
ot_audio_hpf_cfg hpf_cfg;
|
|
ot_audio_anr_cfg anr_cfg;
|
|
ot_audio_agc_cfg agc_cfg;
|
|
ot_audio_eq_cfg eq_cfg;
|
|
} ot_ao_vqe_cfg;
|
|
|
|
/* Defines the module register configure of VQE. */
|
|
typedef struct {
|
|
td_void *handle;
|
|
} ot_vqe_mod_cfg;
|
|
|
|
typedef struct {
|
|
ot_vqe_mod_cfg resample_mod_cfg;
|
|
ot_vqe_mod_cfg hpf_mod_cfg;
|
|
ot_vqe_mod_cfg hdr_mod_cfg;
|
|
ot_vqe_mod_cfg gain_mod_cfg;
|
|
|
|
/* record VQE */
|
|
ot_vqe_mod_cfg record_mod_cfg;
|
|
|
|
/* talk VQE */
|
|
ot_vqe_mod_cfg aec_mod_cfg;
|
|
ot_vqe_mod_cfg anr_mod_cfg;
|
|
ot_vqe_mod_cfg agc_mod_cfg;
|
|
ot_vqe_mod_cfg eq_mod_cfg;
|
|
|
|
/* hifi VQE */
|
|
ot_vqe_mod_cfg rnr_mod_cfg;
|
|
ot_vqe_mod_cfg drc_mod_cfg;
|
|
ot_vqe_mod_cfg peq_mod_cfg;
|
|
|
|
/* talkv2 VQE */
|
|
ot_vqe_mod_cfg talkv2_mod_cfg;
|
|
ot_vqe_mod_cfg wnr_mod_cfg;
|
|
} ot_audio_vqe_register;
|
|
|
|
/* Defines the configure parameters of AI saving file. */
|
|
typedef struct {
|
|
td_bool cfg;
|
|
td_char file_path[OT_MAX_AUDIO_FILE_PATH_LEN];
|
|
td_char file_name[OT_MAX_AUDIO_FILE_NAME_LEN];
|
|
td_u32 file_size; /* in KB */
|
|
} ot_audio_save_file_info;
|
|
|
|
/* Defines whether the file is saving or not . */
|
|
typedef struct {
|
|
td_bool saving;
|
|
} ot_audio_file_status;
|
|
|
|
/* Defines audio clksel type */
|
|
typedef enum {
|
|
OT_AUDIO_CLK_SELECT_BASE = 0, /* Audio base clk. */
|
|
OT_AUDIO_CLK_SELECT_SPARE, /* Audio spare clk. */
|
|
|
|
OT_AUDIO_CLK_SELECT_BUTT,
|
|
} ot_audio_clk_select;
|
|
|
|
/* Defines audio mode parameter. */
|
|
typedef struct {
|
|
ot_audio_clk_select clk_select;
|
|
} ot_audio_mod_param;
|
|
|
|
typedef enum {
|
|
OT_AIO_ERR_VQE_ERR = 65, /* vqe error */
|
|
} ot_aio_err_code;
|
|
|
|
/* at lease one parameter is illegal, eg, an illegal enumeration value */
|
|
#define OT_ERR_AIO_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
|
|
/* using a NULL pointer */
|
|
#define OT_ERR_AIO_NULL_PTR OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
|
|
/* operation is not supported by now */
|
|
#define OT_ERR_AIO_NOT_PERM OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_PERM)
|
|
/* system is not ready, had not initialed or loaded */
|
|
#define OT_ERR_AIO_NOT_READY OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_READY)
|
|
/* aio is working */
|
|
#define OT_ERR_AIO_BUSY OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_ERR_BUSY)
|
|
/* vqe register err */
|
|
#define OT_ERR_AIO_REGISTER_ERR OT_DEFINE_ERR(OT_ID_AIO, OT_ERR_LEVEL_ERROR, OT_AIO_ERR_VQE_ERR)
|
|
|
|
/* invalid device ID */
|
|
#define OT_ERR_AI_INVALID_DEV_ID OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_DEV_ID)
|
|
/* invalid channel ID */
|
|
#define OT_ERR_AI_INVALID_CHN_ID OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_CHN_ID)
|
|
/* at lease one parameter is illegal, eg, an illegal enumeration value */
|
|
#define OT_ERR_AI_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
|
|
/* using a null pointer */
|
|
#define OT_ERR_AI_NULL_PTR OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
|
|
/* try to enable or initialize system, device or channel, before configing attribute */
|
|
#define OT_ERR_AI_NOT_CFG OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_CFG)
|
|
/* operation is not supported by now */
|
|
#define OT_ERR_AI_NOT_SUPPORT OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_SUPPORT)
|
|
/* operation is not permitted, eg, try to change static attribute */
|
|
#define OT_ERR_AI_NOT_PERM OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_PERM)
|
|
/* the device is not enabled */
|
|
#define OT_ERR_AI_NOT_ENABLED OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_ENABLE)
|
|
/* failure caused by malloc memory */
|
|
#define OT_ERR_AI_NO_MEM OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NO_MEM)
|
|
/* failure caused by malloc buffer */
|
|
#define OT_ERR_AI_NO_BUF OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NO_BUF)
|
|
/* no data in buffer */
|
|
#define OT_ERR_AI_BUF_EMPTY OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_EMPTY)
|
|
/* no buffer for new data */
|
|
#define OT_ERR_AI_BUF_FULL OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_FULL)
|
|
/* system is not ready, had not initialed or loaded */
|
|
#define OT_ERR_AI_NOT_READY OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_READY)
|
|
/* ai is working */
|
|
#define OT_ERR_AI_BUSY OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_ERR_BUSY)
|
|
/* vqe process err */
|
|
#define OT_ERR_AI_VQE_ERR OT_DEFINE_ERR(OT_ID_AI, OT_ERR_LEVEL_ERROR, OT_AIO_ERR_VQE_ERR)
|
|
|
|
/* invalid device ID */
|
|
#define OT_ERR_AO_INVALID_DEV_ID OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_DEV_ID)
|
|
/* invalid channel ID */
|
|
#define OT_ERR_AO_INVALID_CHN_ID OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_INVALID_CHN_ID)
|
|
/* at lease one parameter is illegal, eg, an illegal enumeration value */
|
|
#define OT_ERR_AO_ILLEGAL_PARAM OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_ILLEGAL_PARAM)
|
|
/* using a null pointer */
|
|
#define OT_ERR_AO_NULL_PTR OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NULL_PTR)
|
|
/* try to enable or initialize system, device or channel, before configing attribute */
|
|
#define OT_ERR_AO_NOT_CFG OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_CFG)
|
|
/* operation is not supported by now */
|
|
#define OT_ERR_AO_NOT_SUPPORT OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_SUPPORT)
|
|
/* operation is not permitted, eg, try to change static attribute */
|
|
#define OT_ERR_AO_NOT_PERM OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_PERM)
|
|
/* the device is not enabled */
|
|
#define OT_ERR_AO_NOT_ENABLED OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_ENABLE)
|
|
/* failure caused by malloc memory */
|
|
#define OT_ERR_AO_NO_MEM OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NO_MEM)
|
|
/* failure caused by malloc buffer */
|
|
#define OT_ERR_AO_NO_BUF OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NO_BUF)
|
|
/* no data in buffer */
|
|
#define OT_ERR_AO_BUF_EMPTY OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_EMPTY)
|
|
/* no buffer for new data */
|
|
#define OT_ERR_AO_BUF_FULL OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_BUF_FULL)
|
|
/* system is not ready,had not initialed or loaded */
|
|
#define OT_ERR_AO_NOT_READY OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_NOT_READY)
|
|
|
|
#define OT_ERR_AO_BUSY OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_ERR_BUSY)
|
|
/* vqe process err */
|
|
#define OT_ERR_AO_VQE_ERR OT_DEFINE_ERR(OT_ID_AO, OT_ERR_LEVEL_ERROR, OT_AIO_ERR_VQE_ERR)
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
#endif /* End of #ifndef OT_COMMON_AIO_H */
|