From ad31fe36a827ce50b90359c754d1f52b0a0f0dfb Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 15 Sep 2017 11:35:53 -0700 Subject: [PATCH] Add datarate test for frame_parallel_decoding mode off. Add datarate test, for both VBR and CBR mode, with the frame_parallel_decoding mode disabled (and error_resilience off). Change-Id: I54feec3248a68ecff4bef8d9a31bb1616fab77df --- test/datarate_test.cc | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/datarate_test.cc b/test/datarate_test.cc index 1d54a6c0c..3229b69f3 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -468,6 +468,7 @@ class DatarateTestVP9Large } denoiser_offon_test_ = 0; denoiser_offon_period_ = -1; + frame_parallel_decoding_mode_ = 1; } // @@ -547,6 +548,8 @@ class DatarateTestVP9Large encoder->Control(VP9E_SET_NOISE_SENSITIVITY, denoiser_on_); encoder->Control(VP9E_SET_TILE_COLUMNS, (cfg_.g_threads >> 1)); + encoder->Control(VP9E_SET_FRAME_PARALLEL_DECODING, + frame_parallel_decoding_mode_); if (cfg_.ts_number_layers > 1) { if (video->frame() == 0) { @@ -627,6 +630,7 @@ class DatarateTestVP9Large int denoiser_on_; int denoiser_offon_test_; int denoiser_offon_period_; + int frame_parallel_decoding_mode_; }; // Check basic rate targeting for VBR mode with 0 lag. @@ -677,6 +681,36 @@ TEST_P(DatarateTestVP9Large, BasicRateTargetingVBRLagNonZero) { } } +// Check basic rate targeting for VBR mode with non-zero lag, with +// frame_parallel_decoding_mode off. This enables the adapt_coeff/mode/mv probs +// since error_resilience is off. +TEST_P(DatarateTestVP9Large, BasicRateTargetingVBRLagNonZeroFrameParDecOff) { + cfg_.rc_min_quantizer = 0; + cfg_.rc_max_quantizer = 63; + cfg_.g_error_resilient = 0; + cfg_.rc_end_usage = VPX_VBR; + // For non-zero lag, rate control will work (be within bounds) for + // real-time mode. + if (deadline_ == VPX_DL_REALTIME) { + cfg_.g_lag_in_frames = 15; + } else { + cfg_.g_lag_in_frames = 0; + } + + ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, + 30, 1, 0, 300); + for (int i = 400; i <= 800; i += 400) { + cfg_.rc_target_bitrate = i; + ResetModel(); + frame_parallel_decoding_mode_ = 0; + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + ASSERT_GE(effective_datarate_[0], cfg_.rc_target_bitrate * 0.75) + << " The datarate for the file is lower than target by too much!"; + ASSERT_LE(effective_datarate_[0], cfg_.rc_target_bitrate * 1.25) + << " The datarate for the file is greater than target by too much!"; + } +} + // Check basic rate targeting for CBR mode. TEST_P(DatarateTestVP9Large, BasicRateTargeting) { cfg_.rc_buf_initial_sz = 500; @@ -701,6 +735,33 @@ TEST_P(DatarateTestVP9Large, BasicRateTargeting) { } } +// Check basic rate targeting for CBR mode, with frame_parallel_decoding_mode +// off( and error_resilience off). +TEST_P(DatarateTestVP9Large, BasicRateTargetingFrameParDecOff) { + cfg_.rc_buf_initial_sz = 500; + cfg_.rc_buf_optimal_sz = 500; + cfg_.rc_buf_sz = 1000; + cfg_.rc_dropframe_thresh = 1; + cfg_.rc_min_quantizer = 0; + cfg_.rc_max_quantizer = 63; + cfg_.rc_end_usage = VPX_CBR; + cfg_.g_lag_in_frames = 0; + cfg_.g_error_resilient = 0; + + ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, + 30, 1, 0, 140); + for (int i = 150; i < 800; i += 200) { + cfg_.rc_target_bitrate = i; + ResetModel(); + frame_parallel_decoding_mode_ = 0; + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + ASSERT_GE(effective_datarate_[0], cfg_.rc_target_bitrate * 0.85) + << " The datarate for the file is lower than target by too much!"; + ASSERT_LE(effective_datarate_[0], cfg_.rc_target_bitrate * 1.15) + << " The datarate for the file is greater than target by too much!"; + } +} + // Check basic rate targeting for CBR mode, with 2 threads and dropped frames. TEST_P(DatarateTestVP9Large, BasicRateTargetingDropFramesMultiThreads) { cfg_.rc_buf_initial_sz = 500; -- 2.40.0