OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AEC_INCLUDE_ECHO_CANCELLATION_H_ | |
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AEC_INCLUDE_ECHO_CANCELLATION_H_ | |
13 | |
14 #include <stddef.h> | |
15 | |
16 #include "webrtc/typedefs.h" | |
17 | |
18 // Errors | |
19 #define AEC_UNSPECIFIED_ERROR 12000 | |
20 #define AEC_UNSUPPORTED_FUNCTION_ERROR 12001 | |
21 #define AEC_UNINITIALIZED_ERROR 12002 | |
22 #define AEC_NULL_POINTER_ERROR 12003 | |
23 #define AEC_BAD_PARAMETER_ERROR 12004 | |
24 | |
25 // Warnings | |
26 #define AEC_BAD_PARAMETER_WARNING 12050 | |
27 | |
28 enum { | |
29 kAecNlpConservative = 0, | |
30 kAecNlpModerate, | |
31 kAecNlpAggressive | |
32 }; | |
33 | |
34 enum { | |
35 kAecFalse = 0, | |
36 kAecTrue | |
37 }; | |
38 | |
39 typedef struct { | |
40 int16_t nlpMode; // default kAecNlpModerate | |
41 int16_t skewMode; // default kAecFalse | |
42 int16_t metricsMode; // default kAecFalse | |
43 int delay_logging; // default kAecFalse | |
44 // float realSkew; | |
45 } AecConfig; | |
46 | |
47 typedef struct { | |
48 int instant; | |
49 int average; | |
50 int max; | |
51 int min; | |
52 } AecLevel; | |
53 | |
54 typedef struct { | |
55 AecLevel rerl; | |
56 AecLevel erl; | |
57 AecLevel erle; | |
58 AecLevel aNlp; | |
59 } AecMetrics; | |
60 | |
61 struct AecCore; | |
62 | |
63 #ifdef __cplusplus | |
64 extern "C" { | |
65 #endif | |
66 | |
67 /* | |
68 * Allocates the memory needed by the AEC. The memory needs to be initialized | |
69 * separately using the WebRtcAec_Init() function. Returns a pointer to the | |
70 * object or NULL on error. | |
71 */ | |
72 void* WebRtcAec_Create(); | |
73 | |
74 /* | |
75 * This function releases the memory allocated by WebRtcAec_Create(). | |
76 * | |
77 * Inputs Description | |
78 * ------------------------------------------------------------------- | |
79 * void* aecInst Pointer to the AEC instance | |
80 */ | |
81 void WebRtcAec_Free(void* aecInst); | |
82 | |
83 /* | |
84 * Initializes an AEC instance. | |
85 * | |
86 * Inputs Description | |
87 * ------------------------------------------------------------------- | |
88 * void* aecInst Pointer to the AEC instance | |
89 * int32_t sampFreq Sampling frequency of data | |
90 * int32_t scSampFreq Soundcard sampling frequency | |
91 * | |
92 * Outputs Description | |
93 * ------------------------------------------------------------------- | |
94 * int32_t return 0: OK | |
95 * -1: error | |
96 */ | |
97 int32_t WebRtcAec_Init(void* aecInst, int32_t sampFreq, int32_t scSampFreq); | |
98 | |
99 /* | |
100 * Inserts an 80 or 160 sample block of data into the farend buffer. | |
101 * | |
102 * Inputs Description | |
103 * ------------------------------------------------------------------- | |
104 * void* aecInst Pointer to the AEC instance | |
105 * const float* farend In buffer containing one frame of | |
106 * farend signal for L band | |
107 * int16_t nrOfSamples Number of samples in farend buffer | |
108 * | |
109 * Outputs Description | |
110 * ------------------------------------------------------------------- | |
111 * int32_t return 0: OK | |
112 * 12000-12050: error code | |
113 */ | |
114 int32_t WebRtcAec_BufferFarend(void* aecInst, | |
115 const float* farend, | |
116 size_t nrOfSamples); | |
117 | |
118 /* | |
119 * Reports any errors that would arise if buffering a farend buffer | |
120 * | |
121 * Inputs Description | |
122 * ------------------------------------------------------------------- | |
123 * void* aecInst Pointer to the AEC instance | |
124 * const float* farend In buffer containing one frame of | |
125 * farend signal for L band | |
126 * int16_t nrOfSamples Number of samples in farend buffer | |
127 * | |
128 * Outputs Description | |
129 * ------------------------------------------------------------------- | |
130 * int32_t return 0: OK | |
131 * 12000-12050: error code | |
132 */ | |
133 int32_t WebRtcAec_GetBufferFarendError(void* aecInst, | |
134 const float* farend, | |
135 size_t nrOfSamples); | |
136 | |
137 /* | |
138 * Runs the echo canceller on an 80 or 160 sample blocks of data. | |
139 * | |
140 * Inputs Description | |
141 * ------------------------------------------------------------------- | |
142 * void* aecInst Pointer to the AEC instance | |
143 * float* const* nearend In buffer containing one frame of | |
144 * nearend+echo signal for each band | |
145 * int num_bands Number of bands in nearend buffer | |
146 * int16_t nrOfSamples Number of samples in nearend buffer | |
147 * int16_t msInSndCardBuf Delay estimate for sound card and | |
148 * system buffers | |
149 * int16_t skew Difference between number of samples played | |
150 * and recorded at the soundcard (for clock skew | |
151 * compensation) | |
152 * | |
153 * Outputs Description | |
154 * ------------------------------------------------------------------- | |
155 * float* const* out Out buffer, one frame of processed nearend | |
156 * for each band | |
157 * int32_t return 0: OK | |
158 * 12000-12050: error code | |
159 */ | |
160 int32_t WebRtcAec_Process(void* aecInst, | |
161 const float* const* nearend, | |
162 size_t num_bands, | |
163 float* const* out, | |
164 size_t nrOfSamples, | |
165 int16_t msInSndCardBuf, | |
166 int32_t skew); | |
167 | |
168 /* | |
169 * This function enables the user to set certain parameters on-the-fly. | |
170 * | |
171 * Inputs Description | |
172 * ------------------------------------------------------------------- | |
173 * void* handle Pointer to the AEC instance | |
174 * AecConfig config Config instance that contains all | |
175 * properties to be set | |
176 * | |
177 * Outputs Description | |
178 * ------------------------------------------------------------------- | |
179 * int return 0: OK | |
180 * 12000-12050: error code | |
181 */ | |
182 int WebRtcAec_set_config(void* handle, AecConfig config); | |
183 | |
184 /* | |
185 * Gets the current echo status of the nearend signal. | |
186 * | |
187 * Inputs Description | |
188 * ------------------------------------------------------------------- | |
189 * void* handle Pointer to the AEC instance | |
190 * | |
191 * Outputs Description | |
192 * ------------------------------------------------------------------- | |
193 * int* status 0: Almost certainly nearend single-talk | |
194 * 1: Might not be neared single-talk | |
195 * int return 0: OK | |
196 * 12000-12050: error code | |
197 */ | |
198 int WebRtcAec_get_echo_status(void* handle, int* status); | |
199 | |
200 /* | |
201 * Gets the current echo metrics for the session. | |
202 * | |
203 * Inputs Description | |
204 * ------------------------------------------------------------------- | |
205 * void* handle Pointer to the AEC instance | |
206 * | |
207 * Outputs Description | |
208 * ------------------------------------------------------------------- | |
209 * AecMetrics* metrics Struct which will be filled out with the | |
210 * current echo metrics. | |
211 * int return 0: OK | |
212 * 12000-12050: error code | |
213 */ | |
214 int WebRtcAec_GetMetrics(void* handle, AecMetrics* metrics); | |
215 | |
216 /* | |
217 * Gets the current delay metrics for the session. | |
218 * | |
219 * Inputs Description | |
220 * ------------------------------------------------------------------- | |
221 * void* handle Pointer to the AEC instance | |
222 * | |
223 * Outputs Description | |
224 * ------------------------------------------------------------------- | |
225 * int* median Delay median value. | |
226 * int* std Delay standard deviation. | |
227 * float* fraction_poor_delays Fraction of the delay estimates that may | |
228 * cause the AEC to perform poorly. | |
229 * | |
230 * int return 0: OK | |
231 * 12000-12050: error code | |
232 */ | |
233 int WebRtcAec_GetDelayMetrics(void* handle, | |
234 int* median, | |
235 int* std, | |
236 float* fraction_poor_delays); | |
237 | |
238 // Returns a pointer to the low level AEC handle. | |
239 // | |
240 // Input: | |
241 // - handle : Pointer to the AEC instance. | |
242 // | |
243 // Return value: | |
244 // - AecCore pointer : NULL for error. | |
245 // | |
246 struct AecCore* WebRtcAec_aec_core(void* handle); | |
247 | |
248 #ifdef __cplusplus | |
249 } | |
250 #endif | |
251 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AEC_INCLUDE_ECHO_CANCELLATION_H_ | |
OLD | NEW |