blob: 51abf94cfaab045e1471995a6bd9b8da631eaf04 [file] [log] [blame]
/*
* Copyright (c) 2025 The WebRTC project authors. All Rights Reserved.
*
* 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
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "modules/audio_processing/capture_mixer/audio_content_analyzer.h"
#include <cstddef>
#include <tuple>
#include <vector>
#include "api/array_view.h"
#include "test/gtest.h"
namespace webrtc {
namespace {
std::vector<float> CreateAndPopulateChannel(float amplitude,
float dc_level,
int num_samples_per_channel) {
std::vector<float> x(num_samples_per_channel);
for (size_t k = 0; k < x.size(); ++k) {
x[k] = amplitude * (k % 2 == 0 ? 1 : -1) + dc_level;
}
return x;
}
} // namespace
class AudioContentAnalyzerParametrizedTest
: public ::testing::Test,
public ::testing::WithParamInterface<std::tuple<int, float, float>> {};
INSTANTIATE_TEST_SUITE_P(
MultiParameters,
AudioContentAnalyzerParametrizedTest,
::testing::Combine(::testing::Values(16000, 32000, 48000),
::testing::Values(0.0f, -5.1f, 10.7f, 200.0f),
::testing::Values(50.0f, 1000.0f)));
TEST_P(AudioContentAnalyzerParametrizedTest,
VerifyReliableEstimatesAndRunAllCode) {
const int sample_rate_hz = std::get<0>(GetParam());
const float dc_level = std::get<1>(GetParam());
const float amplitude = std::get<2>(GetParam());
constexpr int kFrameSizeMs = 10;
const int num_samples_per_channel = sample_rate_hz * kFrameSizeMs / 1000;
AudioContentAnalyzer analyzer(num_samples_per_channel);
const std::vector<float> channel =
CreateAndPopulateChannel(amplitude, dc_level, num_samples_per_channel);
bool reliable_estimates = analyzer.Analyze(channel, channel);
EXPECT_FALSE(reliable_estimates);
constexpr int kNumFramesToAnalyze = 400;
for (int k = 0; k < kNumFramesToAnalyze; ++k) {
reliable_estimates = analyzer.Analyze(channel, channel);
}
EXPECT_TRUE(reliable_estimates);
}
} // namespace webrtc