rtc: Fix multi-threading settings for SVC datarate tests Pass in tile_column_ and tile_row_ from each test with multi-threading. This fixes the 4 thread test case where the intention was to use 2x2 (tile_col x tile_row) config, the current test was not doing that. Also a add test for (1SL, 2TL) with 4 threads for more coverage. Change-Id: I910f290ad3705cfcee8b9a874e13e911243a3f54
diff --git a/test/datarate_test.cc b/test/datarate_test.cc index a75a72f..9b73f79 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc
@@ -162,7 +162,7 @@ const int bitrate_array[2] = { 250, 650 }; cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; ResetModel(); - tile_column_ = 2; + tile_columns_ = 2; ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); ASSERT_GE(static_cast<double>(cfg_.rc_target_bitrate), effective_datarate_ * 0.85) @@ -354,7 +354,7 @@ const int bitrate_array[2] = { 250, 650 }; cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; ResetModel(); - tile_column_ = 1; + tile_columns_ = 1; ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); ASSERT_GE(static_cast<double>(cfg_.rc_target_bitrate), effective_datarate_ * 0.85)
diff --git a/test/datarate_test.h b/test/datarate_test.h index accc1ad..869c221 100644 --- a/test/datarate_test.h +++ b/test/datarate_test.h
@@ -42,7 +42,8 @@ bits_total_ = 0; denoiser_offon_test_ = 0; denoiser_offon_period_ = -1; - tile_column_ = 0; + tile_columns_ = 0; + tile_rows_ = 0; screen_mode_ = false; max_perc_spike_ = 1.0; max_perc_spike_high_ = 1.0; @@ -62,7 +63,8 @@ if (video->frame() == 0) { encoder->Control(AOME_SET_CPUUSED, set_cpu_used_); encoder->Control(AV1E_SET_AQ_MODE, aq_mode_); - encoder->Control(AV1E_SET_TILE_COLUMNS, tile_column_); + encoder->Control(AV1E_SET_TILE_COLUMNS, tile_columns_); + encoder->Control(AV1E_SET_TILE_ROWS, tile_rows_); encoder->Control(AV1E_SET_ROW_MT, 1); if (cfg_.g_usage == AOM_USAGE_REALTIME) { encoder->Control(AV1E_SET_ENABLE_GLOBAL_MOTION, 0); @@ -203,7 +205,8 @@ int denoiser_offon_period_; unsigned int aq_mode_; bool speed_change_test_; - int tile_column_; + int tile_columns_; + int tile_rows_; bool screen_mode_; double max_perc_spike_; double max_perc_spike_high_;
diff --git a/test/svc_datarate_test.cc b/test/svc_datarate_test.cc index 28f795c..16fbb0b 100644 --- a/test/svc_datarate_test.cc +++ b/test/svc_datarate_test.cc
@@ -118,15 +118,8 @@ encoder->Control(AV1E_SET_ENABLE_TPL_MODEL, 0); encoder->Control(AV1E_SET_DELTAQ_MODE, 0); if (cfg_.g_threads > 1) { - if (cfg_.g_threads == 4) { - encoder->Control(AV1E_SET_TILE_COLUMNS, 2); - encoder->Control(AV1E_SET_TILE_ROWS, 2); - } else if (cfg_.g_threads == 8) { - encoder->Control(AV1E_SET_TILE_COLUMNS, 4); - encoder->Control(AV1E_SET_TILE_ROWS, 2); - } else { - encoder->Control(AV1E_SET_TILE_COLUMNS, cfg_.g_threads >> 1); - } + encoder->Control(AV1E_SET_TILE_COLUMNS, tile_columns_); + encoder->Control(AV1E_SET_TILE_ROWS, tile_rows_); encoder->Control(AV1E_SET_ROW_MT, 1); } if (screen_mode_) { @@ -1575,6 +1568,8 @@ const int bitrate_array[2] = { 600, 1200 }; cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; ResetModel(); + tile_columns_ = 1; + tile_rows_ = 0; set_speed_per_layer_ = true; number_temporal_layers_ = 3; number_spatial_layers_ = 3; @@ -1618,6 +1613,8 @@ const int bitrate_array[2] = { 600, 1200 }; cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; ResetModel(); + tile_columns_ = 1; + tile_rows_ = 0; number_temporal_layers_ = 3; number_spatial_layers_ = 3; // SL0 @@ -1644,6 +1641,37 @@ } } + virtual void BasicRateTargetingSVC2TL1SLHDMultiThread4Test() { + cfg_.rc_buf_initial_sz = 500; + cfg_.rc_buf_optimal_sz = 500; + cfg_.rc_buf_sz = 1000; + cfg_.rc_dropframe_thresh = 0; + cfg_.rc_min_quantizer = 0; + cfg_.rc_max_quantizer = 63; + cfg_.rc_end_usage = AOM_CBR; + cfg_.g_lag_in_frames = 0; + cfg_.g_error_resilient = 0; + cfg_.g_threads = 4; + + ::libaom_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60); + const int bitrate_array[2] = { 600, 1200 }; + cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; + ResetModel(); + tile_columns_ = 1; + tile_rows_ = 1; + number_temporal_layers_ = 2; + number_spatial_layers_ = 1; + target_layer_bitrate_[0] = 60 * cfg_.rc_target_bitrate / 100; + target_layer_bitrate_[1] = cfg_.rc_target_bitrate; + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); + for (int i = 0; i < number_temporal_layers_ * number_spatial_layers_; i++) { + ASSERT_GE(effective_datarate_tl[i], target_layer_bitrate_[i] * 0.70) + << " The datarate for the file is lower than target by too much!"; + ASSERT_LE(effective_datarate_tl[i], target_layer_bitrate_[i] * 1.45) + << " The datarate for the file is greater than target by too much!"; + } + } + virtual void BasicRateTargetingSVC3TL3SLHDMultiThread4Test() { cfg_.rc_buf_initial_sz = 500; cfg_.rc_buf_optimal_sz = 500; @@ -1660,6 +1688,8 @@ const int bitrate_array[2] = { 600, 1200 }; cfg_.rc_target_bitrate = bitrate_array[GET_PARAM(4)]; ResetModel(); + tile_columns_ = 1; + tile_rows_ = 1; number_temporal_layers_ = 3; number_spatial_layers_ = 3; // SL0 @@ -2504,8 +2534,15 @@ TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHDMultiThread2) { BasicRateTargetingSVC3TL3SLHDMultiThread2Test(); } + +// Check basic rate targeting for CBR, for 1 spatial, 2 temporal layers, +// for 4 threads, 2 tile_columns, 2 tiles_rows, row-mt enabled. +TEST_P(DatarateTestSVC, BasicRateTargetingSVC2TL1SLHDMultiThread4) { + BasicRateTargetingSVC2TL1SLHDMultiThread4Test(); +} + // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, -// for 4 threads, 4 tile_columns, row-mt enabled. +// for 4 threads, 2 tile_columns, 2 tiles_rows, row-mt enabled. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHDMultiThread4) { BasicRateTargetingSVC3TL3SLHDMultiThread4Test(); }