| Index: media/filters/video_cadence_estimator_unittest.cc
|
| diff --git a/media/filters/video_cadence_estimator_unittest.cc b/media/filters/video_cadence_estimator_unittest.cc
|
| index 04ca70ca6356bc7067601e7c5ff09e959c25deee..9ece92295e82329d60dd50211fdfffcaaa198854 100644
|
| --- a/media/filters/video_cadence_estimator_unittest.cc
|
| +++ b/media/filters/video_cadence_estimator_unittest.cc
|
| @@ -3,6 +3,8 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_split.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "media/filters/video_cadence_estimator.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -22,33 +24,47 @@ static base::TimeDelta Interval(double hertz) {
|
| return base::TimeDelta::FromSecondsD(1.0 / hertz);
|
| }
|
|
|
| -static void VerifyCadence(VideoCadenceEstimator* estimator,
|
| - double frame_hertz,
|
| - double render_hertz,
|
| - int expected_cadence) {
|
| +std::vector<int> CreateCadenceFromString(const std::string& cadence) {
|
| + std::vector<std::string> tokens;
|
| + CHECK_EQ('[', cadence[0]);
|
| + CHECK_EQ(']', cadence[cadence.length() - 1]);
|
| + base::SplitString(cadence.substr(1, cadence.length() - 2), ':', &tokens);
|
| +
|
| + std::vector<int> result;
|
| + for (const auto& token : tokens) {
|
| + int cadence_value = 0;
|
| + CHECK(base::StringToInt(token, &cadence_value)) << token;
|
| + result.push_back(cadence_value);
|
| + }
|
| +
|
| + return result;
|
| +}
|
| +
|
| +static void VerifyCadenceVector(VideoCadenceEstimator* estimator,
|
| + double frame_hertz,
|
| + double render_hertz,
|
| + const std::string& expected_cadence) {
|
| SCOPED_TRACE(base::StringPrintf("Checking %.03f fps into %0.03f", frame_hertz,
|
| render_hertz));
|
| +
|
| + const std::vector<int> expected_cadence_vector =
|
| + CreateCadenceFromString(expected_cadence);
|
| +
|
| estimator->Reset();
|
| const base::TimeDelta acceptable_drift = Interval(frame_hertz) / 2;
|
| const bool cadence_changed = estimator->UpdateCadenceEstimate(
|
| Interval(render_hertz), Interval(frame_hertz), acceptable_drift);
|
| EXPECT_EQ(cadence_changed, estimator->has_cadence());
|
| - EXPECT_EQ(!!expected_cadence, estimator->has_cadence());
|
| + EXPECT_EQ(expected_cadence_vector.empty(), !estimator->has_cadence());
|
|
|
| // Nothing further to test.
|
| - if (!expected_cadence)
|
| + if (expected_cadence_vector.empty())
|
| return;
|
|
|
| - // Spot check a few frame indices.
|
| - if (frame_hertz <= render_hertz) {
|
| - EXPECT_EQ(expected_cadence, estimator->GetCadenceForFrame(0));
|
| - EXPECT_EQ(expected_cadence, estimator->GetCadenceForFrame(1));
|
| - EXPECT_EQ(expected_cadence, estimator->GetCadenceForFrame(2));
|
| - } else {
|
| - EXPECT_EQ(1, estimator->GetCadenceForFrame(0));
|
| - EXPECT_EQ(0, estimator->GetCadenceForFrame(1));
|
| - EXPECT_EQ(1, estimator->GetCadenceForFrame(expected_cadence));
|
| - EXPECT_EQ(0, estimator->GetCadenceForFrame(expected_cadence + 1));
|
| + // Spot two cycles of the cadence.
|
| + for (size_t i = 0; i < expected_cadence_vector.size() * 2; ++i) {
|
| + ASSERT_EQ(expected_cadence_vector[i % expected_cadence_vector.size()],
|
| + estimator->GetCadenceForFrame(i));
|
| }
|
| }
|
|
|
| @@ -58,28 +74,31 @@ TEST(VideoCadenceEstimatorTest, CadenceCalculations) {
|
| base::TimeDelta::FromSeconds(kMinimumAcceptableTimeBetweenGlitchesSecs));
|
| estimator.set_cadence_hysteresis_threshold_for_testing(base::TimeDelta());
|
|
|
| - VerifyCadence(&estimator, 24, 60, 0);
|
| - VerifyCadence(&estimator, NTSC(24), 60, 0);
|
| - VerifyCadence(&estimator, 25, 60, 0);
|
| - VerifyCadence(&estimator, NTSC(30), 60, 2);
|
| - VerifyCadence(&estimator, 30, 60, 2);
|
| - VerifyCadence(&estimator, 50, 60, 0);
|
| - VerifyCadence(&estimator, NTSC(60), 60, 1);
|
| - VerifyCadence(&estimator, 120, 60, 2);
|
| + const std::string kEmptyCadence = "[]";
|
| + VerifyCadenceVector(&estimator, 24, 60, "[3:2]");
|
| + VerifyCadenceVector(&estimator, NTSC(24), 60, "[3:2]");
|
| +
|
| + VerifyCadenceVector(&estimator, 25, 60, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, NTSC(30), 60, "[2]");
|
| + VerifyCadenceVector(&estimator, 30, 60, "[2]");
|
| + VerifyCadenceVector(&estimator, 50, 60, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, NTSC(60), 60, "[1]");
|
| + VerifyCadenceVector(&estimator, 120, 60, "[1:0]");
|
| + VerifyCadenceVector(&estimator, 120, 24, "[1:0:0:0:0]");
|
|
|
| // 50Hz is common in the EU.
|
| - VerifyCadence(&estimator, NTSC(24), 50, 0);
|
| - VerifyCadence(&estimator, 24, 50, 0);
|
| - VerifyCadence(&estimator, NTSC(25), 50, 2);
|
| - VerifyCadence(&estimator, 25, 50, 2);
|
| - VerifyCadence(&estimator, NTSC(30), 50, 0);
|
| - VerifyCadence(&estimator, 30, 50, 0);
|
| - VerifyCadence(&estimator, NTSC(60), 50, 0);
|
| - VerifyCadence(&estimator, 60, 50, 0);
|
| -
|
| - VerifyCadence(&estimator, 25, NTSC(60), 0);
|
| - VerifyCadence(&estimator, 120, NTSC(60), 0);
|
| - VerifyCadence(&estimator, 1, NTSC(60), 60);
|
| + VerifyCadenceVector(&estimator, NTSC(24), 50, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, 24, 50, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, NTSC(25), 50, "[2]");
|
| + VerifyCadenceVector(&estimator, 25, 50, "[2]");
|
| + VerifyCadenceVector(&estimator, NTSC(30), 50, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, 30, 50, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, NTSC(60), 50, kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, 60, 50, kEmptyCadence);
|
| +
|
| + VerifyCadenceVector(&estimator, 25, NTSC(60), kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, 120, NTSC(60), kEmptyCadence);
|
| + VerifyCadenceVector(&estimator, 1, NTSC(60), "[60]");
|
| }
|
|
|
| TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableDrift) {
|
| @@ -101,7 +120,7 @@ TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableDrift) {
|
| EXPECT_TRUE(estimator.UpdateCadenceEstimate(render_interval, frame_interval,
|
| acceptable_drift));
|
| EXPECT_TRUE(estimator.has_cadence());
|
| - EXPECT_EQ(2, estimator.get_cadence_for_testing());
|
| + EXPECT_EQ("[1:0]", estimator.GetCadenceForTesting());
|
| }
|
|
|
| TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableGlitchTime) {
|
| @@ -125,7 +144,7 @@ TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableGlitchTime) {
|
| EXPECT_TRUE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
| - EXPECT_EQ(2, estimator->get_cadence_for_testing());
|
| + EXPECT_EQ("[1:0]", estimator->GetCadenceForTesting());
|
| }
|
|
|
| TEST(VideoCadenceEstimatorTest, CadenceHystersisPreventsOscillation) {
|
|
|