1 /*
2 * Copyright (c) 2013 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 #include "testing/gtest/include/gtest/gtest.h"
12 #include "webrtc/base/scoped_ptr.h"
13 extern "C" {
14 #include "webrtc/modules/audio_processing/aec/aec_core.h"
15 }
16 #include "webrtc/modules/audio_processing/include/audio_processing.h"
17
18 namespace webrtc {
19
TEST(EchoCancellationInternalTest,ExtendedFilter)20 TEST(EchoCancellationInternalTest, ExtendedFilter) {
21 rtc::scoped_ptr<AudioProcessing> ap(AudioProcessing::Create());
22 EXPECT_TRUE(ap->echo_cancellation()->aec_core() == NULL);
23
24 EXPECT_EQ(ap->kNoError, ap->echo_cancellation()->Enable(true));
25 EXPECT_TRUE(ap->echo_cancellation()->is_enabled());
26
27 AecCore* aec_core = ap->echo_cancellation()->aec_core();
28 ASSERT_TRUE(aec_core != NULL);
29 // Disabled by default.
30 EXPECT_EQ(0, WebRtcAec_extended_filter_enabled(aec_core));
31
32 Config config;
33 config.Set<ExtendedFilter>(new ExtendedFilter(true));
34 ap->SetExtraOptions(config);
35 EXPECT_EQ(1, WebRtcAec_extended_filter_enabled(aec_core));
36
37 // Retains setting after initialization.
38 EXPECT_EQ(ap->kNoError, ap->Initialize());
39 EXPECT_EQ(1, WebRtcAec_extended_filter_enabled(aec_core));
40
41 config.Set<ExtendedFilter>(new ExtendedFilter(false));
42 ap->SetExtraOptions(config);
43 EXPECT_EQ(0, WebRtcAec_extended_filter_enabled(aec_core));
44
45 // Retains setting after initialization.
46 EXPECT_EQ(ap->kNoError, ap->Initialize());
47 EXPECT_EQ(0, WebRtcAec_extended_filter_enabled(aec_core));
48 }
49
TEST(EchoCancellationInternalTest,DelayAgnostic)50 TEST(EchoCancellationInternalTest, DelayAgnostic) {
51 rtc::scoped_ptr<AudioProcessing> ap(AudioProcessing::Create());
52 EXPECT_TRUE(ap->echo_cancellation()->aec_core() == NULL);
53
54 EXPECT_EQ(ap->kNoError, ap->echo_cancellation()->Enable(true));
55 EXPECT_TRUE(ap->echo_cancellation()->is_enabled());
56
57 AecCore* aec_core = ap->echo_cancellation()->aec_core();
58 ASSERT_TRUE(aec_core != NULL);
59 // Enabled by default.
60 EXPECT_EQ(0, WebRtcAec_delay_agnostic_enabled(aec_core));
61
62 Config config;
63 config.Set<DelayAgnostic>(new DelayAgnostic(true));
64 ap->SetExtraOptions(config);
65 EXPECT_EQ(1, WebRtcAec_delay_agnostic_enabled(aec_core));
66
67 // Retains setting after initialization.
68 EXPECT_EQ(ap->kNoError, ap->Initialize());
69 EXPECT_EQ(1, WebRtcAec_delay_agnostic_enabled(aec_core));
70
71 config.Set<DelayAgnostic>(new DelayAgnostic(false));
72 ap->SetExtraOptions(config);
73 EXPECT_EQ(0, WebRtcAec_delay_agnostic_enabled(aec_core));
74
75 // Retains setting after initialization.
76 EXPECT_EQ(ap->kNoError, ap->Initialize());
77 EXPECT_EQ(0, WebRtcAec_delay_agnostic_enabled(aec_core));
78 }
79
80 } // namespace webrtc
81