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