blob: 5bedccd64a8bea76cca79a3663ac50980fdaf5c4 [file] [log] [blame]
alessiob3ec96df2017-05-22 13:57:061/*
2 * Copyright (c) 2017 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
Alessio Bazzica270f7b52017-10-13 09:05:1711#include <algorithm>
alessiob3ec96df2017-05-22 13:57:0612
Mirko Bonadei92ea95e2017-09-15 04:47:3113#include "api/array_view.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3114#include "modules/audio_processing/audio_buffer.h"
Alex Loikoe36e8bb2018-02-16 10:54:0715#include "modules/audio_processing/gain_controller2.h"
Alessio Bazzica270f7b52017-10-13 09:05:1716#include "rtc_base/checks.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3117#include "test/gtest.h"
alessiob3ec96df2017-05-22 13:57:0618
19namespace webrtc {
20namespace test {
21
22namespace {
23
Alessio Bazzica270f7b52017-10-13 09:05:1724constexpr size_t kFrameSizeMs = 10u;
alessiob3ec96df2017-05-22 13:57:0625constexpr size_t kStereo = 2u;
26
27void SetAudioBufferSamples(float value, AudioBuffer* ab) {
Alessio Bazzica270f7b52017-10-13 09:05:1728 // Sets all the samples in |ab| to |value|.
alessiob3ec96df2017-05-22 13:57:0629 for (size_t k = 0; k < ab->num_channels(); ++k) {
Alessio Bazzica270f7b52017-10-13 09:05:1730 std::fill(ab->channels_f()[k], ab->channels_f()[k] + ab->num_frames(),
31 value);
alessiob3ec96df2017-05-22 13:57:0632 }
33}
34
alessiob3ec96df2017-05-22 13:57:0635} // namespace
36
Alessio Bazzica270f7b52017-10-13 09:05:1737TEST(GainController2, CreateApplyConfig) {
38 // Instances GainController2 and applies different configurations.
39 std::unique_ptr<GainController2> gain_controller2(new GainController2());
40
41 // Check that the default config is valid.
42 AudioProcessing::Config::GainController2 config;
43 EXPECT_TRUE(GainController2::Validate(config));
44 gain_controller2->ApplyConfig(config);
45
46 // Check that attenuation is not allowed.
47 config.fixed_gain_db = -5.f;
48 EXPECT_FALSE(GainController2::Validate(config));
49
50 // Check that valid configurations are applied.
51 for (const float& fixed_gain_db : {0.f, 5.f, 10.f, 50.f}) {
52 config.fixed_gain_db = fixed_gain_db;
53 EXPECT_TRUE(GainController2::Validate(config));
54 gain_controller2->ApplyConfig(config);
55 }
alessiob3ec96df2017-05-22 13:57:0656}
57
58TEST(GainController2, ToString) {
Alessio Bazzica270f7b52017-10-13 09:05:1759 // Tests GainController2::ToString().
60 AudioProcessing::Config::GainController2 config;
61 config.fixed_gain_db = 5.f;
alessiob3ec96df2017-05-22 13:57:0662
Alessio Bazzica270f7b52017-10-13 09:05:1763 config.enabled = false;
Alex Loiko9d2788f2018-03-29 09:02:4364 EXPECT_EQ("{enabled: false, fixed_gain_dB: 5}",
Alessio Bazzica270f7b52017-10-13 09:05:1765 GainController2::ToString(config));
alessiob3ec96df2017-05-22 13:57:0666
Alessio Bazzica270f7b52017-10-13 09:05:1767 config.enabled = true;
Alex Loiko9d2788f2018-03-29 09:02:4368 EXPECT_EQ("{enabled: true, fixed_gain_dB: 5}",
Alessio Bazzica270f7b52017-10-13 09:05:1769 GainController2::ToString(config));
alessiob3ec96df2017-05-22 13:57:0670}
71
72TEST(GainController2, Usage) {
Alessio Bazzica270f7b52017-10-13 09:05:1773 // Tests GainController2::Process() on an AudioBuffer instance.
74 std::unique_ptr<GainController2> gain_controller2(new GainController2());
75 gain_controller2->Initialize(AudioProcessing::kSampleRate48kHz);
76 const size_t num_frames = rtc::CheckedDivExact<size_t>(
77 kFrameSizeMs * AudioProcessing::kSampleRate48kHz, 1000);
78 AudioBuffer ab(num_frames, kStereo, num_frames, kStereo, num_frames);
79 constexpr float sample_value = 1000.f;
80 SetAudioBufferSamples(sample_value, &ab);
81 AudioProcessing::Config::GainController2 config;
82
Alessio Bazzica270f7b52017-10-13 09:05:1783 // Check that samples are amplified when the fixed gain is greater than 0 dB.
84 config.fixed_gain_db = 5.f;
85 gain_controller2->ApplyConfig(config);
86 gain_controller2->Process(&ab);
87 EXPECT_LT(sample_value, ab.channels_f()[0][0]);
alessiob3ec96df2017-05-22 13:57:0688}
89
90} // namespace test
91} // namespace webrtc