10.1_demo/extern/qlibquammapi/include/audio/qua_mm_audio.h

409 lines
10 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************************
# Copyright (c) 2023~2024 Quaming Intelligent Technology Co., Ltd.
# All Rights Reserved.
# Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd.
#*******************************************************************************************/
#ifndef __QUA_MM_AUDIO_MODULE_H__
#define __QUA_MM_AUDIO_MODULE_H__
#include "common/qua_mm_common.h"
#define QUA_MM_AUDIO_DEV "audio.io"
#define QUA_MM_AUDIO_DEC_DEV "audio.dec"
#define QUA_MM_AUDIO_ENC_DEV "audio.enc"
typedef QUA_S32 QUA_ADEC_CHN;
typedef QUA_S32 QUA_AENC_CHN;
typedef struct _qua_audio_algo_cfg {
int usr_config_enable; //用户自定义算法开关, 1去解析其他开关 0采用默认值
int agc_enable; // AGC开关0-禁用1-启用
int anc_enable; // ANC开关0-禁用1-启用
int aec_enable; // AEC开关0-禁用1-启用
} qua_audio_algo_cfg_t;
typedef struct _qua_audio_cfg_arg {
int enc_type;
int io_type;
int frame_size;
int frame_cnt;
int channels;
int channel_bit;
int rate;
qua_audio_algo_cfg_t algo_cfg;
} qua_audio_cfg_arg;
typedef struct qua_mm_audio_module_t {
struct qua_mm_module_t parent;
} qua_mm_audio_module_t;
typedef enum {
QUA_MIC_IN,
QUA_LINE_IN,
QUA_LINE_HPOUT,
QUA_LINE_OUT
} qua_audio_iotype_t;
typedef enum {
QUA_CHANNEL_MONO = 1,
QUA_CHANNEL_STEREO = 2,
QUA_CHANNEL_QUAD = 4,
} qua_audio_channel_t;
typedef enum {
QUA_DEV_I2S0 = 0,
QUA_DEV_I2S1,
QUA_DEV_I2S2,
QUA_DEV_I2S3,
QUA_DEV_I2S4,
QUA_DEV_I2S_MAX,
QUA_DEV_ACW0,
QUA_DEV_ACW1,
QUA_DEV_ACW_STEREO,
QUA_DEV_ACW_MAX,
QUA_DEV_DMIC0,
QUA_DEV_DMIC1,
QUA_DEV_DMIC_MAX,
QUA_DEV_CODEC_OTHERS,
QUA_DEV_AUDIO_BUTT
} qua_audio_devid_t;
typedef enum {
QUA_PT_LPCM = 24,
QUA_PT_AAC = 37,
QUA_PT_G711A = 19,
QUA_PT_G711U = 20,
QUA_PT_G726_16K = 21,
QUA_PT_G726_32K = 22,
} qua_pt_type_t;
typedef enum {
QUA_BW_8 = 8,
QUA_BW_16 = 16,
QUA_BW_32 = 32
} qua_bit_width_t;
typedef enum {
QUA_SR_8K = 8000,
QUA_SR_11K025 = 11025,
QUA_SR_12K = 12000,
QUA_SR_16K = 16000,
QUA_SR_22K05 = 22050,
QUA_SR_24K = 24000,
QUA_SR_32K = 32000,
QUA_SR_44K1 = 44100,
QUA_SR_48K = 48000,
QUA_SR_96K = 96000,
QUA_SR_192K = 192000
} qua_sample_rate_t;
typedef enum qua_adec_mode {
QUA_ADEC_MODE_PACK = 0,
QUA_ADEC_MODE_STREAM,
QUA_ADEC_MODE_BUTT
} qua_adec_mode_t;
typedef enum qua_volume_type_mode {
QUA_VOLUME_TYPE_MIC,
QUA_VOLUME_TYPE_ANA,
QUA_VOLUME_TYPE_DIG,
QUA_VOLUME_TYPE_VQE,
QUA_VOLUME_TYPE_MAX
} qua_volume_type_t;
typedef enum qua_audio_algo_type {
QUA_AUDIO_ALGO_SES_MIC1 = 0,
QUA_AUDIO_ALGO_SES_MICN,
QUA_AUDIO_ALGO_MPP_MIC1,
QUA_AUDIO_ALGO_MOD_MAX,
} qua_audio_algo_type_t;
typedef struct qua_aenc_chn_attr {
qua_pt_type_t enc_type;
QUA_U32 frame_cnt;
QUA_U32 frame_size;
qua_sample_rate_t sample_rate;
qua_bit_width_t bit_width;
qua_audio_channel_t channel;
QUA_VOID_PTR *value;
} qua_aenc_chn_attr_t;
typedef struct qua_adec_chn_attr {
qua_pt_type_t enc_type;
QUA_U32 frame_cnt;
QUA_U32 frame_size;
qua_sample_rate_t sample_rate;
qua_bit_width_t bit_width;
qua_adec_mode_t mode;
QUA_VOID_PTR *value;
} qua_adec_chn_attr_t;
typedef struct qua_audio_stream {
QUA_U8* stream;
QUA_U32 phy_addr;
QUA_U32 len;
QUA_U64 pts;
QUA_U32 seq;
qua_sample_rate_t sample_rate;
qua_bit_width_t bit_width;
qua_audio_channel_t channel;
} qua_audio_stream_t;
typedef struct qua_audio_frame {
QUA_VOID_PTR vir_addr;
QUA_U32 phy_addr;
QUA_U32 seq;
QUA_U32 len;
QUA_U32 timeout;
QUA_U64 pts;
qua_sample_rate_t sample_rate;
qua_bit_width_t bit_width;
qua_audio_channel_t channel;
QUA_U32 exp_id;
} qua_audio_frame_t;
typedef struct qua_aec_param {
QUA_U16 bng_flag;
QUA_U16 aec_delay_ms;
QUA_U16 aec_ecstart_thr;
QUA_U16 aec_miu;
QUA_U16 nlp_level;
QUA_U16 nlp_gamma;
QUA_U16 post_filter_switch;
QUA_U16 echo_on_fr_switch;
QUA_U16 erle_thr1;
QUA_U16 erle_subthr1;
QUA_U16 erle_thr2;
QUA_U16 erle_subthr2;
QUA_U16 pos_s;
QUA_U16 pos_bit;
QUA_U16 reverberation;
QUA_U16 rev_smooth;
QUA_U16 tx_rx_ratio[12];
QUA_U16 dtd_switch;
QUA_U16 dtd_thr;
QUA_U16 dtd_gain;
QUA_U16 non_dtd_gain;
} qua_aec_param_t;
typedef struct qua_anc_param {
QUA_U16 anc_level;
QUA_U16 bgns_switch;
QUA_U16 bgns_gain_hf;
QUA_U16 bgns_gain_lf;
} qua_anc_param_t;
typedef struct qua_agc_param {
QUA_U16 fixed_gain;
QUA_U16 tartget_dbfs;
QUA_U16 gain_db;
QUA_U16 agc_start_thr;
QUA_U16 agc_supress;
QUA_U16 agc_unlimited_flag;
} qua_agc_param_t;
typedef struct qua_doa_param {
QUA_S16 doa_level;
QUA_S16 doa_delay[3];
QUA_S16 doa_mic_loc[12];
} qua_doa_param_t;
typedef struct qua_eqf_param {
QUA_S16 eqf_bin_g[14];
} qua_eqf_param_t;
typedef struct qua_eqt_subparam {
QUA_U16 eqt_filter_f0;
QUA_U16 eqt_filter_q;
QUA_S16 eqt_filter_gain_db;
} qua_eqt_subparam_t;
typedef struct qua_eqt_param {
QUA_U16 eqt_filter_num;
qua_eqt_subparam_t eqt_sub_param[8];
} qua_eqt_param_t;
typedef struct qua_hpf_param {
QUA_S16 hpf_mode;
} qua_hpf_param_t;
typedef struct qua_howl_param {
QUA_U16 howl_mc_thr1;
QUA_U16 howl_mc_thr2;
QUA_U16 howl_mc_thr3;
QUA_U16 howl_thr;
} qua_howl_param_t;
typedef struct qua_ains_param {
QUA_U16 sws_gain_smooth_alpha;
QUA_U16 sws_gain_beta;
QUA_U16 sws_gain_min;
} qua_ains_param_t;
typedef struct qua_wns_param {
QUA_U16 wns_mc_num;
QUA_U16 wns_mc_thr;
QUA_U16 wns_bin1_thr;
QUA_U16 wns_gain_limit;
QUA_U16 wns_level;
} qua_wns_param_t;
typedef struct qua_alc_param {
QUA_S16 alc_gain;
} qua_alc_param_t;
typedef struct qua_ac_ses_param {
QUA_U16 aec_enable;
QUA_U16 anc_enable;
QUA_U16 agc_enable;
QUA_U16 doa_enable;
QUA_U16 eqf_enable;
QUA_U16 eqt_enable;
QUA_U16 hpf_enable;
QUA_U16 howl_enable;
QUA_U16 ains_enable;
QUA_U16 wns_enable;
QUA_U16 aivad_enable;
QUA_U16 alc_enable;
qua_aec_param_t aec_param;
qua_anc_param_t anc_param;
qua_agc_param_t agc_param;
qua_doa_param_t doa_param;
qua_eqf_param_t eqf_param;
qua_eqt_param_t eqt_param;
qua_hpf_param_t hpf_param;
qua_howl_param_t howl_param;
qua_ains_param_t ains_param;
qua_wns_param_t wns_param;
qua_alc_param_t alc_param;
} qua_ac_ses_param_t;
typedef struct qua_ai_fhses_param {
QUA_S16 index;
QUA_U32 id;
QUA_S32 ao_chn;
qua_ac_ses_param_t vqe_attr;
}qua_ai_fhses_param_t;
typedef struct qua_ao_fhses_param {
QUA_S16 index;
qua_ac_ses_param_t vqe_attr;
} qua_ao_fhses_param_t;
typedef struct qua_audio_agc_cfg {
QUA_BOOL usr_mode;
QUA_S16 output_mode;
QUA_S32 target_gain;
QUA_U32 max_adjust_gain;
QUA_U32 min_adjust_gain;
QUA_U32 adjust_speed;
QUA_S32 ignore_db;
QUA_S32 reserved;
} qua_audio_agc_cfg_t;
typedef struct qua_audio_aec_cfg {
QUA_BOOL usr_mode;
QUA_S16 g_mode;
QUA_S16 nlp_mode;
QUA_S16 skew_mode;
QUA_S16 metrics_mode;
QUA_S16 delay_logging;
QUA_S32 skew;
QUA_U32 delay_time;
QUA_S32 reserved;
} qua_audio_aec_cfg_t;
typedef struct qua_audio_anr_cfg {
QUA_BOOL usr_mode;
QUA_S32 anr_level;
QUA_S32 reserved;
} qua_audio_anr_cfg_t;
typedef struct qua_audio_hpf_cfg {
QUA_U32 freq;
} qua_audio_hpf_cfg_t;
typedef struct qua_ao_vqe_cfg {
QUA_S32 hpf_enable;
QUA_S32 anr_enable;
QUA_S32 agc_enable;
QUA_S32 samplate; // only support 8k,16k
qua_audio_hpf_cfg_t hpf_cfg;
qua_audio_anr_cfg_t anr_cfg;
qua_audio_agc_cfg_t agc_cfg;
} qua_ao_vqe_cfg_t;
typedef struct qua_ai_vqe_cfg {
QUA_S32 hpf_enable;
QUA_S32 aec_enable;
QUA_S32 anr_enable;
QUA_S32 agc_enable;
QUA_S32 samplate; // only support 8k,16k
qua_audio_hpf_cfg_t hpf_cfg;
qua_audio_aec_cfg_t aec_cfg;
qua_audio_anr_cfg_t anr_cfg;
qua_audio_agc_cfg_t agc_cfg;
} qua_ai_vqe_cfg_t;
typedef struct qua_mm_audio_device_t {
struct qua_mm_device_t parent;
QUA_S32 dev_num;
QUA_S32 (*play_init)(QUA_U32 id, qua_audio_cfg_arg* param);
QUA_S32 (*play_deinit)(QUA_U32 id);
QUA_S32 (*play_start)(QUA_U32 id);
QUA_S32 (*play_stop)(QUA_U32 id);
QUA_S32 (*play_volume)(QUA_U32 id, QUA_U32 vol_type, QUA_U32 vol);
QUA_S32 (*write_frame)(QUA_U32 id, QUA_VOID_PTR buf, QUA_U32 size);
QUA_S32 (*play_vqe)(QUA_U32 id, qua_audio_algo_type_t mode, QUA_VOID_PTR vqe);
QUA_S32 (*capture_init)(QUA_U32 id, qua_audio_cfg_arg* param);
QUA_S32 (*capture_deinit)(QUA_U32 id);
QUA_S32 (*capture_start)(QUA_U32 id);
QUA_S32 (*capture_stop)(QUA_U32 id);
QUA_S32 (*capture_volume)(QUA_U32 id, QUA_U32 vol_type, QUA_U32 vol);
QUA_S32 (*read_frame)(QUA_U32 id, QUA_VOID_PTR buf, QUA_U32 size, QUA_U64 *pts);
QUA_S32 (*capture_vqe)(QUA_U32 id, qua_audio_algo_type_t mode, QUA_VOID_PTR vqe);
QUA_S32 (*exit)(QUA_U32 id);
} qua_mm_audio_device_t;
typedef struct qua_mm_adec_device {
struct qua_mm_device_t parent;
QUA_S32 (*bind_init)(QUA_U32 mod_id);
QUA_S32 (*bind_exit)(QUA_U32 mod_id);
} qua_mm_adec_device_t;
typedef struct qua_mm_adec_channel {
struct qua_mm_channel_t parent;
QUA_S32 (*send_stream)(QUA_ADEC_CHN chn_id, qua_audio_stream_t *stream, QUA_S32 timeout);
QUA_S32 (*clear_chn_buf)(QUA_ADEC_CHN chn_id);
QUA_S32 (*get_frame)(QUA_ADEC_CHN chn_id, qua_audio_frame_t *frame, QUA_S32 timeout);
QUA_S32 (*release_frame)(QUA_ADEC_CHN chn_id, qua_audio_frame_t *frame);
QUA_S32 (*ext_api)(QUA_ADEC_CHN chn_id, QUA_VOID_PTR attr);
} qua_mm_adec_channel_t;
typedef struct qua_mm_aenc_device {
struct qua_mm_device_t parent;
QUA_S32 (*bind_init)(QUA_U32 mod_id);
QUA_S32 (*bind_exit)(QUA_U32 mod_id);
} qua_mm_aenc_device_t;
typedef struct qua_mm_aenc_channel {
struct qua_mm_channel_t parent;
QUA_S32 (*get_stream)(QUA_AENC_CHN chn_id, qua_audio_stream_t *stream, QUA_S32 timeout);
QUA_S32 (*clear_chn_buf)(QUA_AENC_CHN chn_id);
QUA_S32 (*send_frame)(QUA_AENC_CHN chn_id, qua_audio_frame_t *frame, QUA_S32 timeout);
QUA_S32 (*release_frame)(QUA_AENC_CHN chn_id, qua_audio_frame_t *frame);
QUA_S32 (*ext_api)(QUA_AENC_CHN chn_id, QUA_VOID_PTR attr);
} qua_mm_aenc_channel_t;
#endif // __QUA_MM_AUDIO_MODULE_H__