summaryrefslogtreecommitdiff
path: root/test/datarate_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/datarate_test.cc')
-rw-r--r--test/datarate_test.cc68
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
+ }
}
}