Index: webrtc/modules/audio_processing/rms_level_unittest.cc |
diff --git a/webrtc/modules/audio_processing/rms_level_unittest.cc b/webrtc/modules/audio_processing/rms_level_unittest.cc |
index 7b15717ca0a5fd5f1b985359559e21aa2041d56c..b2dea0020e84774ad4fa2371f0379176be16405b 100644 |
--- a/webrtc/modules/audio_processing/rms_level_unittest.cc |
+++ b/webrtc/modules/audio_processing/rms_level_unittest.cc |
@@ -26,8 +26,7 @@ std::unique_ptr<RMSLevel> RunTest(rtc::ArrayView<const int16_t> input) { |
std::unique_ptr<RMSLevel> level(new RMSLevel); |
for (size_t n = 0; n + kBlockSizeSamples <= input.size(); |
n += kBlockSizeSamples) { |
- level->Process(input.subview(n, kBlockSizeSamples).data(), |
- kBlockSizeSamples); |
+ level->Process(input.subview(n, kBlockSizeSamples)); |
} |
return level; |
} |
@@ -50,6 +49,14 @@ TEST(RmsLevelTest, Run1000HzFullScale) { |
EXPECT_EQ(3, level->RMS()); // -3 dBFS |
} |
+TEST(RmsLevelTest, Run1000HzFullScaleAverageAndPeak) { |
+ auto x = CreateSinusoid(1000, INT16_MAX, kSampleRateHz); |
+ auto level = RunTest(x); |
+ auto stats = level->AverageAndPeak(); |
+ EXPECT_EQ(3, stats.average); // -3 dBFS |
+ EXPECT_EQ(3, stats.peak); |
+} |
+ |
TEST(RmsLevelTest, Run1000HzHalfScale) { |
auto x = CreateSinusoid(1000, INT16_MAX / 2, kSampleRateHz); |
auto level = RunTest(x); |
@@ -62,11 +69,26 @@ TEST(RmsLevelTest, RunZeros) { |
EXPECT_EQ(127, level->RMS()); |
} |
+TEST(RmsLevelTest, RunZerosAverageAndPeak) { |
+ std::vector<int16_t> x(kSampleRateHz, 0); // 1 second of pure silence. |
+ auto level = RunTest(x); |
+ auto stats = level->AverageAndPeak(); |
+ EXPECT_EQ(127, stats.average); |
+ EXPECT_EQ(127, stats.peak); |
+} |
+ |
TEST(RmsLevelTest, NoSamples) { |
RMSLevel level; |
EXPECT_EQ(127, level.RMS()); // Return minimum if no samples are given. |
} |
+TEST(RmsLevelTest, NoSamplesAverageAndPeak) { |
+ RMSLevel level; |
+ auto stats = level.AverageAndPeak(); |
+ EXPECT_EQ(127, stats.average); |
+ EXPECT_EQ(127, stats.peak); |
+} |
+ |
TEST(RmsLevelTest, PollTwice) { |
auto x = CreateSinusoid(1000, INT16_MAX, kSampleRateHz); |
auto level = RunTest(x); |
@@ -89,4 +111,22 @@ TEST(RmsLevelTest, ProcessMuted) { |
EXPECT_EQ(6, level->RMS()); // Average RMS halved due to the silence. |
} |
+// Inserts 1 second of half-scale sinusoid, follwed by 10 ms of full-scale, and |
+// finally 1 second of half-scale again. Expect the average to be -9 dBFS due |
+// to the vast majority of the signal being half-scale, and the peak to be |
+// -3 dBFS. |
+TEST(RmsLevelTest, RunHalfScaleAndInsertFullScale) { |
+ auto half_scale = CreateSinusoid(1000, INT16_MAX / 2, kSampleRateHz); |
+ auto full_scale = CreateSinusoid(1000, INT16_MAX, kSampleRateHz / 100); |
+ auto x = half_scale; |
+ x.insert(x.end(), full_scale.begin(), full_scale.end()); |
+ x.insert(x.end(), half_scale.begin(), half_scale.end()); |
+ ASSERT_EQ(static_cast<size_t>(2 * kSampleRateHz + kSampleRateHz / 100), |
+ x.size()); |
+ auto level = RunTest(x); |
+ auto stats = level->AverageAndPeak(); |
+ EXPECT_EQ(9, stats.average); |
+ EXPECT_EQ(3, stats.peak); |
+} |
+ |
} // namespace webrtc |