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