summaryrefslogtreecommitdiff
path: root/test/datarate_test.cc
diff options
context:
space:
mode:
authorMarco <marpan@google.com>2016-03-08 10:34:43 -0800
committerMarco <marpan@google.com>2016-03-08 10:36:16 -0800
commitb5ab8812b53ff23bec224464c007181d7fd7f6ef (patch)
tree01a7985524b376360da58ef8145b37639da62617 /test/datarate_test.cc
parentb9cb955cf07e834a126613a31c3b90f6e07dc39a (diff)
downloadlibvpx-b5ab8812b53ff23bec224464c007181d7fd7f6ef.tar
libvpx-b5ab8812b53ff23bec224464c007181d7fd7f6ef.tar.gz
libvpx-b5ab8812b53ff23bec224464c007181d7fd7f6ef.tar.bz2
libvpx-b5ab8812b53ff23bec224464c007181d7fd7f6ef.zip
vp9-svc unitests: Add more tests for key frame periods.
Change-Id: Iea237760b508d87dab057dd824e26d2e66fa8433
Diffstat (limited to 'test/datarate_test.cc')
-rw-r--r--test/datarate_test.cc44
1 files changed, 24 insertions, 20 deletions
diff --git a/test/datarate_test.cc b/test/datarate_test.cc
index c0796dff3..4f1606186 100644
--- a/test/datarate_test.cc
+++ b/test/datarate_test.cc
@@ -920,9 +920,9 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayers) {
}
}
-// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and
-// 3 temporal layers. Run CIF clip with 1 thread. Use short key frame period.
-TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayersSmallKf_dist) {
+// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 3
+// temporal layers. Run CIF clip with 1 thread, and few short key frame periods.
+TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayersSmallKf) {
cfg_.rc_buf_initial_sz = 500;
cfg_.rc_buf_optimal_sz = 500;
cfg_.rc_buf_sz = 1000;
@@ -943,13 +943,13 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayersSmallKf_dist) {
svc_params_.scaling_factor_num[1] = 288;
svc_params_.scaling_factor_den[1] = 288;
cfg_.rc_dropframe_thresh = 10;
- cfg_.kf_max_dist = 64;
::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
30, 1, 0, 200);
- // TODO(wonkap/marpan): Check that effective_datarate for each layer hits the
- // layer target_bitrate. Also check if test can pass at lower bitrate (~200k).
- for (int i = 400; i <= 800; i += 200) {
- cfg_.rc_target_bitrate = i;
+ cfg_.rc_target_bitrate = 400;
+ // For this 3 temporal layer case, pattern repeats every 4 frames, so choose
+ // 4 key neighboring key frame periods (so key frame will land on 0-2-1-2).
+ for (int j = 64; j <= 67; j++) {
+ cfg_.kf_max_dist = j;
ResetModel();
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
@@ -1040,8 +1040,8 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayers) {
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
}
-// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and
-// 3 temporal layers. Run CIF clip with 1 thread. Use short key frame period.
+// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3
+// temporal layers. Run CIF clip with 1 thread, and few short key frame periods.
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayersSmallKf) {
cfg_.rc_buf_initial_sz = 500;
cfg_.rc_buf_optimal_sz = 500;
@@ -1065,19 +1065,23 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayersSmallKf) {
svc_params_.scaling_factor_num[2] = 288;
svc_params_.scaling_factor_den[2] = 288;
cfg_.rc_dropframe_thresh = 10;
- cfg_.kf_max_dist = 32;
::libvpx_test::I420VideoSource video("niklas_1280_720_30.y4m", 1280, 720,
30, 1, 0, 300);
cfg_.rc_target_bitrate = 800;
- ResetModel();
- assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
- cfg_.ts_number_layers, cfg_.temporal_layering_mode);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
- << " The datarate for the file exceeds the target by too much!";
- ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.30)
- << " The datarate for the file is lower than the target by too much!";
- EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
+ // For this 3 temporal layer case, pattern repeats every 4 frames, so choose
+ // 4 key neighboring key frame periods (so key frame will land on 0-2-1-2).
+ for (int j = 32; j <= 35; j++) {
+ cfg_.kf_max_dist = j;
+ ResetModel();
+ assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
+ cfg_.ts_number_layers, cfg_.temporal_layering_mode);
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+ ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
+ << " The datarate for the file exceeds the target by too much!";
+ ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.30)
+ << " The datarate for the file is lower than the target by too much!";
+ EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
+ }
}
// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and