From 70ebbda74beb562f57515576e02624eea1648c53 Mon Sep 17 00:00:00 2001 From: Marina Ciocea Date: Tue, 7 Apr 2020 17:23:02 +0200 Subject: [PATCH] [InsertableStreams] Fix IsKeyFrame() for video receiver delegate. The RtpVideoStreamReceiverFrameTransformerDelegate::IsKeyFrame() implementation was relying on the EncodedFrame::is_keyframe() API, which checks the number of references to a frame. However the number of references is not updated until after the frame is managed by the receiver, after the frame has been transformed. Update the delegate's IsKeyFrame() implementation to use the type of the frame instead. The frame type is updated before transforming the frame, on parsing the generic descriptor. Bug: chromium:1068468 Change-Id: I84dadaecb1cd485262c2f1681dfa653d84693f69 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173025 Commit-Queue: Marina Ciocea Reviewed-by: Magnus Flodman Cr-Commit-Position: refs/heads/master@{#31024} --- video/rtp_video_stream_receiver_frame_transformer_delegate.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/video/rtp_video_stream_receiver_frame_transformer_delegate.cc b/video/rtp_video_stream_receiver_frame_transformer_delegate.cc index 8b63c7e4df..db7f48616d 100644 --- a/video/rtp_video_stream_receiver_frame_transformer_delegate.cc +++ b/video/rtp_video_stream_receiver_frame_transformer_delegate.cc @@ -44,7 +44,9 @@ class TransformableVideoReceiverFrame uint32_t GetTimestamp() const override { return frame_->Timestamp(); } uint32_t GetSsrc() const override { return ssrc_; } - bool IsKeyFrame() const override { return frame_->is_keyframe(); } + bool IsKeyFrame() const override { + return frame_->FrameType() == VideoFrameType::kVideoFrameKey; + } std::vector GetAdditionalData() const override { return RtpDescriptorAuthentication(frame_->GetRtpVideoHeader());