From 908689d04718c02f7e29f12431faf447187cc713 Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Mon, 20 Aug 2018 09:28:45 +0200 Subject: [PATCH] Fix calculation of number of active spatial layers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/master@{#24343} --- modules/video_coding/codecs/vp9/vp9_impl.cc | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/video_coding/codecs/vp9/vp9_impl.cc b/modules/video_coding/codecs/vp9/vp9_impl.cc index 0cbc34e372..bdae580c47 100644 --- a/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -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( 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; }