Chromium Code Reviews| 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 8d74c363c511b07420f961e75f93e152c8df71df..970d3e98301f44717443e02ff5d1d2ba35fff26e 100644 |
| --- a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc |
| +++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc |
| @@ -27,7 +27,9 @@ RtpFrameReferenceFinder::RtpFrameReferenceFinder( |
| last_unwrap_(-1), |
| current_ss_idx_(0), |
| cleared_to_seq_num_(-1), |
| - frame_callback_(frame_callback) {} |
| + frame_callback_(frame_callback), |
| + generic_unwrapper_(100000), |
|
terelius
2017/08/18 11:53:16
Is this the starting point for unwrapped numbers?
philipel
2017/08/24 10:46:10
Changed the SeqNumUnwrapper default start value to
|
| + unwrapper_(100000) {} |
| void RtpFrameReferenceFinder::ManageFrame( |
| std::unique_ptr<RtpFrameObject> frame) { |
| @@ -176,7 +178,7 @@ RtpFrameReferenceFinder::ManageFrameGeneric(RtpFrameObject* frame, |
| if (last_unwrap_ == -1) |
| last_unwrap_ = picture_id; |
| - frame->picture_id = UnwrapPictureId(picture_id % kPicIdLength); |
| + frame->picture_id = unwrapper_.Unwrap(picture_id); |
| frame->num_references = frame->frame_type() == kVideoFrameKey ? 0 : 1; |
| frame->references[0] = frame->picture_id - 1; |
| return kHandOff; |
| @@ -228,14 +230,15 @@ RtpFrameReferenceFinder::ManageFrameGeneric(RtpFrameObject* frame, |
| // picture id according to some incrementing counter. |
| frame->picture_id = frame->last_seq_num(); |
| frame->num_references = frame->frame_type() == kVideoFrameDelta; |
| - frame->references[0] = last_picture_id_gop; |
| - if (AheadOf(frame->picture_id, last_picture_id_gop)) { |
| + frame->references[0] = generic_unwrapper_.Unwrap(last_picture_id_gop); |
| + if (AheadOf<uint16_t>(frame->picture_id, last_picture_id_gop)) { |
| seq_num_it->second.first = frame->picture_id; |
| seq_num_it->second.second = frame->picture_id; |
| } |
| last_picture_id_ = frame->picture_id; |
| UpdateLastPictureIdWithPadding(frame->picture_id); |
| + frame->picture_id = generic_unwrapper_.Unwrap(frame->picture_id); |
| return kHandOff; |
| } |
| @@ -367,7 +370,6 @@ void RtpFrameReferenceFinder::UpdateLayerInfoVp8(RtpFrameObject* frame) { |
| rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader(); |
| RTC_DCHECK(rtp_codec_header); |
| const RTPVideoHeaderVP8& codec_header = rtp_codec_header->VP8; |
| - |
| 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); |
| @@ -394,7 +396,8 @@ void RtpFrameReferenceFinder::UpdateLayerInfoVp8(RtpFrameObject* frame) { |
| RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp9( |
| RtpFrameObject* frame) { |
| rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader(); |
| - RTC_DCHECK(rtp_codec_header); |
| + if (!rtp_codec_header) |
| + return kDrop; |
| const RTPVideoHeaderVP9& codec_header = rtp_codec_header->VP9; |
| if (codec_header.picture_id == kNoPictureId || |
| @@ -585,22 +588,8 @@ bool RtpFrameReferenceFinder::UpSwitchInIntervalVp9(uint16_t picture_id, |
| void RtpFrameReferenceFinder::UnwrapPictureIds(RtpFrameObject* frame) { |
| for (size_t i = 0; i < frame->num_references; ++i) |
| - frame->references[i] = UnwrapPictureId(frame->references[i]); |
| - frame->picture_id = UnwrapPictureId(frame->picture_id); |
| -} |
| - |
| -uint16_t RtpFrameReferenceFinder::UnwrapPictureId(uint16_t picture_id) { |
| - RTC_DCHECK_NE(-1, last_unwrap_); |
| - |
| - uint16_t unwrap_truncated = last_unwrap_ % kPicIdLength; |
| - uint16_t diff = MinDiff<uint16_t, kPicIdLength>(unwrap_truncated, picture_id); |
| - |
| - if (AheadOf<uint16_t, kPicIdLength>(picture_id, unwrap_truncated)) |
| - last_unwrap_ = Add<1 << 16>(last_unwrap_, diff); |
| - else |
| - last_unwrap_ = Subtract<1 << 16>(last_unwrap_, diff); |
| - |
| - return last_unwrap_; |
| + frame->references[i] = unwrapper_.Unwrap(frame->references[i]); |
| + frame->picture_id = unwrapper_.Unwrap(frame->picture_id); |
| } |
| } // namespace video_coding |