| Index: webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc | 
| diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc | 
| index c84049f034609e7df4b08449da0d617f994bb151..8d10594da9c4c18f24463ee8755ff9802936ad6f 100644 | 
| --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc | 
| +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc | 
| @@ -827,20 +827,31 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, | 
| assert(codec_.maxFramerate > 0); | 
| uint32_t duration = 90000 / codec_.maxFramerate; | 
|  | 
| -  // Note we must pass 0 for |flags| field in encode call below since they are | 
| -  // set above in |vpx_codec_control| function for each encoder/spatial layer. | 
| -  int error = vpx_codec_encode(&encoders_[0], &raw_images_[0], timestamp_, | 
| -                               duration, 0, VPX_DL_REALTIME); | 
| -  // Reset specific intra frame thresholds, following the key frame. | 
| -  if (send_key_frame) { | 
| -    vpx_codec_control(&(encoders_[0]), VP8E_SET_MAX_INTRA_BITRATE_PCT, | 
| -                      rc_max_intra_target_); | 
| +  int error = WEBRTC_VIDEO_CODEC_OK; | 
| +  int num_tries = 0; | 
| +  // If the first try returns WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT | 
| +  // the frame must be reencoded with the same parameters again because | 
| +  // target bitrate is exceeded and encoder state has been reset. | 
| +  while (num_tries == 0 || | 
| +      (num_tries == 1 && | 
| +          error == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT)) { | 
| +    ++num_tries; | 
| +    // Note we must pass 0 for |flags| field in encode call below since they are | 
| +    // set above in |vpx_codec_control| function for each encoder/spatial layer. | 
| +    error = vpx_codec_encode(&encoders_[0], &raw_images_[0], timestamp_, | 
| +                                 duration, 0, VPX_DL_REALTIME); | 
| +    // Reset specific intra frame thresholds, following the key frame. | 
| +    if (send_key_frame) { | 
| +      vpx_codec_control(&(encoders_[0]), VP8E_SET_MAX_INTRA_BITRATE_PCT, | 
| +                        rc_max_intra_target_); | 
| +    } | 
| +    if (error) | 
| +      return WEBRTC_VIDEO_CODEC_ERROR; | 
| +    timestamp_ += duration; | 
| +    // Examines frame timestamps only. | 
| +    error = GetEncodedPartitions(tl_configs, frame); | 
| } | 
| -  if (error) | 
| -    return WEBRTC_VIDEO_CODEC_ERROR; | 
| -  timestamp_ += duration; | 
| -  // Examines frame timestamps only. | 
| -  return GetEncodedPartitions(tl_configs, frame); | 
| +  return error; | 
| } | 
|  | 
| void VP8EncoderImpl::PopulateCodecSpecific( | 
|  |