linuxOS_AP05/external/common_algorithm/audio/rkskv/include/skv.h
2025-06-02 13:59:07 +08:00

171 lines
4.8 KiB
C

/*
* Copyright (C) 2021, Fuzhou Rockchip Electronics Co., Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Fuzhou Rockchip Electronics Co., Ltd. nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SKV_LIB_DEFINE_
#define _SKV_LIB_DEFINE_
#define INFO_RIGHT 1 // Succeed initialize SKV preprocessor
#define INFO_PARAM_ERROR 2 // Cann't support the parameter of audio that you input
#define INFO_EXCEEDDATE_ERROR 3 // Exceed the limited date
#define INFO_UNKNOW_ERROR 4 // Unknown error
#define FRAME_SIZE 256
#define FRAME_SIZE_PBNLMS 256
#define NUM_PBNLMS_FILTER 4
typedef enum _SkvAECEnable{
AEC_EN_DELAY = 1 << 0,
AEC_EN_CHN_MAP = 1 << 1,
} SkvAecEnable;
typedef enum _SkvBFEnable {
BF_EN_FAST_AEC = 1 << 0,
BF_EN_WAKEUP = 1 << 1,
BF_EN_DEREV = 1 << 2,
BF_EN_NLP = 1 << 3,
BF_EN_AES = 1 << 4,
BF_EN_AGC = 1 << 5,
BF_EN_ANR = 1 << 6,
BF_EN_GSC = 1 << 7,
BF_GSC_METHOD = 1 << 8,
BF_EN_FIX = 1 << 9,
BF_EN_STDT = 1 << 10,
BF_EN_CNG = 1 << 11,
BF_EN_EQ = 1 << 12,
} SkvBFEnable;
typedef enum _SkvRxEnable{
RX_EN_ANR = 1 << 0,
} SkvRxEnable;
typedef struct _SkvAecParam {
int pos;
int drop_ref_channel;
int aec_mode;
int delay_len;
int look_ahead;
short *mic_chns_map;
} SkvAecParam;
typedef struct _SkvAnrParam {
float noiseFactor;
int swU;
float psiMin;
float psiMax;
float fGmin;
} SkvAnrParam;
typedef struct _SkvAgcParam {
float attack_time;
float release_time;
float max_gain;
float max_peak;
float fRth0;
float fRk0;
float fRth1;
int fs;
int frmlen;
float attenuate_time;
float fRth2;
float fRk1;
float fRk2;
float fLineGainDb;
int swSmL0;
int swSmL1;
int swSmL2;
} SkvAgcParam;
typedef struct _SkvDereverbParam {
int rlsLg;
int curveLg;
int delay;
float forgetting;
float t60;
float coCoeff;
} SkvDereverbParam;
typedef struct _SkvNlpParam {
short nlp16k[8][2];
} SkvNlpParam;
typedef struct _SkvCngParam{
float fGain;
float fMpy;
float fSmoothAlpha;
float fSpeechGain;
} SkvCngParam;
typedef struct _SkvDtdParam {
float ksiThd_high;
float ksiThd_low;
} SkvDtdParam;
typedef struct _SkvAesParam {
float beta_up;
float beta_down;
} SkvAesParam;
typedef struct _SkvEqParam {
int shwParaLen;
short pfCoeff[5][13];
} SkvEqParam;
typedef struct _SkvBeamFormParam {
int model_en;
int ref_pos;
int targ;
int num_ref_channel;
int drop_ref_channel;
SkvDereverbParam* dereverb;
SkvAesParam* aes;
SkvNlpParam* nlp;
SkvAnrParam* anr;
SkvAgcParam* agc;
SkvCngParam* cng;
SkvDtdParam* dtd;
SkvEqParam* eq;
} SkvBeamFormParam;
typedef struct _SkvRxParam {
/* Parameters of agc */
int model_en;
SkvAnrParam* anr;
} SkvRxParam;
extern void* rkaudio_preprocess_init(int sampling_rate, int bits_persample,
int num_src_channel, int num_ref_channel, void *param);
extern void rkaudio_preprocess_destory(void *handle);
extern int rkaudio_preprocess_short(void *handle, short *in, short *out,
int in_size, int *is_wakeup);
extern void rkaudio_param_printf(int mic, int ref, void *param);
#endif // _SKV_LIB_DEFINE_