diff --git a/modules/video_coding/include/video_error_codes.h b/modules/video_coding/include/video_error_codes.h index 40e5a9a8ea..4f0da22ff2 100644 --- a/modules/video_coding/include/video_error_codes.h +++ b/modules/video_coding/include/video_error_codes.h @@ -15,6 +15,7 @@ // Define return values +#define WEBRTC_VIDEO_CODEC_OK_REQUEST_KEYFRAME 4 #define WEBRTC_VIDEO_CODEC_REQUEST_SLI 2 #define WEBRTC_VIDEO_CODEC_NO_OUTPUT 1 #define WEBRTC_VIDEO_CODEC_OK 0 diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index c0e1d36256..42e532a697 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -424,10 +424,15 @@ bool VideoReceiveStream::Decode() { if (frame) { int64_t now_ms = clock_->TimeInMilliseconds(); RTC_DCHECK_EQ(res, video_coding::FrameBuffer::ReturnReason::kFrameFound); - if (video_receiver_.Decode(frame.get()) == VCM_OK) { + int decode_result = video_receiver_.Decode(frame.get()); + if (decode_result == WEBRTC_VIDEO_CODEC_OK || + decode_result == WEBRTC_VIDEO_CODEC_OK_REQUEST_KEYFRAME) { keyframe_required_ = false; frame_decoded_ = true; rtp_video_stream_receiver_.FrameDecoded(frame->picture_id); + + if (decode_result == WEBRTC_VIDEO_CODEC_OK_REQUEST_KEYFRAME) + RequestKeyFrame(); } else if (!frame_decoded_ || !keyframe_required_ || (last_keyframe_request_ms_ + kMaxWaitForKeyFrameMs < now_ms)) { keyframe_required_ = true;