Fix calculation of number of active spatial layers.

It didn't account for implicit bitrate allocation, which is used in
some unit tests, when bitrate distribution is done by the encoder
wrapper.

Bug: none
Change-Id: I8fcf28e10f7a6c378580ef917221ad5c8d3869c9
Reviewed-on: https://webrtc-review.googlesource.com/94775
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24343}
This commit is contained in:
Sergey Silkin
2018-08-20 09:28:45 +02:00
committed by Commit Bot
parent 814f99cf27
commit 908689d047

View File

@ -204,16 +204,8 @@ bool VP9EncoderImpl::ExplicitlyConfiguredSpatialLayers() const {
bool VP9EncoderImpl::SetSvcRates(
const VideoBitrateAllocation& bitrate_allocation) {
uint8_t i = 0;
config_->rc_target_bitrate = bitrate_allocation.get_sum_kbps();
num_active_spatial_layers_ = 0;
for (i = 0; i < num_spatial_layers_; ++i)
num_active_spatial_layers_ += bitrate_allocation.IsSpatialLayerUsed(i);
RTC_DCHECK_GT(num_active_spatial_layers_, 0);
RTC_DCHECK_LE(num_active_spatial_layers_, num_spatial_layers_);
if (ExplicitlyConfiguredSpatialLayers()) {
for (size_t sl_idx = 0; sl_idx < num_spatial_layers_; ++sl_idx) {
const bool was_layer_enabled = (config_->ss_target_bitrate[sl_idx] > 0);
@ -237,7 +229,7 @@ bool VP9EncoderImpl::SetSvcRates(
} else {
float rate_ratio[VPX_MAX_LAYERS] = {0};
float total = 0;
for (i = 0; i < num_spatial_layers_; ++i) {
for (int i = 0; i < num_spatial_layers_; ++i) {
if (svc_params_.scaling_factor_num[i] <= 0 ||
svc_params_.scaling_factor_den[i] <= 0) {
RTC_LOG(LS_ERROR) << "Scaling factors not specified!";
@ -248,7 +240,7 @@ bool VP9EncoderImpl::SetSvcRates(
total += rate_ratio[i];
}
for (i = 0; i < num_spatial_layers_; ++i) {
for (int i = 0; i < num_spatial_layers_; ++i) {
RTC_CHECK_GT(total, 0);
config_->ss_target_bitrate[i] = static_cast<unsigned int>(
config_->rc_target_bitrate * rate_ratio[i] / total);
@ -274,6 +266,15 @@ bool VP9EncoderImpl::SetSvcRates(
}
}
}
num_active_spatial_layers_ = 0;
for (int i = 0; i < num_spatial_layers_; ++i) {
if (config_->ss_target_bitrate[i] > 0) {
++num_active_spatial_layers_;
}
}
RTC_DCHECK_GT(num_active_spatial_layers_, 0);
return true;
}