Add a method to report number of samples in MovingMedianFilter.
Bug: webrtc:11342 Change-Id: Ie76a750ca43ee2e563b702e9e7e07eceb77e782b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168222 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Chen Xing <chxg@google.com> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Minyue Li <minyue@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30471}
This commit is contained in:
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
@ -38,6 +39,9 @@ class MovingMedianFilter {
|
|||||||
// Get median over the latest window.
|
// Get median over the latest window.
|
||||||
T GetFilteredValue() const;
|
T GetFilteredValue() const;
|
||||||
|
|
||||||
|
// The number of samples that are currently stored.
|
||||||
|
size_t GetNumberOfSamplesStored() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PercentileFilter<T> percentile_filter_;
|
PercentileFilter<T> percentile_filter_;
|
||||||
std::list<T> samples_;
|
std::list<T> samples_;
|
||||||
@ -77,5 +81,10 @@ void MovingMedianFilter<T>::Reset() {
|
|||||||
samples_stored_ = 0;
|
samples_stored_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
size_t MovingMedianFilter<T>::GetNumberOfSamplesStored() const {
|
||||||
|
return samples_stored_;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
#endif // RTC_BASE_NUMERICS_MOVING_MEDIAN_FILTER_H_
|
#endif // RTC_BASE_NUMERICS_MOVING_MEDIAN_FILTER_H_
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "rtc_base/numerics/moving_median_filter.h"
|
#include "rtc_base/numerics/moving_median_filter.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
|
|
||||||
@ -19,15 +20,17 @@ namespace webrtc {
|
|||||||
TEST(MovingMedianFilterTest, ProcessesNoSamples) {
|
TEST(MovingMedianFilterTest, ProcessesNoSamples) {
|
||||||
MovingMedianFilter<int> filter(2);
|
MovingMedianFilter<int> filter(2);
|
||||||
EXPECT_EQ(0, filter.GetFilteredValue());
|
EXPECT_EQ(0, filter.GetFilteredValue());
|
||||||
|
EXPECT_EQ(0u, filter.GetNumberOfSamplesStored());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow5) {
|
TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow5) {
|
||||||
MovingMedianFilter<int> filter(5);
|
MovingMedianFilter<int> filter(5);
|
||||||
const int64_t kSamples[5] = {1, 5, 2, 3, 4};
|
const int64_t kSamples[5] = {1, 5, 2, 3, 4};
|
||||||
const int64_t kExpectedFilteredValues[5] = {1, 1, 2, 2, 3};
|
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]);
|
filter.Insert(kSamples[i]);
|
||||||
EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue());
|
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) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
filter.Insert(kSamples[i]);
|
filter.Insert(kSamples[i]);
|
||||||
EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue());
|
EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue());
|
||||||
|
EXPECT_EQ(std::min<size_t>(i + 1, 3), filter.GetNumberOfSamplesStored());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,6 +52,7 @@ TEST(MovingMedianFilterTest, ReturnsMovingMedianWindow1) {
|
|||||||
for (int i = 0; i < 5; ++i) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
filter.Insert(kSamples[i]);
|
filter.Insert(kSamples[i]);
|
||||||
EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue());
|
EXPECT_EQ(kExpectedFilteredValues[i], filter.GetFilteredValue());
|
||||||
|
EXPECT_EQ(1u, filter.GetNumberOfSamplesStored());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user