Add datarate test to change speed on the fly. Change-Id: Ic1532c5c8040e1722aad099c7dda779ffe50f1c9
diff --git a/test/datarate_test.cc b/test/datarate_test.cc index eff777d..d6c8c00 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc
@@ -237,6 +237,55 @@ class DatarateTestFrameDropRealtime : public DatarateTestFrameDropLarge {}; +// Params: aq mode. +class DatarateTestSpeedChangeRealtime + : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, + unsigned int>, + public DatarateTest { + public: + DatarateTestSpeedChangeRealtime() : DatarateTest(GET_PARAM(0)) { + aq_mode_ = GET_PARAM(1); + speed_change_test_ = true; + } + + protected: + virtual ~DatarateTestSpeedChangeRealtime() {} + + virtual void SetUp() { + InitializeConfig(); + SetMode(GET_PARAM(1)); + ResetModel(); + } + + virtual void ChangingSpeedTest() { + cfg_.rc_buf_initial_sz = 500; + cfg_.rc_buf_optimal_sz = 500; + cfg_.rc_buf_sz = 1000; + cfg_.rc_undershoot_pct = 20; + cfg_.rc_undershoot_pct = 20; + cfg_.rc_dropframe_thresh = 10; + cfg_.rc_min_quantizer = 0; + cfg_.rc_max_quantizer = 50; + cfg_.rc_end_usage = AOM_CBR; + cfg_.rc_target_bitrate = 200; + cfg_.g_lag_in_frames = 0; + cfg_.g_error_resilient = 1; + // TODO(marpan): Investigate datarate target failures with a smaller + // keyframe interval (128). + cfg_.kf_max_dist = 9999; + cfg_.rc_dropframe_thresh = 0; + ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, + 288, 30, 1, 0, 100); + + ResetModel(); + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + ASSERT_GE(effective_datarate_, cfg_.rc_target_bitrate * 0.85) + << " The datarate for the file is lower than target by too much!"; + ASSERT_LE(effective_datarate_, cfg_.rc_target_bitrate * 1.16) + << " The datarate for the file is greater than target by too much!"; + } +}; + // Check basic rate targeting for VBR mode. TEST_P(DatarateTestRealtime, BasicRateTargetingVBR) { BasicRateTargetingVBRTest(); @@ -260,6 +309,10 @@ ChangingDropFrameThreshTest(); } +TEST_P(DatarateTestSpeedChangeRealtime, ChangingSpeedTest) { + ChangingSpeedTest(); +} + AV1_INSTANTIATE_TEST_CASE(DatarateTestLarge, ::testing::Values(::libaom_test::kRealTime), ::testing::Range(5, 7), ::testing::Values(0, 3), @@ -278,5 +331,9 @@ ::testing::Values(::libaom_test::kRealTime), ::testing::Range(7, 9), ::testing::Values(0, 3)); +AV1_INSTANTIATE_TEST_CASE(DatarateTestSpeedChangeRealtime, + ::testing::Values(::libaom_test::kRealTime), + ::testing::Values(0, 3)); + } // namespace } // namespace datarate_test
diff --git a/test/datarate_test.h b/test/datarate_test.h index 388915f..3c15731 100644 --- a/test/datarate_test.h +++ b/test/datarate_test.h
@@ -24,7 +24,8 @@ class DatarateTest : public ::libaom_test::EncoderTest { public: explicit DatarateTest(const ::libaom_test::CodecFactory *codec) - : EncoderTest(codec) {} + : EncoderTest(codec), set_cpu_used_(0), aq_mode_(0), + speed_change_test_(false) {} protected: virtual ~DatarateTest() {} @@ -64,6 +65,21 @@ } } + if (speed_change_test_) { + if (video->frame() == 0) { + encoder->Control(AOME_SET_CPUUSED, 8); + } + if (video->frame() == 30) { + encoder->Control(AOME_SET_CPUUSED, 7); + } + if (video->frame() == 60) { + encoder->Control(AOME_SET_CPUUSED, 6); + } + if (video->frame() == 90) { + encoder->Control(AOME_SET_CPUUSED, 7); + } + } + if (denoiser_offon_test_) { ASSERT_GT(denoiser_offon_period_, 0) << "denoiser_offon_period_ is not positive."; @@ -134,6 +150,7 @@ int denoiser_offon_test_; int denoiser_offon_period_; unsigned int aq_mode_; + bool speed_change_test_; }; } // namespace