From 132c15de307390fce2dbfc09a071bac5e24d2d70 Mon Sep 17 00:00:00 2001 From: "bjornv@webrtc.org" Date: Wed, 27 Feb 2013 21:03:41 +0000 Subject: [PATCH] AEC Refactoring: * Adds pointer to low level AecCore struct. * Adds a simple unit test of this new call. Tested with audioproc_unittest, trybots TEST=none BUG=none Review URL: https://webrtc-codereview.appspot.com/1121006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3577 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../audio_processing/aec/echo_cancellation.c | 7 +++ .../aec/echo_cancellation_unittest.cc | 50 +++++++++++++++++++ .../aec/include/echo_cancellation.h | 12 +++++ .../audio_processing_tests.gypi | 1 + 4 files changed, 70 insertions(+) create mode 100644 webrtc/modules/audio_processing/aec/echo_cancellation_unittest.cc diff --git a/webrtc/modules/audio_processing/aec/echo_cancellation.c b/webrtc/modules/audio_processing/aec/echo_cancellation.c index 8fd9fe92a..6c262c928 100644 --- a/webrtc/modules/audio_processing/aec/echo_cancellation.c +++ b/webrtc/modules/audio_processing/aec/echo_cancellation.c @@ -700,6 +700,13 @@ WebRtc_Word32 WebRtcAec_get_error_code(void *aecInst) return aecpc->lastError; } +AecCore* WebRtcAec_aec_core(void* handle) { + if (!handle) { + return NULL; + } + return ((aecpc_t*) handle)->aec; +} + static int EstBufDelay(aecpc_t* aecpc) { int nSampSndCard = aecpc->msInSndCardBuf * sampMsNb * aecpc->rate_factor; int current_delay = nSampSndCard - WebRtcAec_system_delay(aecpc->aec); diff --git a/webrtc/modules/audio_processing/aec/echo_cancellation_unittest.cc b/webrtc/modules/audio_processing/aec/echo_cancellation_unittest.cc new file mode 100644 index 000000000..4861df08f --- /dev/null +++ b/webrtc/modules/audio_processing/aec/echo_cancellation_unittest.cc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// TODO(bjornv): Make this a comprehensive test. + +#include "webrtc/modules/audio_processing/aec/include/echo_cancellation.h" + +#include +#include + +extern "C" { +#include "webrtc/modules/audio_processing/aec/aec_core.h" +} + +#include "testing/gtest/include/gtest/gtest.h" + +namespace webrtc { + +TEST(EchoCancellationTest, CreateAndFreeHandlesErrors) { + EXPECT_EQ(-1, WebRtcAec_Create(NULL)); + void* handle = NULL; + ASSERT_EQ(0, WebRtcAec_Create(&handle)); + EXPECT_TRUE(handle != NULL); + EXPECT_EQ(-1, WebRtcAec_Free(NULL)); + EXPECT_EQ(0, WebRtcAec_Free(handle)); +} + +TEST(EchoCancellationTest, ApplyAecCoreHandle) { + void* handle = NULL; + ASSERT_EQ(0, WebRtcAec_Create(&handle)); + EXPECT_TRUE(handle != NULL); + EXPECT_TRUE(WebRtcAec_aec_core(NULL) == NULL); + AecCore* aec_core = WebRtcAec_aec_core(handle); + EXPECT_TRUE(aec_core != NULL); + // A simple test to verify that we can set and get a value from the lower + // level |aec_core| handle. + int delay = 111; + WebRtcAec_SetSystemDelay(aec_core, delay); + EXPECT_EQ(delay, WebRtcAec_system_delay(aec_core)); + EXPECT_EQ(0, WebRtcAec_Free(handle)); +} + +} // namespace webrtc diff --git a/webrtc/modules/audio_processing/aec/include/echo_cancellation.h b/webrtc/modules/audio_processing/aec/include/echo_cancellation.h index d29335495..0e963fdad 100644 --- a/webrtc/modules/audio_processing/aec/include/echo_cancellation.h +++ b/webrtc/modules/audio_processing/aec/include/echo_cancellation.h @@ -56,6 +56,8 @@ typedef struct { AecLevel aNlp; } AecMetrics; +struct AecCore; + #ifdef __cplusplus extern "C" { #endif @@ -240,6 +242,16 @@ int WebRtcAec_GetDelayMetrics(void* handle, int* median, int* std); */ WebRtc_Word32 WebRtcAec_get_error_code(void *aecInst); +// Returns a pointer to the low level AEC handle. +// +// Input: +// - handle : Pointer to the AEC instance. +// +// Return value: +// - AecCore pointer : NULL for error. +// +struct AecCore* WebRtcAec_aec_core(void* handle); + #ifdef __cplusplus } #endif diff --git a/webrtc/modules/audio_processing/audio_processing_tests.gypi b/webrtc/modules/audio_processing/audio_processing_tests.gypi index 2da6b835d..961b9e6fa 100644 --- a/webrtc/modules/audio_processing/audio_processing_tests.gypi +++ b/webrtc/modules/audio_processing/audio_processing_tests.gypi @@ -31,6 +31,7 @@ ], 'sources': [ 'aec/system_delay_unittest.cc', + 'aec/echo_cancellation_unittest.cc', 'test/unit_test.cc', 'utility/delay_estimator_unittest.cc', 'utility/ring_buffer_unittest.cc',