From a86e6e8358ea4e461a0ff4f47ea4605a5d5e9d25 Mon Sep 17 00:00:00 2001 From: JackyChen Date: Wed, 17 Sep 2014 13:54:48 -0700 Subject: [PATCH] Add unit test for VP9 denoiser. Check basic datarate targeting for a single bitrate when the denoiser is on. Change-Id: Iad0e664859ffeb4ae6dd5f6dfb71a121e917e3fb --- test/datarate_test.cc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/datarate_test.cc b/test/datarate_test.cc index a3d730a95..5c2cad832 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -238,6 +238,8 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest, tot_frame_number_ = 0; first_drop_ = 0; num_drops_ = 0; + // Denoiser is off by default. + denoiser_on_ = 0; // For testing up to 3 layers. for (int i = 0; i < 3; ++i) { bits_total_[i] = 0; @@ -311,6 +313,7 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest, ::libvpx_test::Encoder *encoder) { if (video->frame() == 1) { encoder->Control(VP8E_SET_CPUUSED, set_cpu_used_); + encoder->Control(VP9E_SET_NOISE_SENSITIVITY, denoiser_on_); } if (cfg_.ts_number_layers > 1) { if (video->frame() == 1) { @@ -392,6 +395,7 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest, int64_t bits_in_buffer_model_; vpx_codec_pts_t first_drop_; int num_drops_; + int denoiser_on_; }; // Check basic rate targeting, @@ -615,6 +619,36 @@ TEST_P(DatarateTestVP9Large, BasicRateTargeting3TemporalLayersFrameDropping) { } } +#if CONFIG_VP9_TEMPORAL_DENOISING +// Check basic datarate targeting, for a single bitrate, when denoiser is on. +TEST_P(DatarateTestVP9Large, DenoiserLevels) { + 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 = 2; + cfg_.rc_max_quantizer = 56; + cfg_.rc_end_usage = VPX_CBR; + cfg_.g_lag_in_frames = 0; + + ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, + 30, 1, 0, 140); + + // For the temporal denoiser (#if CONFIG_VP9_TEMPORAL_DENOISING), + // there is only one denoiser mode: denoiserYonly(which is 1), + // but may add more modes in the future. + cfg_.rc_target_bitrate = 300; + ResetModel(); + // Turn on the denoiser. + denoiser_on_ = 1; + 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!"; +} +#endif + VP8_INSTANTIATE_TEST_CASE(DatarateTestLarge, ALL_TEST_MODES); VP9_INSTANTIATE_TEST_CASE(DatarateTestVP9Large, ::testing::Values(::libvpx_test::kOnePassGood, -- 2.40.0