| 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..e2246b06ad3acfd8205265aa09b1b57012e66740 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc
|
| @@ -25,14 +25,14 @@
|
|
|
| namespace webrtc {
|
|
|
| -TemporalReferences::TemporalReferences(TemporalBufferUsage last,
|
| - TemporalBufferUsage golden,
|
| - TemporalBufferUsage arf)
|
| +TemporalReferences::TemporalReferences(TemporalBufferFlags last,
|
| + TemporalBufferFlags golden,
|
| + TemporalBufferFlags arf)
|
| : TemporalReferences(last, golden, arf, false, false) {}
|
|
|
| -TemporalReferences::TemporalReferences(TemporalBufferUsage last,
|
| - TemporalBufferUsage golden,
|
| - TemporalBufferUsage arf,
|
| +TemporalReferences::TemporalReferences(TemporalBufferFlags last,
|
| + TemporalBufferFlags golden,
|
| + TemporalBufferFlags arf,
|
| int extra_flags)
|
| : TemporalReferences(last,
|
| golden,
|
| @@ -40,17 +40,15 @@ TemporalReferences::TemporalReferences(TemporalBufferUsage last,
|
| (extra_flags & kLayerSync) != 0,
|
| (extra_flags & kFreezeEntropy) != 0) {}
|
|
|
| -TemporalReferences::TemporalReferences(TemporalBufferUsage last,
|
| - TemporalBufferUsage golden,
|
| - TemporalBufferUsage arf,
|
| +TemporalReferences::TemporalReferences(TemporalBufferFlags last,
|
| + TemporalBufferFlags golden,
|
| + TemporalBufferFlags arf,
|
| bool layer_sync,
|
| bool freeze_entropy)
|
| - : reference_last((last & kReference) != 0),
|
| - update_last((last & kUpdate) != 0),
|
| - reference_golden((golden & kReference) != 0),
|
| - update_golden((golden & kUpdate) != 0),
|
| - reference_arf((arf & kReference) != 0),
|
| - update_arf((arf & kUpdate) != 0),
|
| + : drop_frame(last == kNone && golden == kNone && arf == kNone),
|
| + last_buffer_flags(last),
|
| + golden_buffer_flags(golden),
|
| + arf_buffer_flags(arf),
|
| layer_sync(layer_sync),
|
| freeze_entropy(freeze_entropy) {}
|
|
|
| @@ -246,26 +244,32 @@ 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.
|
| +TemporalReferences DefaultTemporalLayers::UpdateLayerConfig(
|
| + 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 = UpdateLayerConfig(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)
|
| + if ((references.last_buffer_flags & kReference) == 0)
|
| flags |= VP8_EFLAG_NO_REF_LAST;
|
| - if (!references.update_last)
|
| + if ((references.last_buffer_flags & kUpdate) == 0)
|
| flags |= VP8_EFLAG_NO_UPD_LAST;
|
| - if (!references.reference_golden)
|
| + if ((references.golden_buffer_flags & kReference) == 0)
|
| flags |= VP8_EFLAG_NO_REF_GF;
|
| - if (!references.update_golden)
|
| + if ((references.golden_buffer_flags & kUpdate) == 0)
|
| flags |= VP8_EFLAG_NO_UPD_GF;
|
| - if (!references.reference_arf)
|
| + if ((references.arf_buffer_flags & kReference) == 0)
|
| flags |= VP8_EFLAG_NO_REF_ARF;
|
| - if (!references.update_arf)
|
| + if ((references.arf_buffer_flags & kUpdate) == 0)
|
| flags |= VP8_EFLAG_NO_UPD_ARF;
|
| if (references.freeze_entropy)
|
| flags |= VP8_EFLAG_NO_UPD_ENTROPY;
|
| @@ -274,7 +278,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 +288,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 +307,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_;
|
| }
|
| }
|
|
|