Add a new macro for bit-exact audioproc tests.

Enable bit-exact test for all fixed-point configs.

BUG=114
TEST=audioproc_unittest on all platforms.

Review URL: https://webrtc-codereview.appspot.com/369018

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1575 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andrew@webrtc.org 2012-01-30 22:04:26 +00:00
parent 72fe2443ea
commit 293d22b39b
2 changed files with 19 additions and 15 deletions

View File

@ -13,9 +13,9 @@
'type': 'executable', 'type': 'executable',
'conditions': [ 'conditions': [
['prefer_fixed_point==1', { ['prefer_fixed_point==1', {
'defines': [ 'WEBRTC_APM_UNIT_TEST_FIXED_PROFILE' ], 'defines': [ 'WEBRTC_AUDIOPROC_FIXED_PROFILE' ],
}, { }, {
'defines': [ 'WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE' ], 'defines': [ 'WEBRTC_AUDIOPROC_FLOAT_PROFILE' ],
}], }],
['enable_protobuf==1', { ['enable_protobuf==1', {
'defines': [ 'WEBRTC_AUDIOPROC_DEBUG_DUMP' ], 'defines': [ 'WEBRTC_AUDIOPROC_DEBUG_DUMP' ],

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * 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 * that can be found in the LICENSE file in the root of the source
@ -26,6 +26,11 @@
#include "webrtc/audio_processing/unittest.pb.h" #include "webrtc/audio_processing/unittest.pb.h"
#endif #endif
#if (defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)) || \
(defined(WEBRTC_LINUX) && defined(WEBRTC_ARCH_X86_64) && !defined(NDEBUG))
# define WEBRTC_AUDIOPROC_BIT_EXACT
#endif
using webrtc::AudioProcessing; using webrtc::AudioProcessing;
using webrtc::AudioFrame; using webrtc::AudioFrame;
using webrtc::GainControl; using webrtc::GainControl;
@ -74,9 +79,9 @@ class ApmTest : public ::testing::Test {
ApmTest::ApmTest() ApmTest::ApmTest()
: resource_path(webrtc::test::ProjectRootPath() + : resource_path(webrtc::test::ProjectRootPath() +
"test/data/audio_processing/"), "test/data/audio_processing/"),
#if defined(WEBRTC_APM_UNIT_TEST_FIXED_PROFILE) #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)
output_filename(resource_path + "output_data_fixed.pb"), output_filename(resource_path + "output_data_fixed.pb"),
#elif defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
output_filename(resource_path + "output_data_float.pb"), output_filename(resource_path + "output_data_float.pb"),
#endif #endif
apm_(NULL), apm_(NULL),
@ -1003,7 +1008,7 @@ TEST_F(ApmTest, DebugDump) {
// TODO(andrew): Make this test more robust such that it can be run on multiple // TODO(andrew): Make this test more robust such that it can be run on multiple
// platforms. It currently requires bit-exactness. // platforms. It currently requires bit-exactness.
#if defined(WEBRTC_LINUX) && defined(WEBRTC_ARCH_X86_64) && !defined(NDEBUG) #ifdef WEBRTC_AUDIOPROC_BIT_EXACT
TEST_F(ApmTest, Process) { TEST_F(ApmTest, Process) {
GOOGLE_PROTOBUF_VERIFY_VERSION; GOOGLE_PROTOBUF_VERIFY_VERSION;
webrtc::audioproc::OutputData output_data; webrtc::audioproc::OutputData output_data;
@ -1015,10 +1020,10 @@ TEST_F(ApmTest, Process) {
// TODO(ajm): vary the output channels as well? // TODO(ajm): vary the output channels as well?
const int channels[] = {1, 2}; const int channels[] = {1, 2};
const size_t channels_size = sizeof(channels) / sizeof(*channels); const size_t channels_size = sizeof(channels) / sizeof(*channels);
#if defined(WEBRTC_APM_UNIT_TEST_FIXED_PROFILE) #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)
// AECM doesn't support super-wb. // AECM doesn't support super-wb.
const int sample_rates[] = {8000, 16000}; const int sample_rates[] = {8000, 16000};
#elif defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
const int sample_rates[] = {8000, 16000, 32000}; const int sample_rates[] = {8000, 16000, 32000};
#endif #endif
const size_t sample_rates_size = sizeof(sample_rates) / sizeof(*sample_rates); const size_t sample_rates_size = sizeof(sample_rates) / sizeof(*sample_rates);
@ -1035,14 +1040,14 @@ TEST_F(ApmTest, Process) {
} }
} }
#if defined(WEBRTC_APM_UNIT_TEST_FIXED_PROFILE) #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)
EXPECT_EQ(apm_->kNoError, apm_->set_sample_rate_hz(16000)); EXPECT_EQ(apm_->kNoError, apm_->set_sample_rate_hz(16000));
EXPECT_EQ(apm_->kNoError, apm_->echo_control_mobile()->Enable(true)); EXPECT_EQ(apm_->kNoError, apm_->echo_control_mobile()->Enable(true));
EXPECT_EQ(apm_->kNoError, EXPECT_EQ(apm_->kNoError,
apm_->gain_control()->set_mode(GainControl::kAdaptiveDigital)); apm_->gain_control()->set_mode(GainControl::kAdaptiveDigital));
EXPECT_EQ(apm_->kNoError, apm_->gain_control()->Enable(true)); EXPECT_EQ(apm_->kNoError, apm_->gain_control()->Enable(true));
#elif defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
EXPECT_EQ(apm_->kNoError, EXPECT_EQ(apm_->kNoError,
apm_->echo_cancellation()->enable_drift_compensation(true)); apm_->echo_cancellation()->enable_drift_compensation(true));
EXPECT_EQ(apm_->kNoError, EXPECT_EQ(apm_->kNoError,
@ -1165,7 +1170,7 @@ TEST_F(ApmTest, Process) {
max_output_average /= frame_count; max_output_average /= frame_count;
analog_level_average /= frame_count; analog_level_average /= frame_count;
#if defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #if defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
EchoCancellation::Metrics echo_metrics; EchoCancellation::Metrics echo_metrics;
EXPECT_EQ(apm_->kNoError, EXPECT_EQ(apm_->kNoError,
apm_->echo_cancellation()->GetMetrics(&echo_metrics)); apm_->echo_cancellation()->GetMetrics(&echo_metrics));
@ -1187,7 +1192,7 @@ TEST_F(ApmTest, Process) {
EXPECT_EQ(test->analog_level_average(), analog_level_average); EXPECT_EQ(test->analog_level_average(), analog_level_average);
EXPECT_EQ(test->max_output_average(), max_output_average); EXPECT_EQ(test->max_output_average(), max_output_average);
#if defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #if defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
webrtc::audioproc::Test::EchoMetrics reference = webrtc::audioproc::Test::EchoMetrics reference =
test->echo_metrics(); test->echo_metrics();
TestStats(echo_metrics.residual_echo_return_loss, TestStats(echo_metrics.residual_echo_return_loss,
@ -1214,7 +1219,7 @@ TEST_F(ApmTest, Process) {
test->set_analog_level_average(analog_level_average); test->set_analog_level_average(analog_level_average);
test->set_max_output_average(max_output_average); test->set_max_output_average(max_output_average);
#if defined(WEBRTC_APM_UNIT_TEST_FLOAT_PROFILE) #if defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE)
webrtc::audioproc::Test::EchoMetrics* message = webrtc::audioproc::Test::EchoMetrics* message =
test->mutable_echo_metrics(); test->mutable_echo_metrics();
WriteStatsMessage(echo_metrics.residual_echo_return_loss, WriteStatsMessage(echo_metrics.residual_echo_return_loss,
@ -1243,8 +1248,7 @@ TEST_F(ApmTest, Process) {
WriteMessageLiteToFile(output_filename, output_data); WriteMessageLiteToFile(output_filename, output_data);
} }
} }
#endif // defined(WEBRTC_LINUX) && defined(WEBRTC_ARCH_X86_64) && #endif // WEBRTC_AUDIOPROC_BIT_EXACT
// !defined(NDEBUG)
} // namespace } // namespace