diff --git a/media/webrtc/trunk/webrtc/video/video_send_stream.cc b/media/webrtc/trunk/webrtc/video/video_send_stream.cc index ae75d38b0464..cd40ef31477c 100644 --- a/media/webrtc/trunk/webrtc/video/video_send_stream.cc +++ b/media/webrtc/trunk/webrtc/video/video_send_stream.cc @@ -426,7 +426,16 @@ bool VideoSendStream::ReconfigureVideoEncoder( video_codec.minBitrate = std::min(static_cast(video_codec.minBitrate), static_cast(streams[i].min_bitrate_bps / 1000)); - video_codec.maxBitrate += streams[i].max_bitrate_bps / 1000; + // SimulcastEncoderAdapter::GetStreamBitrate() expects to give the target + // rate to each of the lower layers and the remainder to the last layer. + // Giving max to everything results in lower layer to consume too much + // bandwidth and the top layer potentially not having enough bitrate left + // for its minimum. + if (i + 1 == streams.size()) { + video_codec.maxBitrate += streams[i].max_bitrate_bps / 1000; + } else { + video_codec.maxBitrate += streams[i].target_bitrate_bps / 1000; + } video_codec.qpMax = std::max(video_codec.qpMax, static_cast(streams[i].max_qp)); }