Files
SDK_SG200x_V2/middleware/v2/include/cvi_comm_aio.h
sophgo-forum-service 62573a835f middleware: weekly rls 2024.07.20
-e90961, fix aac+vqe "reamain data not process AEC" bug.
-3c08de, split module vpu into vi vo vpss rgn gdc.
-b5d998, (ive): add comment to api.
-166849, mw support arm32.

Change-Id: Ied488d392da9eed2e3a94e1244eeee540c389372
2024-07-25 17:11:08 +08:00

653 lines
20 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
*
* File Name: include/cvi_comm_aio.h
* Description: basic audio in out definition
*/
#ifndef __CVI_COMM_AIO_H__
#define __CVI_COMM_AIO_H__
#include <linux/cvi_common.h>
#include <linux/cvi_errno.h>
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define CVI_MAX_AUDIO_FRAME_NUM 300 /*max count of audio frame in Buffer */
#define CVI_AUD_MAX_VOICE_POINT_NUM 1280 /*max sample per frame for voice encode */
#define CVI_AUD_MAX_AUDIO_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/
#define CVI_AUD_MAX_CHANNEL_NUM 3
#define CVI_MAX_AUDIO_STREAM_LEN (4 * 4096)
#define MAX_AUDIO_FILE_PATH_LEN 256
#define MAX_AUDIO_FILE_NAME_LEN 256
#define MAX_AUDIO_VQE_CUSTOMIZE_NAME 64
/*The VQE EQ Band num.*/
#define VQE_EQ_BAND_NUM 10
#define AI_RECORDVQE_MASK_HPF 0x1
#define AI_RECORDVQE_MASK_RNR 0x2
#define AI_RECORDVQE_MASK_HDR 0x4
#define AI_RECORDVQE_MASK_DRC 0x8
#define AI_RECORDVQE_MASK_EQ 0x10
#define AI_RECORDVQE_MASK_AGC 0x20
//#define AI_TALKVQE_MASK_HPF 0x1//not support
#define AI_TALKVQE_MASK_AEC 0x3
#define AI_TALKVQE_MASK_ANR 0x4
#define AI_TALKVQE_MASK_AGC 0x8
#define AI_TALKVQE_MASK_NOTCH_FILTER 0x30
//#define AI_TALKVQE_MASK_EQ 0x10//not supoort
#define NEXT_SSP_ALGO 1
/* LP AEC Control */
#define LP_AEC_ENABLE 0x1 /* bit 0 */
/* NLP AES Control */
#define NLP_AES_ENABLE 0x2 /* bit 1 */
/* NR Control */
#define NR_ENABLE 0x4 /* bit 2 */
/* AGC Control */
#define AGC_ENABLE 0x8 /* bit 3 */
/* Notch Filter Control */
#define NOTCH_ENABLE 0x10 /* bit 4 */
/* DC Filter Control */
#define DCREMOVER_ENABLE 0x20 /* bit 5 */
/* DG Control */
#define DG_ENABLE 0x40 /* bit 6 */
/* Delay Control */
#define DELAY_ENABLE 0x80 /* bit 7 */
//control for AO_VQE
/* AGC Control in SPK Path */
#define SPK_AGC_ENABLE 0x1 /* bit 0 */
#define SPK_EQ_ENABLE 0x2 /* bit 1 */
#define DNVQE_HPFILTER 0x1
#define DNVQE_EQ 0x2
#define DNVQE_DRC_EXPANDER_COMPRESS 0x4
#define DNVQE_DRC_LIMITER 0x8
#define CVI_MAX_AI_DEVICE_ID_NUM 5
#define CVI_MAX_AI_CARD_ID_NUM 5
#define CVI_MAX_AO_DEVICE_ID_NUM 5
#define CVI_MAX_AO_CARD_ID_NUM 5
/* define macro */
#define CHECK_AI_DEVID_VALID(x) \
((((x) > (CVI_MAX_AI_DEVICE_ID_NUM-1))) ? 1:0)
#define CHECK_AI_CARD_VALID(x) \
((((x) > (CVI_MAX_AI_CARD_ID_NUM-1))) ? 1:0)
#define CHECK_AO_DEVID_VALID(x) \
((((x) > (CVI_MAX_AO_DEVICE_ID_NUM-1))) ? 1:0)
#define CHECK_AO_CARD_VALID(x) \
((((x) > (CVI_MAX_AO_CARD_ID_NUM-1))) ? 1:0)
#define CHECK_AENC_DEVID_VALID(x) \
((((x) > (AENC_MAX_CHN_NUM-1))) ? 1:0)
#define CHECK_ADEC_DEVID_VALID(x) \
((((x) > (ADEC_MAX_CHN_NUM-1))) ? 1:0)
typedef enum _AUDIO_SAMPLE_RATE_E {
AUDIO_SAMPLE_RATE_8000 = 8000, /* 8K samplerate*/
/* 12K samplerate(not support in this version)*/
AUDIO_SAMPLE_RATE_11025 = 11025, /* 11.025K samplerate*/
AUDIO_SAMPLE_RATE_16000 = 16000, /* 16K samplerate*/
AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.050K samplerate*/
AUDIO_SAMPLE_RATE_24000 = 24000, /* 24K samplerate*/
AUDIO_SAMPLE_RATE_32000 = 32000, /* 32K samplerate*/
AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1K samplerate*/
AUDIO_SAMPLE_RATE_48000 = 48000, /* 48K samplerate*/
AUDIO_SAMPLE_RATE_64000 = 64000, /* 64K samplerate*/
/* 96K samplerate is not support in cv183x series*/
AUDIO_SAMPLE_RATE_BUTT,
} AUDIO_SAMPLE_RATE_E;
typedef enum _AUDIO_BIT_WIDTH_E {
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
AUDIO_BIT_WIDTH_24 = 2, /* 24bit width*/
AUDIO_BIT_WIDTH_32 = 3, /* 24bit width*/
AUDIO_BIT_WIDTH_BUTT,
} AUDIO_BIT_WIDTH_E;
typedef enum _AIO_MODE_E {
AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */
AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */
AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */
AIO_MODE_PCM_SLAVE_NSTD, /* AIO PCM slave non-standard mode */
AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */
AIO_MODE_PCM_MASTER_NSTD, /* AIO PCM master non-standard mode */
AIO_MODE_BUTT
} AIO_MODE_E;
typedef enum {
AIO_I2STYPE_INNERCODEC = 0, /* AIO I2S connect inner audio CODEC */
AIO_I2STYPE_INNERHDMI, /* AIO I2S connect Inner HDMI */
AIO_I2STYPE_EXTERN, /* AIO I2S connect extern hardware */
} AIO_I2STYPE_E;
typedef enum _AIO_SOUND_MODE_E {
AUDIO_SOUND_MODE_MONO = 0, /*mono*/
AUDIO_SOUND_MODE_STEREO = 1, /*stereo only support interlace mode*/
AUDIO_SOUND_MODE_BUTT
} AUDIO_SOUND_MODE_E;
/*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 _G726_BPS_E {
G726_16K = 0, /* G726 16kbps, see RFC3551.txt 4.5.4 G726-16 */
G726_24K, /* G726 24kbps, see RFC3551.txt 4.5.4 G726-24 */
G726_32K, /* G726 32kbps, see RFC3551.txt 4.5.4 G726-32 */
G726_40K, /* G726 40kbps, see RFC3551.txt 4.5.4 G726-40 */
MEDIA_G726_16K, /* G726 16kbps for ASF ... */
MEDIA_G726_24K, /* G726 24kbps for ASF ... */
MEDIA_G726_32K, /* G726 32kbps for ASF ... */
MEDIA_G726_40K, /* G726 40kbps for ASF ... */
G726_BUTT,
} G726_BPS_E;
typedef enum _ADPCM_TYPE_E {
/* see DVI4 diiffers in three respects from the IMA ADPCM at RFC3551.txt 4.5.1 DVI4 */
ADPCM_TYPE_DVI4 = 0, /* 32kbps ADPCM(DVI4) for RTP */
ADPCM_TYPE_IMA, /* 32kbps ADPCM(IMA),NOTICE:point num must be 161/241/321/481 */
ADPCM_TYPE_ORG_DVI4,
ADPCM_TYPE_BUTT,
} ADPCM_TYPE_E;
#define AI_EXPAND 0x01
#define AI_CUT 0x02
typedef struct _AIO_ATTR_S {
AUDIO_SAMPLE_RATE_E enSamplerate; /* sample rate */
AUDIO_BIT_WIDTH_E enBitwidth; /* bitwidth */
AIO_MODE_E enWorkmode; /* master or slave mode */
AUDIO_SOUND_MODE_E enSoundmode; /* momo or steror */
CVI_U32 u32EXFlag;
/* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit),*/
/*use AI_CUT(only valid for extern Codec for 24bit) */
CVI_U32 u32FrmNum;
/* frame num in buf[2,CVI_MAX_AUDIO_FRAME_NUM] */
CVI_U32 u32PtNumPerFrm;
/* point num per frame (80/160/240/320/480/1024/2048) */
/*(ADPCM IMA should add 1 point, AMR only support 160) */
CVI_U32 u32ChnCnt; /* channel number on FS, valid value:1/2/4/8 */
CVI_U32 u32ClkSel; /* 0: AI and AO clock is separate*/
/* 1: AI and AO clock is inseparate, AI use AO's clock*/
AIO_I2STYPE_E enI2sType; /* i2s type */
} AIO_ATTR_S;
typedef struct _AI_CHN_PARAM_S {
CVI_U32 u32UsrFrmDepth;
} AI_CHN_PARAM_S;
typedef struct _AUDIO_FRAME_S {
AUDIO_BIT_WIDTH_E enBitwidth;/*audio frame bitwidth*/
AUDIO_SOUND_MODE_E enSoundmode;/*audio frame momo or stereo mode*/
CVI_U8 * u64VirAddr[2];
CVI_U64 u64PhyAddr[2];
CVI_U64 u64TimeStamp; /*audio frame timestamp*/
CVI_U32 u32Seq; /*audio frame seq*/
CVI_U32 u32Len; /*data length per channel in frame*/
CVI_U32 u32PoolId[2];
} AUDIO_FRAME_S;
typedef struct _AEC_FRAME_S {
AUDIO_FRAME_S stRefFrame; /* AEC reference audio frame */
CVI_BOOL bValid; /* whether frame is valid */
CVI_BOOL bSysBind; /* whether is sysbind */
} AEC_FRAME_S;
typedef struct _AUDIO_FRAME_INFO_S {
AUDIO_FRAME_S *pstFrame;/*frame ptr*/
CVI_U32 u32Id; /*frame id*/
} AUDIO_FRAME_INFO_S;
typedef struct _AUDIO_STREAM_S {
/* CVI_U8 ATTRIBUTE *pStream;the virtual address of stream */
/* CVI_U64 ATTRIBUTE u64PhyAddr; the physics address of stream */
CVI_U8 *pStream; /* the virtual address of stream */
CVI_U64 u64PhyAddr; /* the physics address of stream */
CVI_U32 u32Len; /* stream length, by bytes */
CVI_U64 u64TimeStamp; /* frame time stamp*/
CVI_U32 u32Seq; /* frame seq,if stream is not a valid frame,u32Seq is 0*/
} AUDIO_STREAM_S;
typedef struct _AO_CHN_STATE_S {
CVI_U32 u32ChnTotalNum; /* total number of channel buffer */
CVI_U32 u32ChnFreeNum; /* free number of channel buffer */
CVI_U32 u32ChnBusyNum; /* busy number of channel buffer */
} AO_CHN_STATE_S;
typedef enum _AUDIO_TRACK_MODE_E {
AUDIO_TRACK_NORMAL = 0,
AUDIO_TRACK_BOTH_LEFT = 1,
AUDIO_TRACK_BOTH_RIGHT = 2,
AUDIO_TRACK_EXCHANGE = 3,
AUDIO_TRACK_MIX = 4,
AUDIO_TRACK_LEFT_MUTE = 5,
AUDIO_TRACK_RIGHT_MUTE = 6,
AUDIO_TRACK_BOTH_MUTE = 7,
AUDIO_TRACK_BUTT
} AUDIO_TRACK_MODE_E;
typedef enum _AUDIO_FADE_RATE_E {
AUDIO_FADE_RATE_NONE = 0,
AUDIO_FADE_RATE_10 = 10,
AUDIO_FADE_RATE_20 = 20,
AUDIO_FADE_RATE_30 = 30,
AUDIO_FADE_RATE_50 = 50,
AUDIO_FADE_RATE_100 = 100,
AUDIO_FADE_RATE_200 = 200,
AUDIO_FADE_RATE_BUTT = -1
} AUDIO_FADE_RATE_E;
typedef struct _AUDIO_FADE_S {
CVI_BOOL bFade;
AUDIO_FADE_RATE_E enFadeInRate;
AUDIO_FADE_RATE_E enFadeOutRate;
} AUDIO_FADE_S;
/**Defines the configure parameters of AEC.*/
typedef struct _AI_AEC_CONFIG_S {
CVI_U16 para_aec_filter_len;
CVI_U16 para_aes_std_thrd; /* the threshold of STD/DTD, [0, 35] */
CVI_U16 para_aes_supp_coeff; /* the residual echo suppression level in AES, [0, 24] */
} AI_AEC_CONFIG_S;
/**Defines the configure parameters of UPVQE work state.*/
typedef enum _VQE_WORKSTATE_E {
VQE_WORKSTATE_COMMON = 0,
/* common environment, Applicable to the family of voice calls. */
VQE_WORKSTATE_MUSIC = 1,
/* music environment , Applicable to the family of music environment. */
VQE_WORKSTATE_NOISY = 2,
/* noisy environment , Applicable to the noisy voice calls. */
} VQE_WORKSTATE_E;
/**Defines record type*/
typedef enum _VQE_RECORD_TYPE {
VQE_RECORD_NORMAL = 0,
/*<double micphone recording. */
VQE_RECORD_BUTT,
} VQE_RECORD_TYPE;
/* HDR Set CODEC GAIN Function Handle type */
typedef CVI_S32(*pFuncGainCallBack)(CVI_S32 s32SetGain);
//#define CVIAUDIO_ALGO_SSP 0x11//defalut algorithm
//#define CVIAUDIO_ALGO_SSP_NOTCH 0x12//customize algorithm with notch filter
#define CVIAUDIO_ALGO_ONLINE_PARAM 0xC0 //customize parameter from /mnt/data/audvqe.cfg
typedef struct _AUDIO_DELAY_CONFIG_S {
/* the initial filter length of linear AEC to support up for echo tail, [1, 13] */
CVI_U16 para_aec_init_filter_len;
/* the digital gain target, [1, 12] */
CVI_U16 para_dg_target;
/* the delay sample for ref signal, [1, 3000] */
CVI_U16 para_delay_sample;
} AUDIO_DELAY_CONFIG_S;
typedef struct _AUDIO_AGC_CONFIG_S {
/* the max boost gain for AGC release processing, [0, 3] */
/* para_obj.para_agc_max_gain = 1; */
CVI_S8 para_agc_max_gain;
/* the gain level of target high of AGC, [0, 36] */
/* para_obj.para_agc_target_high = 2; */
CVI_S8 para_agc_target_high;
/* the gain level of target low of AGC, [0, 36] */
/* para_obj.para_agc_target_low = 6; */
CVI_S8 para_agc_target_low;
/* speech-activated AGC functionality, [0, 1] */
/* para_obj.para_agc_vad_enable = 1; */
CVI_BOOL para_agc_vad_ena;
} AUDIO_AGC_CONFIG_S;
typedef struct _AUDIO_SPK_AGC_CONFIG_S {
/* the max boost gain for AGC release processing, [0, 3] */
/* para_obj.para_agc_max_gain = 1; */
CVI_S8 para_agc_max_gain;
/* the gain level of target high of AGC, [0, 36] */
/* para_obj.para_agc_target_high = 2; */
CVI_S8 para_agc_target_high;
/* the gain level of target low of AGC, [0, 36] */
/* para_obj.para_agc_target_low = 6; */
CVI_S8 para_agc_target_low;
} AUDIO_SPK_AGC_CONFIG_S;
typedef struct _AUDIO_SPK_EQ_CONFIG_S {
CVI_U16 para_spk_eq_nband;
CVI_U16 para_spk_eq_freq[5];
CVI_U16 para_spk_eq_gain[5];
CVI_U16 para_spk_eq_qfactor[5];
} AUDIO_SPK_EQ_CONFIG_S;
typedef struct _AUDIO_ANR_CONFIG_S {
/* the coefficient of NR priori SNR tracking, [0, 20] */
/* para_obj.para_nr_snr_coeff = 15; */
CVI_U16 para_nr_snr_coeff;
/* the coefficient of NR noise tracking, [0, 14] */
/* para_obj.para_nr_noise_coeff = 2; */
//CVI_S8 para_nr_noise_coeff;
CVI_U16 para_nr_init_sile_time;
} AUDIO_ANR_CONFIG_S;
typedef struct _AI_TALKVQE_CONFIG_S {
CVI_U16 para_client_config;
CVI_U32 u32OpenMask;
CVI_S32 s32WorkSampleRate;
/* Sample Rate: 8KHz/16KHz. default: 8KHz*/
//MIC IN VQE setting
AI_AEC_CONFIG_S stAecCfg;
AUDIO_ANR_CONFIG_S stAnrCfg;
AUDIO_AGC_CONFIG_S stAgcCfg;
AUDIO_DELAY_CONFIG_S stAecDelayCfg;
CVI_S32 s32RevMask;//turn this flag to default 0x11
CVI_S32 para_notch_freq;//user can ignore this flag
CVI_CHAR customize[MAX_AUDIO_VQE_CUSTOMIZE_NAME];
} AI_TALKVQE_CONFIG_S;
typedef enum {
E_FILTER_LPF,
E_FILTER_HPF,
E_FILTER_LSF,
E_FILTER_HSF,
E_FILTER_PEF,
E_FILTER_MAX,
} HPF_FILTER_TYPE;
typedef struct _CVI_HPF_CONFIG_S {
int type;
float f0;
float Q;
float gainDb;
} CVI_HPF_CONFIG_S;
typedef struct _CVI_EQ_CONFIG_S {
int bandIdx;
uint32_t freq;
float QValue;
float gainDb;
} CVI_EQ_CONFIG_S;
typedef struct _CVI_DRC_COMPRESSOR_PARAM {
uint32_t attackTimeMs;
uint32_t releaseTimeMs;
uint16_t ratio;
float thresholdDb;
} CVI_DRC_COMPRESSOR_PARAM;
typedef struct _CVI_DRC_LIMITER_PARAM {
uint32_t attackTimeMs;
uint32_t releaseTimeMs;
float thresholdDb;
float postGain;
} CVI_DRC_LIMITER_PARAM;
typedef struct _CVI_DRC_EXPANDER_PARAM {
uint32_t attackTimeMs;
uint32_t releaseTimeMs;
uint32_t holdTimeMs;
uint16_t ratio;
float thresholdDb;
float minDb;
} CVI_DRC_EXPANDER_PARAM;
typedef struct _AO_VQE_CONFIG_S {
CVI_U32 u32OpenMask;
CVI_S32 s32WorkSampleRate;
CVI_S32 s32channels;
/* Sample Rate: 8KHz/16KHz default: 8KHz*/
AUDIO_SPK_AGC_CONFIG_S stAgcCfg;
AUDIO_SPK_EQ_CONFIG_S stEqCfg;
CVI_HPF_CONFIG_S stHpfParam;
CVI_EQ_CONFIG_S stEqParam;
CVI_DRC_COMPRESSOR_PARAM stDrcCompressor;
CVI_DRC_LIMITER_PARAM stDrcLimiter;
CVI_DRC_EXPANDER_PARAM stDrcExpander;
} AO_VQE_CONFIG_S;
/**Defines the configure parameters of Record VQE.*/
typedef struct _AI_RECORDVQE_CONFIG_S {
CVI_U32 u32OpenMask;
CVI_S32 s32WorkSampleRate;
/* Sample Rate:16KHz/48KHz*/
CVI_S32 s32FrameSample;
CVI_S32 s32BytesPerSample;
/* VQE frame length:80-4096 */
VQE_WORKSTATE_E enWorkstate;
CVI_S32 s32InChNum;
CVI_S32 s32OutChNum;
VQE_RECORD_TYPE enRecordType;
AUDIO_AGC_CONFIG_S stAgcCfg;
} AI_RECORDVQE_CONFIG_S;
/* Defines the module register configure of VQE. */
typedef struct _VQE_MODULE_CONFIG_S {
CVI_VOID *pHandle;
} VQE_MODULE_CONFIG_S;
typedef struct _AUDIO_VQE_REGISTER_S {
VQE_MODULE_CONFIG_S stResModCfg;
VQE_MODULE_CONFIG_S stHpfModCfg;
VQE_MODULE_CONFIG_S stHdrModCfg;
VQE_MODULE_CONFIG_S stGainModCfg;
// Record VQE
VQE_MODULE_CONFIG_S stRecordModCfg;
// Talk VQE
VQE_MODULE_CONFIG_S stAecModCfg;
VQE_MODULE_CONFIG_S stAnrModCfg;
VQE_MODULE_CONFIG_S stAgcModCfg;
VQE_MODULE_CONFIG_S stEqModCfg;
// CviFi VQE
VQE_MODULE_CONFIG_S stRnrModCfg;
VQE_MODULE_CONFIG_S stDrcModCfg;
VQE_MODULE_CONFIG_S stPeqModCfg;
} AUDIO_VQE_REGISTER_S;
/*Defines the configure parameters of AI saving file.*/
typedef struct _AUDIO_SAVE_FILE_INFO_S {
CVI_BOOL bCfg;
CVI_CHAR aFilePath[MAX_AUDIO_FILE_PATH_LEN];
CVI_CHAR aFileName[MAX_AUDIO_FILE_NAME_LEN];
CVI_U32 u32FileSize; /*in KB*/
} AUDIO_SAVE_FILE_INFO_S;
/*Defines whether the file is saving or not .*/
typedef struct _AUDIO_FILE_STATUS_S {
CVI_BOOL bSaving;
} AUDIO_FILE_STATUS_S;
/**Defines audio clksel type*/
typedef enum _AUDIO_CLKSEL_E {
AUDIO_CLKSEL_BASE = 0, /*<Audio base clk. */
AUDIO_CLKSEL_SPARE, /*<Audio spare clk. */
AUDIO_CLKSEL_BUTT,
} AUDIO_CLKSEL_E;
/*Defines audio mode parameter.*/
typedef struct _AUDIO_MOD_PARAM_S {
AUDIO_CLKSEL_E enClkSel;
} AUDIO_MOD_PARAM_S;
typedef struct _cvi_wavHEADER {
/* RIFF string */
CVI_U8 riff[4];
// overall size of file in bytes
CVI_U32 overall_size;
// WAVE string
CVI_U8 wave[4];
// fmt string with trailing null char
CVI_U8 fmt_chunk_marker[4];
// length of the format data
CVI_U32 length_of_fmt;
// format type. 1-PCM, 3- IEEE float, 6 - 8bit A law, 7 - 8bit mu law
CVI_U16 format_type;
// no.of channels
CVI_U16 channels;
// sampling rate (blocks per second)
CVI_U32 sample_rate;
// SampleRate * NumChannels * BitsPerSample/8
CVI_U32 byterate;
// NumChannels * BitsPerSample/8
CVI_U16 block_align;
// bits per sample, 8- 8bits, 16- 16 bits etc
CVI_U16 bits_per_sample;
// DATA string or FLLR string
CVI_U8 data_chunk_header[4];
// NumSamples * NumChannels * BitsPerSample/8 - size of the next chunk that will be read
CVI_U32 data_size;
} ST_CVI_WAV_HEADER;
typedef struct _AudioUnitTestCfg {
CVI_S32 channels;
CVI_S32 Time_in_second;
CVI_S32 sample_rate;
CVI_CHAR format[64]; //pcm/ g711//g726...
CVI_S32 period_size;
CVI_S32 bitdepth;
CVI_S32 unit_test;
CVI_S32 s32TestMode;
CVI_CHAR filename[256];
CVI_BOOL bOptCfg;
} ST_AudioUnitTestCfg;
typedef struct _ST_CVIAUDIO_SPEEDPLAY_USR_CONFIG {
int sampleRate;
int channels;
float speed;
float pitch;
float rate;
float volume;
} ST_CVIAO_SPEEDPLAY_CONFIG;
extern ST_AudioUnitTestCfg stAudTestCfg;
/* at least one parameter is illegal ,eg, an illegal enumeration value */
#define CVI_ERR_AIO_ILLEGAL_PARAM 0xAA000001
/* using a NULL point */
#define CVI_ERR_AIO_NULL_PTR 0xAA000002
/* operation is not supported by NOW */
#define CVI_ERR_AIO_NOT_PERM 0xAA000003
/* vqe err */
#define CVI_ERR_AIO_REGISTER_ERR 0xAA000004
/* invalid device ID */
#define CVI_ERR_AI_INVALID_DEVID 0xA0000005
/* invalid channel ID */
#define CVI_ERR_AI_INVALID_CHNID 0xA0000006
/* at least one parameter is illegal ,eg, an illegal enumeration value */
#define CVI_ERR_AI_ILLEGAL_PARAM 0xA0000001
/* using a NULL point */
#define CVI_ERR_AI_NULL_PTR 0xA0000002
/* try to enable or initialize system,device or channel, before configing attribute */
#define CVI_ERR_AI_NOT_CONFIG 0xA0000007
/* operation is not supported by NOW */
#define CVI_ERR_AI_NOT_SUPPORT 0xA0000008
/* operation is not permitted ,eg, try to change stati attribute */
#define CVI_ERR_AI_NOT_PERM 0xA0000003
/* the devide is not enabled */
#define CVI_ERR_AI_NOT_ENABLED 0xA0000009
/* failure caused by malloc memory */
#define CVI_ERR_AI_NOMEM 0xA000000A
/* failure caused by malloc buffer */
#define CVI_ERR_AI_NOBUF 0xA000000B
/* no data in buffer */
#define CVI_ERR_AI_BUF_EMPTY 0xA000000C
/* no buffer for new data */
#define CVI_ERR_AI_BUF_FULL 0xA000000D
/* system is not ready,had not initialized or loaded*/
#define CVI_ERR_AI_SYS_NOTREADY 0xA000000E
#define CVI_ERR_AI_BUSY 0xA000000F
/* vqe err */
#define CVI_ERR_AI_VQE_ERR 0xA0000010
#define CVI_ERR_AI_VQE_BUF_FULL 0xA0000011
#define CVI_ERR_AI_VQE_FILE_UNEXIST 0xA0000012
/*invalid card ID*/
#define CVI_ERR_AI_INVALID_CARDID 0xA100013
/* invalid device ID */
#define CVI_ERR_AO_INVALID_DEVID 0xA1000001
/* invalid channel ID */
#define CVI_ERR_AO_INVALID_CHNID 0xA1000002
/* at least one parameter is illegal ,eg, an illegal enumeration value */
#define CVI_ERR_AO_ILLEGAL_PARAM 0xA1000003
/* using a NULL point */
#define CVI_ERR_AO_NULL_PTR 0xA1000004
/* try to enable or initialize system,device or channel, before configing attribute */
#define CVI_ERR_AO_NOT_CONFIG 0xA1000005
/* operation is not supported by NOW */
#define CVI_ERR_AO_NOT_SUPPORT 0xA1000006
/* operation is not permitted ,eg, try to change stati attribute */
#define CVI_ERR_AO_NOT_PERM 0xA1000007
/* the devide is not enabled */
#define CVI_ERR_AO_NOT_ENABLED 0xA1000008
/* failure caused by malloc memory */
#define CVI_ERR_AO_NOMEM 0xA1000009
/* failure caused by malloc buffer */
#define CVI_ERR_AO_NOBUF 0xA100000A
/* no data in buffer */
#define CVI_ERR_AO_BUF_EMPTY 0xA100000B
/* no buffer for new data */
#define CVI_ERR_AO_BUF_FULL 0xA100000C
/* system is not ready,had not initialized or loaded*/
#define CVI_ERR_AO_SYS_NOTREADY 0xA100000D
#define CVI_ERR_AO_BUSY 0xA100000E
/* vqe err */
#define CVI_ERR_AO_VQE_ERR 0xA100000F
/*invalid card ID*/
#define CVI_ERR_AO_INVALID_CARDID 0xA100010
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* End of #ifndef __CVI_COMM_AI_H__ */