Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: webrtc/modules/audio_processing/aec/aec_core.cc

Issue 1877713002: Replaced the data logging functionality in the AEC with a generic logging functionality (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 /* 11 /*
12 * The core AEC algorithm, which is presented with time-aligned signals. 12 * The core AEC algorithm, which is presented with time-aligned signals.
13 */ 13 */
14 14
15 #include "webrtc/modules/audio_processing/aec/aec_core.h" 15 #include "webrtc/modules/audio_processing/aec/aec_core.h"
16 16
17 #ifdef WEBRTC_AEC_DEBUG_DUMP
18 #include <stdio.h>
19 #endif
20
21 #include <algorithm> 17 #include <algorithm>
22 #include <assert.h> 18 #include <assert.h>
23 #include <math.h> 19 #include <math.h>
24 #include <stddef.h> // size_t 20 #include <stddef.h> // size_t
25 #include <stdlib.h> 21 #include <stdlib.h>
26 #include <string.h> 22 #include <string.h>
27 23
28 extern "C" { 24 extern "C" {
29 #include "webrtc/common_audio/ring_buffer.h" 25 #include "webrtc/common_audio/ring_buffer.h"
30 } 26 }
31 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar y.h" 27 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar y.h"
32 #include "webrtc/modules/audio_processing/aec/aec_common.h" 28 #include "webrtc/modules/audio_processing/aec/aec_common.h"
33 #include "webrtc/modules/audio_processing/aec/aec_core_internal.h" 29 #include "webrtc/modules/audio_processing/aec/aec_core_internal.h"
34 extern "C" { 30 extern "C" {
35 #include "webrtc/modules/audio_processing/aec/aec_rdft.h" 31 #include "webrtc/modules/audio_processing/aec/aec_rdft.h"
36 } 32 }
37 #include "webrtc/modules/audio_processing/logging/aec_logging.h"
38 extern "C" { 33 extern "C" {
39 #include "webrtc/modules/audio_processing/utility/delay_estimator_wrapper.h" 34 #include "webrtc/modules/audio_processing/utility/delay_estimator_wrapper.h"
40 } 35 }
41 #include "webrtc/system_wrappers/include/cpu_features_wrapper.h" 36 #include "webrtc/system_wrappers/include/cpu_features_wrapper.h"
42 #include "webrtc/typedefs.h" 37 #include "webrtc/typedefs.h"
43 38
44 namespace webrtc { 39 namespace webrtc {
45 40
46 // Buffer size (samples) 41 // Buffer size (samples)
47 static const size_t kBufSizePartitions = 250; // 1 second of audio in 16 kHz. 42 static const size_t kBufSizePartitions = 250; // 1 second of audio in 16 kHz.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 const float WebRtcAec_kExtendedSmoothingCoefficients[2][2] = {{0.9f, 0.1f}, 125 const float WebRtcAec_kExtendedSmoothingCoefficients[2][2] = {{0.9f, 0.1f},
131 {0.92f, 0.08f}}; 126 {0.92f, 0.08f}};
132 const float WebRtcAec_kNormalSmoothingCoefficients[2][2] = {{0.9f, 0.1f}, 127 const float WebRtcAec_kNormalSmoothingCoefficients[2][2] = {{0.9f, 0.1f},
133 {0.93f, 0.07f}}; 128 {0.93f, 0.07f}};
134 129
135 // Number of partitions forming the NLP's "preferred" bands. 130 // Number of partitions forming the NLP's "preferred" bands.
136 enum { kPrefBandSize = 24 }; 131 enum { kPrefBandSize = 24 };
137 132
138 #ifdef WEBRTC_AEC_DEBUG_DUMP 133 #ifdef WEBRTC_AEC_DEBUG_DUMP
139 extern int webrtc_aec_instance_count; 134 extern int webrtc_aec_instance_count;
135 #else
136 const int webrtc_aec_instance_count = 0;
140 #endif 137 #endif
141 138
142 WebRtcAecFilterFar WebRtcAec_FilterFar; 139 WebRtcAecFilterFar WebRtcAec_FilterFar;
143 WebRtcAecScaleErrorSignal WebRtcAec_ScaleErrorSignal; 140 WebRtcAecScaleErrorSignal WebRtcAec_ScaleErrorSignal;
144 WebRtcAecFilterAdaptation WebRtcAec_FilterAdaptation; 141 WebRtcAecFilterAdaptation WebRtcAec_FilterAdaptation;
145 WebRtcAecOverdriveAndSuppress WebRtcAec_OverdriveAndSuppress; 142 WebRtcAecOverdriveAndSuppress WebRtcAec_OverdriveAndSuppress;
146 WebRtcAecComfortNoise WebRtcAec_ComfortNoise; 143 WebRtcAecComfortNoise WebRtcAec_ComfortNoise;
147 WebRtcAecSubBandCoherence WebRtcAec_SubbandCoherence; 144 WebRtcAecSubBandCoherence WebRtcAec_SubbandCoherence;
148 WebRtcAecStoreAsComplex WebRtcAec_StoreAsComplex; 145 WebRtcAecStoreAsComplex WebRtcAec_StoreAsComplex;
149 WebRtcAecPartitionDelay WebRtcAec_PartitionDelay; 146 WebRtcAecPartitionDelay WebRtcAec_PartitionDelay;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 float DivergentFilterFraction::GetLatestFraction() const { 199 float DivergentFilterFraction::GetLatestFraction() const {
203 return fraction_; 200 return fraction_;
204 } 201 }
205 202
206 void DivergentFilterFraction::Clear() { 203 void DivergentFilterFraction::Clear() {
207 count_ = 0; 204 count_ = 0;
208 occurrence_ = 0; 205 occurrence_ = 0;
209 } 206 }
210 207
211 // TODO(minyue): Moving some initialization from WebRtcAec_CreateAec() to ctor. 208 // TODO(minyue): Moving some initialization from WebRtcAec_CreateAec() to ctor.
212 AecCore::AecCore() = default; 209 AecCore::AecCore(int instance_index) : data_dumper(instance_index) {}
213 210
214 static int CmpFloat(const void* a, const void* b) { 211 static int CmpFloat(const void* a, const void* b) {
215 const float* da = (const float*)a; 212 const float* da = (const float*)a;
216 const float* db = (const float*)b; 213 const float* db = (const float*)b;
217 214
218 return (*da > *db) - (*da < *db); 215 return (*da > *db) - (*da < *db);
219 } 216 }
220 217
221 static void FilterFar(int num_partitions, 218 static void FilterFar(int num_partitions,
222 int x_fft_buf_block_pos, 219 int x_fft_buf_block_pos,
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 // Compute the time-domain echo prediction error. 991 // Compute the time-domain echo prediction error.
995 for (i = 0; i < PART_LEN; ++i) { 992 for (i = 0; i < PART_LEN; ++i) {
996 e[i] = y[i] - s[i]; 993 e[i] = y[i] - s[i];
997 } 994 }
998 995
999 // Compute the frequency domain echo prediction error. 996 // Compute the frequency domain echo prediction error.
1000 memset(e_extended, 0, sizeof(float) * PART_LEN); 997 memset(e_extended, 0, sizeof(float) * PART_LEN);
1001 memcpy(e_extended + PART_LEN, e, sizeof(float) * PART_LEN); 998 memcpy(e_extended + PART_LEN, e, sizeof(float) * PART_LEN);
1002 Fft(e_extended, e_fft); 999 Fft(e_extended, e_fft);
1003 1000
1004 RTC_AEC_DEBUG_RAW_WRITE(aec->e_fft_file, &e_fft[0][0], 1001 aec->data_dumper.DumpRaw("aec_e_fft", PART_LEN1 * 2, &e_fft[0][0]);
1005 sizeof(e_fft[0][0]) * PART_LEN1 * 2);
1006 1002
1007 // Scale error signal inversely with far power. 1003 // Scale error signal inversely with far power.
1008 WebRtcAec_ScaleErrorSignal(extended_filter_enabled, normal_mu, 1004 WebRtcAec_ScaleErrorSignal(extended_filter_enabled, normal_mu,
1009 normal_error_threshold, x_pow, e_fft); 1005 normal_error_threshold, x_pow, e_fft);
1010 WebRtcAec_FilterAdaptation(num_partitions, *x_fft_buf_block_pos, x_fft_buf, 1006 WebRtcAec_FilterAdaptation(num_partitions, *x_fft_buf_block_pos, x_fft_buf,
1011 e_fft, h_fft_buf); 1007 e_fft, h_fft_buf);
1012 memcpy(echo_subtractor_output, e, sizeof(float) * PART_LEN); 1008 memcpy(echo_subtractor_output, e, sizeof(float) * PART_LEN);
1013 } 1009 }
1014 1010
1015 static void EchoSuppression(AecCore* aec, 1011 static void EchoSuppression(AecCore* aec,
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 } 1282 }
1287 WebRtc_ReadBuffer(aec->nearFrBuf, reinterpret_cast<void**>(&nearend_ptr), 1283 WebRtc_ReadBuffer(aec->nearFrBuf, reinterpret_cast<void**>(&nearend_ptr),
1288 nearend, PART_LEN); 1284 nearend, PART_LEN);
1289 memcpy(aec->dBuf + PART_LEN, nearend_ptr, sizeof(nearend)); 1285 memcpy(aec->dBuf + PART_LEN, nearend_ptr, sizeof(nearend));
1290 1286
1291 // We should always have at least one element stored in |far_buf|. 1287 // We should always have at least one element stored in |far_buf|.
1292 assert(WebRtc_available_read(aec->far_time_buf) > 0); 1288 assert(WebRtc_available_read(aec->far_time_buf) > 0);
1293 WebRtc_ReadBuffer(aec->far_time_buf, reinterpret_cast<void**>(&farend_ptr), 1289 WebRtc_ReadBuffer(aec->far_time_buf, reinterpret_cast<void**>(&farend_ptr),
1294 farend, 1); 1290 farend, 1);
1295 1291
1296 #ifdef WEBRTC_AEC_DEBUG_DUMP 1292 aec->data_dumper.DumpWav("aec_far", PART_LEN, &farend_ptr[PART_LEN],
1297 { 1293 aec->sampFreq > 16000 ? 16000 : aec->sampFreq);
1298 // TODO(minyue): |farend_ptr| starts from buffered samples. This will be 1294 aec->data_dumper.DumpWav("aec_near", PART_LEN, nearend_ptr,
1299 // modified when |aec->far_time_buf| is revised. 1295 aec->sampFreq > 16000 ? 16000 : aec->sampFreq);
1300 RTC_AEC_DEBUG_WAV_WRITE(aec->farFile, &farend_ptr[PART_LEN], PART_LEN);
1301
1302 RTC_AEC_DEBUG_WAV_WRITE(aec->nearFile, nearend_ptr, PART_LEN);
1303 }
1304 #endif
1305 1296
1306 if (aec->metricsMode == 1) { 1297 if (aec->metricsMode == 1) {
1307 // Update power levels 1298 // Update power levels
1308 UpdateLevel(&aec->farlevel, 1299 UpdateLevel(&aec->farlevel,
1309 CalculatePower(&farend_ptr[PART_LEN], PART_LEN)); 1300 CalculatePower(&farend_ptr[PART_LEN], PART_LEN));
1310 UpdateLevel(&aec->nearlevel, CalculatePower(nearend_ptr, PART_LEN)); 1301 UpdateLevel(&aec->nearlevel, CalculatePower(nearend_ptr, PART_LEN));
1311 } 1302 }
1312 1303
1313 // Convert far-end signal to the frequency domain. 1304 // Convert far-end signal to the frequency domain.
1314 memcpy(fft, farend_ptr, sizeof(float) * PART_LEN2); 1305 memcpy(fft, farend_ptr, sizeof(float) * PART_LEN2);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 } 1371 }
1381 } 1372 }
1382 } 1373 }
1383 1374
1384 // Perform echo subtraction. 1375 // Perform echo subtraction.
1385 EchoSubtraction(aec, aec->num_partitions, aec->extended_filter_enabled, 1376 EchoSubtraction(aec, aec->num_partitions, aec->extended_filter_enabled,
1386 aec->normal_mu, aec->normal_error_threshold, &x_fft[0][0], 1377 aec->normal_mu, aec->normal_error_threshold, &x_fft[0][0],
1387 &aec->xfBufBlockPos, aec->xfBuf, nearend_ptr, aec->xPow, 1378 &aec->xfBufBlockPos, aec->xfBuf, nearend_ptr, aec->xPow,
1388 aec->wfBuf, echo_subtractor_output); 1379 aec->wfBuf, echo_subtractor_output);
1389 1380
1390 RTC_AEC_DEBUG_WAV_WRITE(aec->outLinearFile, echo_subtractor_output, PART_LEN); 1381 aec->data_dumper.DumpWav("aec_out_linear", PART_LEN, echo_subtractor_output,
1382 aec->sampFreq > 16000 ? 16000 : aec->sampFreq);
1391 1383
1392 if (aec->metricsMode == 1) { 1384 if (aec->metricsMode == 1) {
1393 UpdateLevel(&aec->linoutlevel, 1385 UpdateLevel(&aec->linoutlevel,
1394 CalculatePower(echo_subtractor_output, PART_LEN)); 1386 CalculatePower(echo_subtractor_output, PART_LEN));
1395 } 1387 }
1396 1388
1397 // Perform echo suppression. 1389 // Perform echo suppression.
1398 EchoSuppression(aec, farend_ptr, echo_subtractor_output, output, outputH_ptr); 1390 EchoSuppression(aec, farend_ptr, echo_subtractor_output, output, outputH_ptr);
1399 1391
1400 if (aec->metricsMode == 1) { 1392 if (aec->metricsMode == 1) {
1401 UpdateLevel(&aec->nlpoutlevel, CalculatePower(output, PART_LEN)); 1393 UpdateLevel(&aec->nlpoutlevel, CalculatePower(output, PART_LEN));
1402 UpdateMetrics(aec); 1394 UpdateMetrics(aec);
1403 } 1395 }
1404 1396
1405 // Store the output block. 1397 // Store the output block.
1406 WebRtc_WriteBuffer(aec->outFrBuf, output, PART_LEN); 1398 WebRtc_WriteBuffer(aec->outFrBuf, output, PART_LEN);
1407 // For high bands 1399 // For high bands
1408 for (i = 0; i < aec->num_bands - 1; ++i) { 1400 for (i = 0; i < aec->num_bands - 1; ++i) {
1409 WebRtc_WriteBuffer(aec->outFrBufH[i], outputH[i], PART_LEN); 1401 WebRtc_WriteBuffer(aec->outFrBufH[i], outputH[i], PART_LEN);
1410 } 1402 }
1411 1403
1412 RTC_AEC_DEBUG_WAV_WRITE(aec->outFile, output, PART_LEN); 1404 aec->data_dumper.DumpWav("aec_out", PART_LEN, output,
1405 aec->sampFreq > 16000 ? 16000 : aec->sampFreq);
1413 } 1406 }
1414 1407
1415 AecCore* WebRtcAec_CreateAec() { 1408 AecCore* WebRtcAec_CreateAec() {
1416 int i; 1409 int i;
1417 AecCore* aec = new AecCore; 1410 AecCore* aec = new AecCore(webrtc_aec_instance_count);
1411
1418 if (!aec) { 1412 if (!aec) {
1419 return NULL; 1413 return NULL;
1420 } 1414 }
1421 1415
1422 aec->nearFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN, sizeof(float)); 1416 aec->nearFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN, sizeof(float));
1423 if (!aec->nearFrBuf) { 1417 if (!aec->nearFrBuf) {
1424 WebRtcAec_FreeAec(aec); 1418 WebRtcAec_FreeAec(aec);
1425 return NULL; 1419 return NULL;
1426 } 1420 }
1427 1421
(...skipping 23 matching lines...) Expand all
1451 // supposed to contain |PART_LEN2| samples with an overlap of |PART_LEN| 1445 // supposed to contain |PART_LEN2| samples with an overlap of |PART_LEN|
1452 // samples from the last frame. 1446 // samples from the last frame.
1453 // TODO(minyue): reduce |far_time_buf| to non-overlapped |PART_LEN| samples. 1447 // TODO(minyue): reduce |far_time_buf| to non-overlapped |PART_LEN| samples.
1454 aec->far_time_buf = 1448 aec->far_time_buf =
1455 WebRtc_CreateBuffer(kBufSizePartitions, sizeof(float) * PART_LEN2); 1449 WebRtc_CreateBuffer(kBufSizePartitions, sizeof(float) * PART_LEN2);
1456 if (!aec->far_time_buf) { 1450 if (!aec->far_time_buf) {
1457 WebRtcAec_FreeAec(aec); 1451 WebRtcAec_FreeAec(aec);
1458 return NULL; 1452 return NULL;
1459 } 1453 }
1460 1454
1461 #ifdef WEBRTC_AEC_DEBUG_DUMP
1462 aec->instance_index = webrtc_aec_instance_count;
1463
1464 aec->farFile = aec->nearFile = aec->outFile = aec->outLinearFile = NULL;
1465 aec->debug_dump_count = 0;
1466 #endif
1467 aec->delay_estimator_farend = 1455 aec->delay_estimator_farend =
1468 WebRtc_CreateDelayEstimatorFarend(PART_LEN1, kHistorySizeBlocks); 1456 WebRtc_CreateDelayEstimatorFarend(PART_LEN1, kHistorySizeBlocks);
1469 if (aec->delay_estimator_farend == NULL) { 1457 if (aec->delay_estimator_farend == NULL) {
1470 WebRtcAec_FreeAec(aec); 1458 WebRtcAec_FreeAec(aec);
1471 return NULL; 1459 return NULL;
1472 } 1460 }
1473 // We create the delay_estimator with the same amount of maximum lookahead as 1461 // We create the delay_estimator with the same amount of maximum lookahead as
1474 // the delay history size (kHistorySizeBlocks) for symmetry reasons. 1462 // the delay history size (kHistorySizeBlocks) for symmetry reasons.
1475 aec->delay_estimator = WebRtc_CreateDelayEstimator( 1463 aec->delay_estimator = WebRtc_CreateDelayEstimator(
1476 aec->delay_estimator_farend, kHistorySizeBlocks); 1464 aec->delay_estimator_farend, kHistorySizeBlocks);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 WebRtc_FreeBuffer(aec->nearFrBuf); 1521 WebRtc_FreeBuffer(aec->nearFrBuf);
1534 WebRtc_FreeBuffer(aec->outFrBuf); 1522 WebRtc_FreeBuffer(aec->outFrBuf);
1535 1523
1536 for (i = 0; i < NUM_HIGH_BANDS_MAX; ++i) { 1524 for (i = 0; i < NUM_HIGH_BANDS_MAX; ++i) {
1537 WebRtc_FreeBuffer(aec->nearFrBufH[i]); 1525 WebRtc_FreeBuffer(aec->nearFrBufH[i]);
1538 WebRtc_FreeBuffer(aec->outFrBufH[i]); 1526 WebRtc_FreeBuffer(aec->outFrBufH[i]);
1539 } 1527 }
1540 1528
1541 WebRtc_FreeBuffer(aec->far_time_buf); 1529 WebRtc_FreeBuffer(aec->far_time_buf);
1542 1530
1543 RTC_AEC_DEBUG_WAV_CLOSE(aec->farFile);
1544 RTC_AEC_DEBUG_WAV_CLOSE(aec->nearFile);
1545 RTC_AEC_DEBUG_WAV_CLOSE(aec->outFile);
1546 RTC_AEC_DEBUG_WAV_CLOSE(aec->outLinearFile);
1547 RTC_AEC_DEBUG_RAW_CLOSE(aec->e_fft_file);
1548
1549 WebRtc_FreeDelayEstimator(aec->delay_estimator); 1531 WebRtc_FreeDelayEstimator(aec->delay_estimator);
1550 WebRtc_FreeDelayEstimatorFarend(aec->delay_estimator_farend); 1532 WebRtc_FreeDelayEstimatorFarend(aec->delay_estimator_farend);
1551 1533
1552 delete aec; 1534 delete aec;
1553 } 1535 }
1554 1536
1555 int WebRtcAec_InitAec(AecCore* aec, int sampFreq) { 1537 int WebRtcAec_InitAec(AecCore* aec, int sampFreq) {
1556 int i; 1538 int i;
1539 aec->data_dumper.Initialize();
1557 1540
1558 aec->sampFreq = sampFreq; 1541 aec->sampFreq = sampFreq;
1559 1542
1560 if (sampFreq == 8000) { 1543 if (sampFreq == 8000) {
1561 aec->normal_mu = 0.6f; 1544 aec->normal_mu = 0.6f;
1562 aec->normal_error_threshold = 2e-6f; 1545 aec->normal_error_threshold = 2e-6f;
1563 aec->num_bands = 1; 1546 aec->num_bands = 1;
1564 } else { 1547 } else {
1565 aec->normal_mu = 0.5f; 1548 aec->normal_mu = 0.5f;
1566 aec->normal_error_threshold = 1.5e-6f; 1549 aec->normal_error_threshold = 1.5e-6f;
1567 aec->num_bands = (size_t)(sampFreq / 16000); 1550 aec->num_bands = (size_t)(sampFreq / 16000);
1568 } 1551 }
1569 1552
1570 WebRtc_InitBuffer(aec->nearFrBuf); 1553 WebRtc_InitBuffer(aec->nearFrBuf);
1571 WebRtc_InitBuffer(aec->outFrBuf); 1554 WebRtc_InitBuffer(aec->outFrBuf);
1572 for (i = 0; i < NUM_HIGH_BANDS_MAX; ++i) { 1555 for (i = 0; i < NUM_HIGH_BANDS_MAX; ++i) {
1573 WebRtc_InitBuffer(aec->nearFrBufH[i]); 1556 WebRtc_InitBuffer(aec->nearFrBufH[i]);
1574 WebRtc_InitBuffer(aec->outFrBufH[i]); 1557 WebRtc_InitBuffer(aec->outFrBufH[i]);
1575 } 1558 }
1576 1559
1577 // Initialize far-end buffers. 1560 // Initialize far-end buffers.
1578 WebRtc_InitBuffer(aec->far_time_buf); 1561 WebRtc_InitBuffer(aec->far_time_buf);
1579 1562
1580 #ifdef WEBRTC_AEC_DEBUG_DUMP
1581 {
1582 int process_rate = sampFreq > 16000 ? 16000 : sampFreq;
1583 RTC_AEC_DEBUG_WAV_REOPEN("aec_far", aec->instance_index,
1584 aec->debug_dump_count, process_rate,
1585 &aec->farFile);
1586 RTC_AEC_DEBUG_WAV_REOPEN("aec_near", aec->instance_index,
1587 aec->debug_dump_count, process_rate,
1588 &aec->nearFile);
1589 RTC_AEC_DEBUG_WAV_REOPEN("aec_out", aec->instance_index,
1590 aec->debug_dump_count, process_rate,
1591 &aec->outFile);
1592 RTC_AEC_DEBUG_WAV_REOPEN("aec_out_linear", aec->instance_index,
1593 aec->debug_dump_count, process_rate,
1594 &aec->outLinearFile);
1595 }
1596
1597 RTC_AEC_DEBUG_RAW_OPEN("aec_e_fft", aec->debug_dump_count, &aec->e_fft_file);
1598
1599 ++aec->debug_dump_count;
1600 #endif
1601 aec->system_delay = 0; 1563 aec->system_delay = 0;
1602 1564
1603 if (WebRtc_InitDelayEstimatorFarend(aec->delay_estimator_farend) != 0) { 1565 if (WebRtc_InitDelayEstimatorFarend(aec->delay_estimator_farend) != 0) {
1604 return -1; 1566 return -1;
1605 } 1567 }
1606 if (WebRtc_InitDelayEstimator(aec->delay_estimator) != 0) { 1568 if (WebRtc_InitDelayEstimator(aec->delay_estimator) != 0) {
1607 return -1; 1569 return -1;
1608 } 1570 }
1609 aec->delay_logging_enabled = 0; 1571 aec->delay_logging_enabled = 0;
1610 aec->delay_metrics_delivered = 0; 1572 aec->delay_metrics_delivered = 0;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 1907
1946 int WebRtcAec_system_delay(AecCore* self) { 1908 int WebRtcAec_system_delay(AecCore* self) {
1947 return self->system_delay; 1909 return self->system_delay;
1948 } 1910 }
1949 1911
1950 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) { 1912 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) {
1951 assert(delay >= 0); 1913 assert(delay >= 0);
1952 self->system_delay = delay; 1914 self->system_delay = delay;
1953 } 1915 }
1954 } // namespace webrtc 1916 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698