Index: webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
index 4e30986e82663683f1cc447d1a8cd1b1861eea14..3935c96b275e04b8eb24a262087b3366cbd28408 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
+++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
@@ -131,6 +131,30 @@ VP8Decoder* VP8Decoder::Create() { |
return new VP8DecoderImpl(); |
} |
+vpx_enc_frame_flags_t VP8EncoderImpl::EncodeFlags( |
+ TemporalReferences references) { |
+ RTC_DCHECK(!references.drop_frame); |
+ |
+ vpx_enc_frame_flags_t flags = 0; |
+ |
+ if ((references.last_buffer_flags & kReference) == 0) |
+ flags |= VP8_EFLAG_NO_REF_LAST; |
+ if ((references.last_buffer_flags & kUpdate) == 0) |
+ flags |= VP8_EFLAG_NO_UPD_LAST; |
+ if ((references.golden_buffer_flags & kReference) == 0) |
+ flags |= VP8_EFLAG_NO_REF_GF; |
+ if ((references.golden_buffer_flags & kUpdate) == 0) |
+ flags |= VP8_EFLAG_NO_UPD_GF; |
+ if ((references.arf_buffer_flags & kReference) == 0) |
+ flags |= VP8_EFLAG_NO_REF_ARF; |
+ if ((references.arf_buffer_flags & kUpdate) == 0) |
+ flags |= VP8_EFLAG_NO_UPD_ARF; |
+ if (references.freeze_entropy) |
+ flags |= VP8_EFLAG_NO_UPD_ENTROPY; |
+ |
+ return flags; |
+} |
+ |
VP8EncoderImpl::VP8EncoderImpl() |
: use_gf_boost_(webrtc::field_trial::IsEnabled(kVp8GfBoostFieldTrial)), |
encoded_complete_callback_(nullptr), |
@@ -682,12 +706,14 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, |
} |
vpx_enc_frame_flags_t flags[kMaxSimulcastStreams]; |
for (size_t i = 0; i < encoders_.size(); ++i) { |
- int ret = temporal_layers_[i]->EncodeFlags(frame.timestamp()); |
- if (ret < 0) { |
+ TemporalReferences tl_config = |
+ temporal_layers_[i]->UpdateLayerConfig(frame.timestamp()); |
+ |
+ if (tl_config.drop_frame) { |
// Drop this frame. |
return WEBRTC_VIDEO_CODEC_OK; |
} |
- flags[i] = ret; |
+ flags[i] = EncodeFlags(tl_config); |
} |
bool send_key_frame = false; |
for (size_t i = 0; i < key_frame_request_.size() && i < send_stream_.size(); |