| 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 52947cb2d077a5bef2fd458bd0ae3a46eb5f1498..e167e15c52cc60355fbef3dbb13e6d6a89145fac 100644
 | 
| --- a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
 | 
| +++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
 | 
| @@ -176,7 +176,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,22 +228,25 @@ 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;
 | 
|  }
 | 
|  
 | 
|  RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8(
 | 
|      RtpFrameObject* frame) {
 | 
|    rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader();
 | 
| -  if (!rtp_codec_header)
 | 
| +  if (!rtp_codec_header) {
 | 
| +    LOG(LS_WARNING) << "Failed to get codec header from frame, dropping frame.";
 | 
|      return kDrop;
 | 
| +  }
 | 
|  
 | 
|    const RTPVideoHeaderVP8& codec_header = rtp_codec_header->VP8;
 | 
|  
 | 
| @@ -285,7 +288,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8(
 | 
|    if (frame->frame_type() == kVideoFrameKey) {
 | 
|      frame->num_references = 0;
 | 
|      layer_info_[codec_header.tl0PicIdx].fill(-1);
 | 
| -    UpdateLayerInfoVp8(frame, codec_header);
 | 
| +    UpdateLayerInfoVp8(frame);
 | 
|      return kHandOff;
 | 
|    }
 | 
|  
 | 
| @@ -307,7 +310,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8(
 | 
|              .first;
 | 
|      frame->num_references = 1;
 | 
|      frame->references[0] = layer_info_it->second[0];
 | 
| -    UpdateLayerInfoVp8(frame, codec_header);
 | 
| +    UpdateLayerInfoVp8(frame);
 | 
|      return kHandOff;
 | 
|    }
 | 
|  
 | 
| @@ -316,7 +319,7 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8(
 | 
|      frame->num_references = 1;
 | 
|      frame->references[0] = layer_info_it->second[0];
 | 
|  
 | 
| -    UpdateLayerInfoVp8(frame, codec_header);
 | 
| +    UpdateLayerInfoVp8(frame);
 | 
|      return kHandOff;
 | 
|    }
 | 
|  
 | 
| @@ -359,13 +362,14 @@ RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp8(
 | 
|      frame->references[layer] = layer_info_it->second[layer];
 | 
|    }
 | 
|  
 | 
| -  UpdateLayerInfoVp8(frame, codec_header);
 | 
| +  UpdateLayerInfoVp8(frame);
 | 
|    return kHandOff;
 | 
|  }
 | 
|  
 | 
| -void RtpFrameReferenceFinder::UpdateLayerInfoVp8(
 | 
| -    RtpFrameObject* frame,
 | 
| -    const RTPVideoHeaderVP8& codec_header) {
 | 
| +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);
 | 
| @@ -392,8 +396,10 @@ void RtpFrameReferenceFinder::UpdateLayerInfoVp8(
 | 
|  RtpFrameReferenceFinder::FrameDecision RtpFrameReferenceFinder::ManageFrameVp9(
 | 
|      RtpFrameObject* frame) {
 | 
|    rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader();
 | 
| -  if (!rtp_codec_header)
 | 
| +  if (!rtp_codec_header) {
 | 
| +    LOG(LS_WARNING) << "Failed to get codec header from frame, dropping frame.";
 | 
|      return kDrop;
 | 
| +  }
 | 
|  
 | 
|    const RTPVideoHeaderVP9& codec_header = rtp_codec_header->VP9;
 | 
|  
 | 
| @@ -585,22 +591,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
 | 
| 
 |