| 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 a8a4b5c15cc54efff947930f4a14b5f09f40a9a3..e128dc7d6004b9189b6dc6946f893d9cde61edc7 100644
|
| --- a/media/filters/video_cadence_estimator_unittest.cc
|
| +++ b/media/filters/video_cadence_estimator_unittest.cc
|
| @@ -40,10 +40,11 @@ std::vector<int> CreateCadenceFromString(const std::string& cadence) {
|
| return result;
|
| }
|
|
|
| -static void VerifyCadenceVectorWithCustomDrift(
|
| +static void VerifyCadenceVectorWithCustomDeviationAndDrift(
|
| VideoCadenceEstimator* estimator,
|
| double frame_hertz,
|
| double render_hertz,
|
| + base::TimeDelta deviation,
|
| base::TimeDelta acceptable_drift,
|
| const std::string& expected_cadence) {
|
| SCOPED_TRACE(base::StringPrintf("Checking %.03f fps into %0.03f", frame_hertz,
|
| @@ -54,7 +55,8 @@ static void VerifyCadenceVectorWithCustomDrift(
|
|
|
| estimator->Reset();
|
| const bool cadence_changed = estimator->UpdateCadenceEstimate(
|
| - Interval(render_hertz), Interval(frame_hertz), acceptable_drift);
|
| + Interval(render_hertz), Interval(frame_hertz), deviation,
|
| + acceptable_drift);
|
| EXPECT_EQ(cadence_changed, estimator->has_cadence());
|
| EXPECT_EQ(expected_cadence_vector.empty(), !estimator->has_cadence());
|
|
|
| @@ -72,14 +74,39 @@ static void VerifyCadenceVectorWithCustomDrift(
|
| }
|
| }
|
|
|
| +static void VerifyCadenceVectorWithCustomDrift(
|
| + VideoCadenceEstimator* estimator,
|
| + double frame_hertz,
|
| + double render_hertz,
|
| + base::TimeDelta acceptable_drift,
|
| + const std::string& expected_cadence) {
|
| + VerifyCadenceVectorWithCustomDeviationAndDrift(
|
| + estimator, frame_hertz, render_hertz, base::TimeDelta(), acceptable_drift,
|
| + expected_cadence);
|
| +}
|
| +
|
| +static void VerifyCadenceVectorWithCustomDeviation(
|
| + VideoCadenceEstimator* estimator,
|
| + double frame_hertz,
|
| + double render_hertz,
|
| + base::TimeDelta deviation,
|
| + const std::string& expected_cadence) {
|
| + const base::TimeDelta acceptable_drift =
|
| + std::max(Interval(frame_hertz) / 2, Interval(render_hertz));
|
| + VerifyCadenceVectorWithCustomDeviationAndDrift(
|
| + estimator, frame_hertz, render_hertz, deviation, acceptable_drift,
|
| + expected_cadence);
|
| +}
|
| +
|
| static void VerifyCadenceVector(VideoCadenceEstimator* estimator,
|
| double frame_hertz,
|
| double render_hertz,
|
| const std::string& expected_cadence) {
|
| const base::TimeDelta acceptable_drift =
|
| std::max(Interval(frame_hertz) / 2, Interval(render_hertz));
|
| - VerifyCadenceVectorWithCustomDrift(estimator, frame_hertz, render_hertz,
|
| - acceptable_drift, expected_cadence);
|
| + VerifyCadenceVectorWithCustomDeviationAndDrift(
|
| + estimator, frame_hertz, render_hertz, base::TimeDelta(), acceptable_drift,
|
| + expected_cadence);
|
| }
|
|
|
| // Spot check common display and frame rate pairs for correctness.
|
| @@ -160,6 +187,22 @@ TEST(VideoCadenceEstimatorTest, CadenceCalculationWithLargeDrift) {
|
| VerifyCadenceVectorWithCustomDrift(&estimator, 90, 60, drift, "[1]");
|
| }
|
|
|
| +// Check the case that the estimator excludes variable FPS case from Cadence.
|
| +TEST(VideoCadenceEstimatorTest, CadenceCalculationWithLargeDeviation) {
|
| + VideoCadenceEstimator estimator(
|
| + base::TimeDelta::FromSeconds(kMinimumAcceptableTimeBetweenGlitchesSecs));
|
| + estimator.set_cadence_hysteresis_threshold_for_testing(base::TimeDelta());
|
| +
|
| + const base::TimeDelta deviation = base::TimeDelta::FromMilliseconds(30);
|
| + VerifyCadenceVectorWithCustomDeviation(&estimator, 1, 60, deviation, "[]");
|
| + VerifyCadenceVectorWithCustomDeviation(&estimator, 30, 60, deviation, "[]");
|
| + VerifyCadenceVectorWithCustomDeviation(&estimator, 25, 60, deviation, "[]");
|
| +
|
| + // Test cases for cadence with low refresh rate.
|
| + VerifyCadenceVectorWithCustomDeviation(&estimator, 60, 12, deviation,
|
| + "[1:0:0:0:0]");
|
| +}
|
| +
|
| TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableDrift) {
|
| VideoCadenceEstimator estimator(
|
| base::TimeDelta::FromSeconds(kMinimumAcceptableTimeBetweenGlitchesSecs));
|
| @@ -169,15 +212,15 @@ TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableDrift) {
|
| const base::TimeDelta frame_interval = Interval(120);
|
|
|
| base::TimeDelta acceptable_drift = frame_interval / 2;
|
| - EXPECT_FALSE(estimator.UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_FALSE(estimator.UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_FALSE(estimator.has_cadence());
|
|
|
| // Increasing the acceptable drift should be result in more permissive
|
| // detection of cadence.
|
| acceptable_drift = render_interval;
|
| - EXPECT_TRUE(estimator.UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_TRUE(estimator.UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator.has_cadence());
|
| EXPECT_EQ("[1:0]", estimator.GetCadenceForTesting());
|
| }
|
| @@ -191,8 +234,8 @@ TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableGlitchTime) {
|
| const base::TimeDelta frame_interval = Interval(120);
|
| const base::TimeDelta acceptable_drift = frame_interval / 2;
|
|
|
| - EXPECT_FALSE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_FALSE(estimator->UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_FALSE(estimator->has_cadence());
|
|
|
| // Decreasing the acceptable glitch time should be result in more permissive
|
| @@ -200,8 +243,8 @@ TEST(VideoCadenceEstimatorTest, CadenceVariesWithAcceptableGlitchTime) {
|
| estimator.reset(new VideoCadenceEstimator(base::TimeDelta::FromSeconds(
|
| kMinimumAcceptableTimeBetweenGlitchesSecs / 2)));
|
| estimator->set_cadence_hysteresis_threshold_for_testing(base::TimeDelta());
|
| - EXPECT_TRUE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_TRUE(estimator->UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
| EXPECT_EQ("[1:0]", estimator->GetCadenceForTesting());
|
| }
|
| @@ -216,33 +259,36 @@ TEST(VideoCadenceEstimatorTest, CadenceHystersisPreventsOscillation) {
|
| estimator->set_cadence_hysteresis_threshold_for_testing(render_interval * 2);
|
|
|
| // Cadence hysteresis should prevent the cadence from taking effect yet.
|
| - EXPECT_FALSE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_FALSE(estimator->UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_FALSE(estimator->has_cadence());
|
|
|
| // A second call should exceed cadence hysteresis and take into effect.
|
| - EXPECT_TRUE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_TRUE(estimator->UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
|
|
| // One bad interval shouldn't cause cadence to drop
|
| - EXPECT_FALSE(estimator->UpdateCadenceEstimate(
|
| - render_interval, frame_interval * 0.75, acceptable_drift));
|
| + EXPECT_FALSE(
|
| + estimator->UpdateCadenceEstimate(render_interval, frame_interval * 0.75,
|
| + base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
|
|
| // Resumption of cadence should clear bad interval count.
|
| - EXPECT_FALSE(estimator->UpdateCadenceEstimate(render_interval, frame_interval,
|
| - acceptable_drift));
|
| + EXPECT_FALSE(estimator->UpdateCadenceEstimate(
|
| + render_interval, frame_interval, base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
|
|
| // So one more bad interval shouldn't cause cadence to drop
|
| - EXPECT_FALSE(estimator->UpdateCadenceEstimate(
|
| - render_interval, frame_interval * 0.75, acceptable_drift));
|
| + EXPECT_FALSE(
|
| + estimator->UpdateCadenceEstimate(render_interval, frame_interval * 0.75,
|
| + base::TimeDelta(), acceptable_drift));
|
| EXPECT_TRUE(estimator->has_cadence());
|
|
|
| // Two bad intervals should.
|
| - EXPECT_TRUE(estimator->UpdateCadenceEstimate(
|
| - render_interval, frame_interval * 0.75, acceptable_drift));
|
| + EXPECT_TRUE(
|
| + estimator->UpdateCadenceEstimate(render_interval, frame_interval * 0.75,
|
| + base::TimeDelta(), acceptable_drift));
|
| EXPECT_FALSE(estimator->has_cadence());
|
| }
|
|
|
|
|