diff options
Diffstat (limited to 'test/datarate_test.cc')
-rw-r--r-- | test/datarate_test.cc | 68 |
1 files changed, 44 insertions, 24 deletions
diff --git a/test/datarate_test.cc b/test/datarate_test.cc index ff149671e..ba3c53617 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -1369,6 +1369,7 @@ class DatarateOnePassCbrSvc superframe_count_ = -1; key_frame_spacing_ = 9999; num_nonref_frames_ = 0; + constrained_framedrop_ = 0; } virtual void BeginPassHook(unsigned int /*pass*/) {} @@ -1451,6 +1452,14 @@ class DatarateOnePassCbrSvc encoder->Control(VP9E_SET_ROW_MT, 1); encoder->Control(VP8E_SET_STATIC_THRESHOLD, 1); encoder->Control(VP9E_SET_TUNE_CONTENT, tune_content_); + + if (constrained_framedrop_) { + vpx_svc_frame_drop_t svc_drop_frame; + svc_drop_frame.framedrop_mode = 1; + for (i = 0; i < number_spatial_layers_; i++) + svc_drop_frame.framedrop_thresh[i] = 30; + encoder->Control(VP9E_SET_SVC_FRAME_DROP_LAYER, &svc_drop_frame); + } } superframe_count_++; @@ -1695,6 +1704,7 @@ class DatarateOnePassCbrSvc int superframe_count_; int key_frame_spacing_; unsigned int num_nonref_frames_; + int constrained_framedrop_; }; // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 1 @@ -1926,20 +1936,25 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL4Threads) { ::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60); top_sl_width_ = 1280; top_sl_height_ = 720; - for (int i = 200; i <= 800; i += 300) { - cfg_.rc_target_bitrate = i; - ResetModel(); - assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers, - cfg_.ts_number_layers, cfg_.temporal_layering_mode, - layer_target_avg_bandwidth_, bits_in_buffer_model_); - ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); - CheckLayerRateTargeting(&cfg_, number_spatial_layers_, - number_temporal_layers_, file_datarate_, 0.75, 1.2); + constrained_framedrop_ = 0; + for (int k = 0; k < 2; k++) { + for (int i = 200; i <= 600; i += 200) { + cfg_.rc_target_bitrate = i; + ResetModel(); + constrained_framedrop_ = k; + assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers, + cfg_.ts_number_layers, cfg_.temporal_layering_mode, + layer_target_avg_bandwidth_, bits_in_buffer_model_); + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + CheckLayerRateTargeting(&cfg_, number_spatial_layers_, + number_temporal_layers_, file_datarate_, 0.75, + 1.2); #if CONFIG_VP9_DECODER - // The non-reference frames are expected to be mismatched frames as the - // encoder will avoid loopfilter on these frames. - EXPECT_EQ(num_nonref_frames_, GetMismatchFrames()); + // The non-reference frames are expected to be mismatched frames as the + // encoder will avoid loopfilter on these frames. + EXPECT_EQ(num_nonref_frames_, GetMismatchFrames()); #endif + } } } @@ -2222,20 +2237,25 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL4Threads) { ::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60); top_sl_width_ = 1280; top_sl_height_ = 720; - for (int i = 200; i <= 800; i += 300) { - cfg_.rc_target_bitrate = i; - ResetModel(); - assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers, - cfg_.ts_number_layers, cfg_.temporal_layering_mode, - layer_target_avg_bandwidth_, bits_in_buffer_model_); - ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); - CheckLayerRateTargeting(&cfg_, number_spatial_layers_, - number_temporal_layers_, file_datarate_, 0.73, 1.2); + constrained_framedrop_ = 0; + for (int k = 0; k < 2; k++) { + for (int i = 200; i <= 600; i += 200) { + cfg_.rc_target_bitrate = i; + ResetModel(); + constrained_framedrop_ = k; + assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers, + cfg_.ts_number_layers, cfg_.temporal_layering_mode, + layer_target_avg_bandwidth_, bits_in_buffer_model_); + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + CheckLayerRateTargeting(&cfg_, number_spatial_layers_, + number_temporal_layers_, file_datarate_, 0.73, + 1.2); #if CONFIG_VP9_DECODER - // The non-reference frames are expected to be mismatched frames as the - // encoder will avoid loopfilter on these frames. - EXPECT_EQ(num_nonref_frames_, GetMismatchFrames()); + // The non-reference frames are expected to be mismatched frames as the + // encoder will avoid loopfilter on these frames. + EXPECT_EQ(num_nonref_frames_, GetMismatchFrames()); #endif + } } } |