| Index: webrtc/video/video_send_stream.cc
|
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
|
| index eeb9580b6b707e1c454491fc3339c9508eb5215a..971abebff23d1b46b02a974920d7bfec23668271 100644
|
| --- a/webrtc/video/video_send_stream.cc
|
| +++ b/webrtc/video/video_send_stream.cc
|
| @@ -396,6 +396,7 @@ VideoSendStream::VideoSendStream(
|
| encoder_thread_(EncoderThreadFunction, this, "EncoderThread"),
|
| encoder_wakeup_event_(false, false),
|
| stop_encoder_thread_(0),
|
| + encoder_max_bitrate_bps_(0),
|
| state_(State::kStopped),
|
| overuse_detector_(
|
| Clock::GetRealTimeClock(),
|
| @@ -631,6 +632,7 @@ void VideoSendStream::EncoderProcess() {
|
| } else if (*pending_state_change == State::kStopped) {
|
| bitrate_allocator_->RemoveObserver(this);
|
| vie_encoder_.OnBitrateUpdated(0, 0, 0);
|
| + stats_proxy_.OnSetEncoderTargetRate(0);
|
| state_ = State::kStopped;
|
| LOG_F(LS_INFO) << "Encoder stopped.";
|
| }
|
| @@ -684,6 +686,7 @@ void VideoSendStream::ReconfigureVideoEncoder(
|
| config_.encoder_settings.payload_type);
|
| {
|
| rtc::CritScope lock(&encoder_settings_crit_);
|
| + encoder_max_bitrate_bps_ = video_codec.maxBitrate * 1000;
|
| pending_encoder_settings_.reset(new EncoderSettings({video_codec, config}));
|
| }
|
| encoder_wakeup_event_.Set();
|
| @@ -875,9 +878,18 @@ uint32_t VideoSendStream::OnBitrateUpdated(uint32_t bitrate_bps,
|
| uint32_t encoder_target_rate_bps =
|
| protection_bitrate_calculator_.SetTargetRates(
|
| bitrate_bps, stats_proxy_.GetSendFrameRate(), fraction_loss, rtt);
|
| +
|
| + uint32_t protection_bitrate = bitrate_bps - encoder_target_rate_bps;
|
| + {
|
| + // Limit the target bitrate to the configured max bitrate.
|
| + rtc::CritScope lock(&encoder_settings_crit_);
|
| + encoder_target_rate_bps =
|
| + std::min(encoder_max_bitrate_bps_, encoder_target_rate_bps);
|
| + }
|
| vie_encoder_.OnBitrateUpdated(encoder_target_rate_bps, fraction_loss, rtt);
|
| + stats_proxy_.OnSetEncoderTargetRate(encoder_target_rate_bps);
|
|
|
| - return bitrate_bps - encoder_target_rate_bps;
|
| + return protection_bitrate;
|
| }
|
|
|
| int VideoSendStream::ProtectionRequest(const FecProtectionParams* delta_params,
|
|
|