diff --git a/rtc_base/numerics/moving_median_filter.h b/rtc_base/numerics/moving_median_filter.h index 723679ec8e..4abaeff5bc 100644 --- a/rtc_base/numerics/moving_median_filter.h +++ b/rtc_base/numerics/moving_median_filter.h @@ -13,6 +13,7 @@ #include +#include #include #include "rtc_base/checks.h" @@ -38,6 +39,9 @@ class MovingMedianFilter { // Get median over the latest window. T GetFilteredValue() const; + // The number of samples that are currently stored. + size_t GetNumberOfSamplesStored() const; + private: PercentileFilter percentile_filter_; std::list samples_; @@ -77,5 +81,10 @@ void MovingMedianFilter::Reset() { samples_stored_ = 0; } +template +size_t MovingMedianFilter::GetNumberOfSamplesStored() const { + return samples_stored_; +} + } // namespace webrtc #endif // RTC_BASE_NUMERICS_MOVING_MEDIAN_FILTER_H_ diff --git a/rtc_base/numerics/moving_median_filter_unittest.cc b/rtc_base/numerics/moving_median_filter_unittest.cc index 41684b2b5c..12c1114c25 100644 --- a/rtc_base/numerics/moving_median_filter_unittest.cc +++ b/rtc_base/numerics/moving_median_filter_unittest.cc @@ -11,6 +11,7 @@ #include "rtc_base/numerics/moving_median_filter.h" #include +#include #include "test/gtest.h" @@ -19,15 +20,17 @@ namespace webrtc { TEST(MovingMedianFilterTest, ProcessesNoSamples) { MovingMedianFilter filter(2); EXPECT_EQ(0, filter.GetFilteredValue()); + EXPECT_EQ(0u, filter.GetNumberOfSamplesStored()); } TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow5) { MovingMedianFilter filter(5); const int64_t kSamples[5] = {1, 5, 2, 3, 4}; const int64_t kExpectedFilteredValues[5] = {1, 1, 2, 2, 3}; - for (int i = 0; i < 5; ++i) { + for (size_t i = 0; i < 5; ++i) { filter.Insert(kSamples[i]); EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue()); + EXPECT_EQ(i + 1, filter.GetNumberOfSamplesStored()); } } @@ -38,6 +41,7 @@ TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow3) { for (int i = 0; i < 5; ++i) { filter.Insert(kSamples[i]); EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue()); + EXPECT_EQ(std::min(i + 1, 3), filter.GetNumberOfSamplesStored()); } } @@ -48,6 +52,7 @@ TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow1) { for (int i = 0; i < 5; ++i) { filter.Insert(kSamples[i]); EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue()); + EXPECT_EQ(1u, filter.GetNumberOfSamplesStored()); } }