diff --git a/modules/video_coding/frame_buffer2.cc b/modules/video_coding/frame_buffer2.cc index 12bfd35935..87fc498a81 100644 --- a/modules/video_coding/frame_buffer2.cc +++ b/modules/video_coding/frame_buffer2.cc @@ -285,7 +285,7 @@ void FrameBuffer::UpdatePlayoutDelays(const FrameObject& frame) { timing_->set_max_playout_delay(playout_delay.max_ms); } -int FrameBuffer::InsertFrame(std::unique_ptr frame) { +int64_t FrameBuffer::InsertFrame(std::unique_ptr frame) { TRACE_EVENT0("webrtc", "FrameBuffer::InsertFrame"); RTC_DCHECK(frame); if (stats_callback_) @@ -295,7 +295,7 @@ int FrameBuffer::InsertFrame(std::unique_ptr frame) { rtc::CritScope lock(&crit_); - int last_continuous_picture_id = + int64_t last_continuous_picture_id = last_continuous_frame_it_ == frames_.end() ? -1 : last_continuous_frame_it_->first.picture_id; diff --git a/modules/video_coding/frame_buffer2.h b/modules/video_coding/frame_buffer2.h index f535442d6f..19fd94ec5c 100644 --- a/modules/video_coding/frame_buffer2.h +++ b/modules/video_coding/frame_buffer2.h @@ -47,7 +47,7 @@ class FrameBuffer { // Insert a frame into the frame buffer. Returns the picture id // of the last continuous frame or -1 if there is no continuous frame. - int InsertFrame(std::unique_ptr frame); + int64_t InsertFrame(std::unique_ptr frame); // Get the next frame for decoding. Will return at latest after // |max_wait_time_ms|. diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc index 1f8519ec2b..0aaeaec79f 100644 --- a/modules/video_coding/rtp_frame_reference_finder.cc +++ b/modules/video_coding/rtp_frame_reference_finder.cc @@ -291,7 +291,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8( if (frame->frame_type() == kVideoFrameKey) { frame->num_references = 0; layer_info_[codec_header.tl0PicIdx].fill(-1); - UpdateLayerInfoVp8(frame); + UpdateLayerInfoVp8(frame, codec_header); return kHandOff; } @@ -313,7 +313,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8( .first; frame->num_references = 1; frame->references[0] = layer_info_it->second[0]; - UpdateLayerInfoVp8(frame); + UpdateLayerInfoVp8(frame, codec_header); return kHandOff; } @@ -322,7 +322,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8( frame->num_references = 1; frame->references[0] = layer_info_it->second[0]; - UpdateLayerInfoVp8(frame); + UpdateLayerInfoVp8(frame, codec_header); return kHandOff; } @@ -366,14 +366,13 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8( frame->references[layer] = layer_info_it->second[layer]; } - UpdateLayerInfoVp8(frame); + UpdateLayerInfoVp8(frame, codec_header); return kHandOff; } -void RtpFrameReferenceFinder::UpdateLayerInfoVp8(RtpFrameObject* frame) { - rtc::Optional rtp_codec_header = frame->GetCodecHeader(); - RTC_DCHECK(rtp_codec_header); - const RTPVideoHeaderVP8& codec_header = rtp_codec_header->VP8; +void RtpFrameReferenceFinder::UpdateLayerInfoVp8( + RtpFrameObject* frame, + const RTPVideoHeaderVP8& codec_header) { uint8_t tl0_pic_idx = codec_header.tl0PicIdx; uint8_t temporal_index = codec_header.temporalIdx; auto layer_info_it = layer_info_.find(tl0_pic_idx); diff --git a/modules/video_coding/rtp_frame_reference_finder.h b/modules/video_coding/rtp_frame_reference_finder.h index 33716f1a80..95da4f327e 100644 --- a/modules/video_coding/rtp_frame_reference_finder.h +++ b/modules/video_coding/rtp_frame_reference_finder.h @@ -99,7 +99,8 @@ class RtpFrameReferenceFinder { // Updates necessary layer info state used to determine frame references for // Vp8. - void UpdateLayerInfoVp8(RtpFrameObject* frame) + void UpdateLayerInfoVp8(RtpFrameObject* frame, + const RTPVideoHeaderVP8& codec_header) RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_); // Find references for Vp9 frames diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index 62a4dd2f7c..c0e1d36256 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -350,7 +350,7 @@ void VideoReceiveStream::RequestKeyFrame() { void VideoReceiveStream::OnCompleteFrame( std::unique_ptr frame) { - int last_continuous_pid = frame_buffer_->InsertFrame(std::move(frame)); + int64_t last_continuous_pid = frame_buffer_->InsertFrame(std::move(frame)); if (last_continuous_pid != -1) rtp_video_stream_receiver_.FrameContinuous(last_continuous_pid); }