Index: webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc |
index 536587a13ee07795f7bacab1c2eec4fbe41ffa27..2480a502e8e02ed92ce79fbfa1f0c51b86b4a5cb 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc |
+++ b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc |
@@ -57,8 +57,8 @@ ScreenshareLayers::ScreenshareLayers(int num_temporal_layers, |
max_qp_(-1), |
max_debt_bytes_(0), |
frame_rate_(-1) { |
- assert(num_temporal_layers > 0); |
- assert(num_temporal_layers <= 2); |
+ RTC_CHECK_GT(num_temporal_layers, 0); |
+ RTC_CHECK_LE(num_temporal_layers, 2); |
} |
int ScreenshareLayers::CurrentLayerId() const { |
@@ -147,7 +147,8 @@ bool ScreenshareLayers::ConfigureBitrates(int bitrate_kbps, |
} |
// Don't reconfigure qp limits during quality boost frames. |
- if (layers_[active_layer_].state != TemporalLayer::State::kQualityBoost) { |
+ if (active_layer_ == -1 || |
+ layers_[active_layer_].state != TemporalLayer::State::kQualityBoost) { |
min_qp_ = cfg->rc_min_quantizer; |
max_qp_ = cfg->rc_max_quantizer; |
// After a dropped frame, a frame with max qp will be encoded and the |
@@ -169,6 +170,10 @@ bool ScreenshareLayers::ConfigureBitrates(int bitrate_kbps, |
void ScreenshareLayers::FrameEncoded(unsigned int size, |
uint32_t timestamp, |
int qp) { |
+ if (number_of_temporal_layers_ == 1) |
+ return; |
+ |
+ RTC_DCHECK_NE(-1, active_layer_); |
if (size == 0) { |
layers_[active_layer_].state = TemporalLayer::State::kDropped; |
return; |
@@ -198,6 +203,7 @@ void ScreenshareLayers::PopulateCodecSpecific(bool base_layer_sync, |
vp8_info->layerSync = false; |
vp8_info->tl0PicIdx = kNoTl0PicIdx; |
} else { |
+ RTC_DCHECK_NE(-1, active_layer_); |
vp8_info->temporalIdx = active_layer_; |
if (base_layer_sync) { |
vp8_info->temporalIdx = 0; |
@@ -218,10 +224,7 @@ void ScreenshareLayers::PopulateCodecSpecific(bool base_layer_sync, |
} |
bool ScreenshareLayers::TimeToSync(int64_t timestamp) const { |
- if (active_layer_ != 1) { |
- RTC_NOTREACHED(); |
- return false; |
- } |
+ RTC_DCHECK_EQ(1, active_layer_); |
RTC_DCHECK_NE(-1, layers_[0].last_qp); |
if (layers_[1].last_qp == -1) { |
// First frame in TL1 should only depend on TL0 since there are no |
@@ -248,6 +251,7 @@ bool ScreenshareLayers::TimeToSync(int64_t timestamp) const { |
bool ScreenshareLayers::UpdateConfiguration(vpx_codec_enc_cfg_t* cfg) { |
if (max_qp_ == -1 || number_of_temporal_layers_ <= 1) |
return false; |
+ RTC_DCHECK_NE(-1, active_layer_); |
// If layer is in the quality boost state (following a dropped frame), update |
// the configuration with the adjusted (lower) qp and set the state back to |