| Index: webrtc/modules/video_coding/rtp_frame_reference_finder.cc
|
| diff --git a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
|
| index 2ddfada74e5e7763d5810538d84230894437568f..7e87d3812bd8fefe3de5d7bbc31c9c7f9edda26d 100644
|
| --- a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
|
| +++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
|
| @@ -46,7 +46,7 @@ void RtpFrameReferenceFinder::ManageFrame(
|
| case kVideoCodecH264:
|
| case kVideoCodecI420:
|
| case kVideoCodecGeneric:
|
| - ManageFrameGeneric(std::move(frame));
|
| + ManageFrameGeneric(std::move(frame), kNoPictureId);
|
| break;
|
| }
|
| }
|
| @@ -69,7 +69,21 @@ void RtpFrameReferenceFinder::RetryStashedFrames() {
|
| }
|
|
|
| void RtpFrameReferenceFinder::ManageFrameGeneric(
|
| - std::unique_ptr<RtpFrameObject> frame) {
|
| + std::unique_ptr<RtpFrameObject> frame,
|
| + int picture_id) {
|
| + // If |picture_id| is specified then we use that to set the frame references,
|
| + // otherwise we use sequence number.
|
| + if (picture_id != kNoPictureId) {
|
| + if (last_unwrap_ == -1)
|
| + last_unwrap_ = picture_id;
|
| +
|
| + frame->picture_id = UnwrapPictureId(picture_id % kPicIdLength);
|
| + frame->num_references = frame->frame_type() == kVideoFrameKey ? 0 : 1;
|
| + frame->references[0] = frame->picture_id - 1;
|
| + frame_callback_->OnCompleteFrame(std::move(frame));
|
| + return;
|
| + }
|
| +
|
| if (frame->frame_type() == kVideoFrameKey)
|
| last_seq_num_gop_[frame->last_seq_num()] = frame->last_seq_num();
|
|
|
| @@ -125,7 +139,7 @@ void RtpFrameReferenceFinder::ManageFrameVp8(
|
| if (codec_header.pictureId == kNoPictureId ||
|
| codec_header.temporalIdx == kNoTemporalIdx ||
|
| codec_header.tl0PicIdx == kNoTl0PicIdx) {
|
| - ManageFrameGeneric(std::move(frame));
|
| + ManageFrameGeneric(std::move(frame), codec_header.pictureId);
|
| return;
|
| }
|
|
|
| @@ -266,8 +280,9 @@ void RtpFrameReferenceFinder::ManageFrameVp9(
|
|
|
| const RTPVideoHeaderVP9& codec_header = rtp_codec_header->VP9;
|
|
|
| - if (codec_header.picture_id == kNoPictureId) {
|
| - ManageFrameGeneric(std::move(frame));
|
| + if (codec_header.picture_id == kNoPictureId ||
|
| + codec_header.temporal_idx == kNoTemporalIdx) {
|
| + ManageFrameGeneric(std::move(frame), codec_header.picture_id);
|
| return;
|
| }
|
|
|
|
|