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