Revert "vp9: Avoid encoder loopfilter for non-reference frames."
This reverts commit 863f860bfcf3bdc26eeecb299aa481d0f63d11ac. This causes encoder / decoder mismatches in various VP9/DatarateTestVP9Large.BasicRateTargeting3TemporalLayers tests BUG=webm:1408 Change-Id: Ic200c39d7ed9c0b0247ef562f5d6f7b2625f7e14
This commit is contained in:
parent
b937f1c839
commit
e9b7f98c56
@ -1221,10 +1221,9 @@ static void assign_layer_bitrates(vpx_codec_enc_cfg_t *const enc_cfg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 1
|
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 1temporal
|
||||||
// temporal layer, with screen content mode on and same speed setting for all
|
// layer, with screen content mode on and same speed setting for all layers.
|
||||||
// layers.
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2patialLayersScreenContent1) {
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL1TLScreenContent1) {
|
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1242,7 +1241,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL1TLScreenContent1) {
|
|||||||
svc_params_.scaling_factor_den[0] = 288;
|
svc_params_.scaling_factor_den[0] = 288;
|
||||||
svc_params_.scaling_factor_num[1] = 288;
|
svc_params_.scaling_factor_num[1] = 288;
|
||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 10;
|
cfg_.rc_dropframe_thresh = 0;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
||||||
cfg_.rc_target_bitrate = 500;
|
cfg_.rc_target_bitrate = 500;
|
||||||
@ -1257,7 +1256,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL1TLScreenContent1) {
|
|||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and
|
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and
|
||||||
// 3 temporal layers. Run CIF clip with 1 thread.
|
// 3 temporal layers. Run CIF clip with 1 thread.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayers) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1277,7 +1276,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL) {
|
|||||||
svc_params_.scaling_factor_den[0] = 288;
|
svc_params_.scaling_factor_den[0] = 288;
|
||||||
svc_params_.scaling_factor_num[1] = 288;
|
svc_params_.scaling_factor_num[1] = 288;
|
||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 0;
|
cfg_.rc_dropframe_thresh = 10;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
|
::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
|
||||||
30, 1, 0, 200);
|
30, 1, 0, 200);
|
||||||
@ -1289,21 +1288,17 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL) {
|
|||||||
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
||||||
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
||||||
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
||||||
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.82)
|
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
|
||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " The datarate for the file is lower than the target by too much!";
|
||||||
// Number of temporal layers > 1, so half of the frames in this SVC pattern
|
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
|
||||||
// will be non-reference frame and hence encoder will avoid loopfilter.
|
|
||||||
// Since frame dropper is off, we can expcet 100 (half of the sequence)
|
|
||||||
// mismatched frames.
|
|
||||||
EXPECT_EQ(static_cast<unsigned int>(100), GetMismatchFrames());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC with denoising.
|
// Check basic rate targeting for 1 pass CBR SVC with denoising.
|
||||||
// 2 spatial layers and 3 temporal layer. Run HD clip with 2 threads.
|
// 2 spatial layers and 3 temporal layer. Run HD clip with 2 threads.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TLDenoiserOn) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayersDenoiserOn) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1323,7 +1318,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TLDenoiserOn) {
|
|||||||
svc_params_.scaling_factor_den[0] = 288;
|
svc_params_.scaling_factor_den[0] = 288;
|
||||||
svc_params_.scaling_factor_num[1] = 288;
|
svc_params_.scaling_factor_num[1] = 288;
|
||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 0;
|
cfg_.rc_dropframe_thresh = 10;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
||||||
// TODO(marpan): Check that effective_datarate for each layer hits the
|
// TODO(marpan): Check that effective_datarate for each layer hits the
|
||||||
@ -1335,21 +1330,17 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TLDenoiserOn) {
|
|||||||
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
||||||
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
||||||
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
||||||
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.82)
|
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
|
||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " The datarate for the file is lower than the target by too much!";
|
||||||
// Number of temporal layers > 1, so half of the frames in this SVC pattern
|
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
|
||||||
// will be non-reference frame and hence encoder will avoid loopfilter.
|
|
||||||
// Since frame dropper is off, we can expcet 150 (half of the sequence)
|
|
||||||
// mismatched frames.
|
|
||||||
EXPECT_EQ(static_cast<unsigned int>(150), GetMismatchFrames());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 3
|
// 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.
|
// temporal layers. Run CIF clip with 1 thread, and few short key frame periods.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TLSmallKf) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayersSmallKf) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1385,12 +1376,13 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TLSmallKf) {
|
|||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " 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: 2 spatial layers and
|
// Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and
|
||||||
// 3 temporal layers. Run HD clip with 4 threads.
|
// 3 temporal layers. Run HD clip with 4 threads.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL4threads) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayers4threads) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1410,7 +1402,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL4threads) {
|
|||||||
svc_params_.scaling_factor_den[0] = 288;
|
svc_params_.scaling_factor_den[0] = 288;
|
||||||
svc_params_.scaling_factor_num[1] = 288;
|
svc_params_.scaling_factor_num[1] = 288;
|
||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 0;
|
cfg_.rc_dropframe_thresh = 10;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
||||||
cfg_.rc_target_bitrate = 800;
|
cfg_.rc_target_bitrate = 800;
|
||||||
@ -1418,20 +1410,16 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL3TL4threads) {
|
|||||||
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
||||||
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
||||||
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
||||||
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.82)
|
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
|
||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.15)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " The datarate for the file is lower than the target by too much!";
|
||||||
// Number of temporal layers > 1, so half of the frames in this SVC pattern
|
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
|
||||||
// will be non-reference frame and hence encoder will avoid loopfilter.
|
|
||||||
// Since frame dropper is off, we can expcet 150 (half of the sequence)
|
|
||||||
// mismatched frames.
|
|
||||||
EXPECT_EQ(static_cast<unsigned int>(150), GetMismatchFrames());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and
|
// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and
|
||||||
// 3 temporal layers. Run CIF clip with 1 thread.
|
// 3 temporal layers. Run CIF clip with 1 thread.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayers) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1453,7 +1441,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL) {
|
|||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
svc_params_.scaling_factor_num[2] = 288;
|
svc_params_.scaling_factor_num[2] = 288;
|
||||||
svc_params_.scaling_factor_den[2] = 288;
|
svc_params_.scaling_factor_den[2] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 0;
|
cfg_.rc_dropframe_thresh = 10;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
||||||
cfg_.rc_target_bitrate = 800;
|
cfg_.rc_target_bitrate = 800;
|
||||||
@ -1461,20 +1449,16 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL) {
|
|||||||
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
||||||
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
||||||
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
||||||
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.82)
|
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
|
||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.22)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.22)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " The datarate for the file is lower than the target by too much!";
|
||||||
// Number of temporal layers > 1, so half of the frames in this SVC pattern
|
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
|
||||||
// will be non-reference frame and hence encoder will avoid loopfilter.
|
|
||||||
// Since frame dropper is off, we can expcet 150 (half of the sequence)
|
|
||||||
// mismatched frames.
|
|
||||||
EXPECT_EQ(static_cast<unsigned int>(150), GetMismatchFrames());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3
|
// 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.
|
// temporal layers. Run CIF clip with 1 thread, and few short key frame periods.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TLSmallKf) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayersSmallKf) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1511,12 +1495,13 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TLSmallKf) {
|
|||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.30)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.30)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " 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
|
// Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and
|
||||||
// 3 temporal layers. Run HD clip with 4 threads.
|
// 3 temporal layers. Run HD clip with 4 threads.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL4threads) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SpatialLayers4threads) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1538,7 +1523,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL4threads) {
|
|||||||
svc_params_.scaling_factor_den[1] = 288;
|
svc_params_.scaling_factor_den[1] = 288;
|
||||||
svc_params_.scaling_factor_num[2] = 288;
|
svc_params_.scaling_factor_num[2] = 288;
|
||||||
svc_params_.scaling_factor_den[2] = 288;
|
svc_params_.scaling_factor_den[2] = 288;
|
||||||
cfg_.rc_dropframe_thresh = 0;
|
cfg_.rc_dropframe_thresh = 10;
|
||||||
cfg_.kf_max_dist = 9999;
|
cfg_.kf_max_dist = 9999;
|
||||||
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 300);
|
||||||
cfg_.rc_target_bitrate = 800;
|
cfg_.rc_target_bitrate = 800;
|
||||||
@ -1546,20 +1531,16 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc3SL3TL4threads) {
|
|||||||
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
assign_layer_bitrates(&cfg_, &svc_params_, cfg_.ss_number_layers,
|
||||||
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
cfg_.ts_number_layers, cfg_.temporal_layering_mode);
|
||||||
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
||||||
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.82)
|
ASSERT_GE(cfg_.rc_target_bitrate, file_datarate_ * 0.85)
|
||||||
<< " The datarate for the file exceeds the target by too much!";
|
<< " The datarate for the file exceeds the target by too much!";
|
||||||
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.22)
|
ASSERT_LE(cfg_.rc_target_bitrate, file_datarate_ * 1.22)
|
||||||
<< " The datarate for the file is lower than the target by too much!";
|
<< " The datarate for the file is lower than the target by too much!";
|
||||||
// Number of temporal layers > 1, so half of the frames in this SVC pattern
|
EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
|
||||||
// will be non-reference frame and hence encoder will avoid loopfilter.
|
|
||||||
// Since frame dropper is off, we can expcet 150 (half of the sequence)
|
|
||||||
// mismatched frames.
|
|
||||||
EXPECT_EQ(static_cast<unsigned int>(150), GetMismatchFrames());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run SVC encoder for 1 temporal layer, 2 spatial layers, with spatial
|
// Run SVC encoder for 1 temporal layer, 2 spatial layers, with spatial
|
||||||
// downscale 5x5.
|
// downscale 5x5.
|
||||||
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL1TL5x5MultipleRuns) {
|
TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SpatialLayers5x5MultipleRuns) {
|
||||||
cfg_.rc_buf_initial_sz = 500;
|
cfg_.rc_buf_initial_sz = 500;
|
||||||
cfg_.rc_buf_optimal_sz = 500;
|
cfg_.rc_buf_optimal_sz = 500;
|
||||||
cfg_.rc_buf_sz = 1000;
|
cfg_.rc_buf_sz = 1000;
|
||||||
@ -1577,7 +1558,7 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc2SL1TL5x5MultipleRuns) {
|
|||||||
svc_params_.scaling_factor_den[0] = 1280;
|
svc_params_.scaling_factor_den[0] = 1280;
|
||||||
svc_params_.scaling_factor_num[1] = 1280;
|
svc_params_.scaling_factor_num[1] = 1280;
|
||||||
svc_params_.scaling_factor_den[1] = 1280;
|
svc_params_.scaling_factor_den[1] = 1280;
|
||||||
cfg_.rc_dropframe_thresh = 10;
|
cfg_.rc_dropframe_thresh = 0;
|
||||||
cfg_.kf_max_dist = 999999;
|
cfg_.kf_max_dist = 999999;
|
||||||
cfg_.kf_min_dist = 0;
|
cfg_.kf_min_dist = 0;
|
||||||
cfg_.ss_target_bitrate[0] = 300;
|
cfg_.ss_target_bitrate[0] = 300;
|
||||||
|
@ -2618,10 +2618,6 @@ static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) {
|
|||||||
MACROBLOCKD *xd = &cpi->td.mb.e_mbd;
|
MACROBLOCKD *xd = &cpi->td.mb.e_mbd;
|
||||||
struct loopfilter *lf = &cm->lf;
|
struct loopfilter *lf = &cm->lf;
|
||||||
|
|
||||||
const int is_reference_frame =
|
|
||||||
(cpi->refresh_last_frame || cpi->refresh_golden_frame ||
|
|
||||||
cpi->refresh_alt_ref_frame);
|
|
||||||
|
|
||||||
if (xd->lossless) {
|
if (xd->lossless) {
|
||||||
lf->filter_level = 0;
|
lf->filter_level = 0;
|
||||||
lf->last_filt_level = 0;
|
lf->last_filt_level = 0;
|
||||||
@ -2647,7 +2643,7 @@ static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) {
|
|||||||
cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer);
|
cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lf->filter_level > 0 && is_reference_frame) {
|
if (lf->filter_level > 0) {
|
||||||
vp9_build_mask_frame(cm, lf->filter_level, 0);
|
vp9_build_mask_frame(cm, lf->filter_level, 0);
|
||||||
|
|
||||||
if (cpi->num_workers > 1)
|
if (cpi->num_workers > 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user