hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
 *  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_