Commit 2bac0dce authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu/vaapi/vp9Encoder: Correct |layer_target_bitrate| value

libvpx::VP9RateControlRtcConfig::layer_target_bitrate must be
set in an accumulative manner, but originally Vp9Encoder sets
the bitrate of each layer independently. This CL fixes the
wrong settlement.

Bug: b:169219904, 1030199
Test: appr.tc/?vrc=vp9&vsc=vp9
Change-Id: I27787d2ce43394ff5b032562a21425da4654e772
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2434416
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarJeffrey Kardatzke <jkardatzke@google.com>
Reviewed-by: default avatarMiguel Casas <mcasas@chromium.org>
Auto-Submit: Hirokazu Honda <hiroh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812586}
parent 2f5dfe3b
......@@ -127,8 +127,7 @@ libvpx::VP9RateControlRtcConfig CreateRateControlConfig(
rc_cfg.min_quantizer =
QindexToQuantizer(encode_params.scaling_settings.min_qp);
// libvpx::VP9RateControlRtcConfig is kbps.
rc_cfg.target_bandwidth = base::checked_cast<int64_t>(
encode_params.bitrate_allocation.GetSumBps() / 1000.0);
rc_cfg.target_bandwidth = encode_params.bitrate_allocation.GetSumBps() / 1000;
// These default values come from
// //third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc.
rc_cfg.buf_initial_sz = 500;
......@@ -146,11 +145,12 @@ libvpx::VP9RateControlRtcConfig CreateRateControlConfig(
rc_cfg.scaling_factor_den[0] = 1;
// Fill temporal layers variables.
rc_cfg.ts_number_layers = num_temporal_layers;
int bitrate_sum = 0;
for (size_t ti = 0; ti < num_temporal_layers; ti++) {
rc_cfg.max_quantizers[ti] = rc_cfg.max_quantizer;
rc_cfg.min_quantizers[ti] = rc_cfg.min_quantizer;
rc_cfg.layer_target_bitrate[ti] = base::checked_cast<int>(
bitrate_allocation.GetBitrateBps(0, ti) / 1000.0);
bitrate_sum += bitrate_allocation.GetBitrateBps(0, ti);
rc_cfg.layer_target_bitrate[ti] = bitrate_sum / 1000;
rc_cfg.ts_rate_decimator[ti] = 1u << (num_temporal_layers - ti - 1);
}
return rc_cfg;
......
......@@ -139,19 +139,17 @@ MATCHER_P4(MatchRtcConfigWithRates,
framerate,
num_temporal_layers,
"") {
if (arg.target_bandwidth !=
static_cast<int64_t>(bitrate_allocation.GetSumBps() / 1000.0)) {
if (arg.target_bandwidth != bitrate_allocation.GetSumBps() / 1000)
return false;
}
if (arg.framerate != static_cast<double>(framerate))
return false;
int bitrate_sum = 0;
for (size_t i = 0; i < num_temporal_layers; i++) {
if (arg.layer_target_bitrate[i] !=
static_cast<int>(bitrate_allocation.GetBitrateBps(0, i) / 1000.0)) {
bitrate_sum += bitrate_allocation.GetBitrateBps(0, i);
if (arg.layer_target_bitrate[i] != bitrate_sum / 1000)
return false;
}
if (arg.ts_rate_decimator[i] != (1 << (num_temporal_layers - i - 1)))
return false;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment