Index: webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
index 2af8f41cd71d5798a14c83e4674f3974cea00f39..f0f385c625c5fee458b4f3071558e55905a9a292 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
+++ b/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
@@ -45,7 +45,8 @@ TemporalReferences::TemporalReferences(TemporalBufferUsage last, |
TemporalBufferUsage arf, |
bool layer_sync, |
bool freeze_entropy) |
- : reference_last((last & kReference) != 0), |
+ : drop_frame(last == kNone && golden == kNone && arf == kNone), |
+ reference_last((last & kReference) != 0), |
update_last((last & kUpdate) != 0), |
reference_golden((golden & kReference) != 0), |
update_golden((golden & kUpdate) != 0), |
@@ -246,14 +247,19 @@ bool DefaultTemporalLayers::UpdateConfiguration(vpx_codec_enc_cfg_t* cfg) { |
return true; |
} |
-int DefaultTemporalLayers::EncodeFlags(uint32_t timestamp) { |
+// TODO(pbos): Name method so that it's obvious that it updates state. |
sprang_webrtc
2017/03/26 12:20:08
Not sure "get" makes it obvious state is changed e
pbos-webrtc
2017/03/27 16:31:07
I like update. Thanks.
|
+TemporalReferences DefaultTemporalLayers::GetLayerConfig(uint32_t timestamp) { |
RTC_DCHECK_GT(num_layers_, 0); |
RTC_DCHECK_LT(0, temporal_pattern_.size()); |
+ return temporal_pattern_[++pattern_idx_ % temporal_pattern_.size()]; |
+} |
+ |
+int TemporalLayers::EncodeFlags(uint32_t timestamp) { |
+ TemporalReferences references = GetLayerConfig(timestamp); |
+ if (references.drop_frame) |
+ return -1; |
+ |
int flags = 0; |
- // TODO(pbos): Move pattern-update out of EncodeFlags. It's not obvious that |
- // EncodeFlags() is non-const. |
- const TemporalReferences& references = |
- temporal_pattern_[++pattern_idx_ % temporal_pattern_.size()]; |
if (!references.reference_last) |
flags |= VP8_EFLAG_NO_REF_LAST; |
@@ -274,7 +280,7 @@ int DefaultTemporalLayers::EncodeFlags(uint32_t timestamp) { |
} |
void DefaultTemporalLayers::PopulateCodecSpecific( |
- bool base_layer_sync, |
+ bool frame_is_keyframe, |
CodecSpecificInfoVP8* vp8_info, |
uint32_t timestamp) { |
RTC_DCHECK_GT(num_layers_, 0); |
@@ -284,7 +290,7 @@ void DefaultTemporalLayers::PopulateCodecSpecific( |
vp8_info->layerSync = false; |
vp8_info->tl0PicIdx = kNoTl0PicIdx; |
} else { |
- if (base_layer_sync) { |
+ if (frame_is_keyframe) { |
vp8_info->temporalIdx = 0; |
vp8_info->layerSync = true; |
} else { |
@@ -303,7 +309,7 @@ void DefaultTemporalLayers::PopulateCodecSpecific( |
timestamp_ = timestamp; |
tl0_pic_idx_++; |
} |
- last_base_layer_sync_ = base_layer_sync; |
+ last_base_layer_sync_ = frame_is_keyframe; |
vp8_info->tl0PicIdx = tl0_pic_idx_; |
} |
} |