diff options
author | JackyChen <jackychen@google.com> | 2015-01-08 13:10:50 -0800 |
---|---|---|
committer | JackyChen <jackychen@google.com> | 2015-01-09 14:51:06 -0800 |
commit | 7cb111b148e6c6e1a8266716e358e73cabb79081 (patch) | |
tree | 0e7e7d4567433d65e8d88d1ba61c22b6864d7e49 /test/datarate_test.cc | |
parent | e535ad50672e3e9c2c874eec38adbe9dc4e4ed99 (diff) | |
download | libvpx-7cb111b148e6c6e1a8266716e358e73cabb79081.tar libvpx-7cb111b148e6c6e1a8266716e358e73cabb79081.tar.gz libvpx-7cb111b148e6c6e1a8266716e358e73cabb79081.tar.bz2 libvpx-7cb111b148e6c6e1a8266716e358e73cabb79081.zip |
Unit test for turning VP8 denoiser on/off periodically.
Change-Id: Id537d1126f25c0218adcfb4d6ee641ee81a2169a
Diffstat (limited to 'test/datarate_test.cc')
-rw-r--r-- | test/datarate_test.cc | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/test/datarate_test.cc b/test/datarate_test.cc index 573870e91..e52934771 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -38,6 +38,8 @@ class DatarateTestLarge : public ::libvpx_test::EncoderTest, first_drop_ = 0; bits_total_ = 0; duration_ = 0.0; + denoiser_offon_test_ = 0; + denoiser_offon_period_ = -1; } virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video, @@ -45,6 +47,17 @@ class DatarateTestLarge : public ::libvpx_test::EncoderTest, if (video->frame() == 1) { encoder->Control(VP8E_SET_NOISE_SENSITIVITY, denoiser_on_); } + + if (denoiser_offon_test_) { + ASSERT_GT(denoiser_offon_period_, 0) + << "denoiser_offon_period_ is not positive."; + if ((video->frame() + 1) % denoiser_offon_period_ == 0) { + // Flip denoiser_on_ periodically + denoiser_on_ ^= 1; + } + encoder->Control(VP8E_SET_NOISE_SENSITIVITY, denoiser_on_); + } + const vpx_rational_t tb = video->timebase(); timebase_ = static_cast<double>(tb.num) / tb.den; duration_ = 0; @@ -124,6 +137,8 @@ class DatarateTestLarge : public ::libvpx_test::EncoderTest, double effective_datarate_; size_t bits_in_last_frame_; int denoiser_on_; + int denoiser_offon_test_; + int denoiser_offon_period_; }; #if CONFIG_TEMPORAL_DENOISING @@ -155,6 +170,29 @@ TEST_P(DatarateTestLarge, DenoiserLevels) { << " The datarate for the file missed the target!"; } } + +// Check basic datarate targeting, for a single bitrate, when denoiser is off +// and on. +TEST_P(DatarateTestLarge, DenoiserOffOn) { + cfg_.rc_buf_initial_sz = 500; + cfg_.rc_dropframe_thresh = 1; + cfg_.rc_max_quantizer = 56; + cfg_.rc_end_usage = VPX_CBR; + ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, + 30, 1, 0, 299); + cfg_.rc_target_bitrate = 300; + ResetModel(); + // The denoiser is off by default. + denoiser_on_ = 0; + // Set the offon test flag. + denoiser_offon_test_ = 1; + denoiser_offon_period_ = 100; + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + ASSERT_GE(cfg_.rc_target_bitrate, effective_datarate_ * 0.95) + << " The datarate for the file exceeds the target!"; + ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.3) + << " The datarate for the file missed the target!"; +} #endif // CONFIG_TEMPORAL_DENOISING TEST_P(DatarateTestLarge, BasicBufferModel) { @@ -669,7 +707,7 @@ TEST_P(DatarateTestVP9Large, DenoiserLevels) { // Check basic datarate targeting, for a single bitrate, when denoiser is off // and on. -TEST_P(DatarateTestVP9Large, DenoiserOffon) { +TEST_P(DatarateTestVP9Large, DenoiserOffOn) { cfg_.rc_buf_initial_sz = 500; cfg_.rc_buf_optimal_sz = 500; cfg_.rc_buf_sz = 1000; |