Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index 46b033e4f2d08cc0074208717dda53a9f62df5f1..c19c78f67c9644f5a1f9237fdbb03c22f5c2ac4a 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -770,7 +770,7 @@ bool WebRtcVideoChannel2::GetChangedSendParameters( |
} |
// Handle max bitrate. |
- if (params.max_bandwidth_bps != bitrate_config_.max_bitrate_bps && |
+ if (params.max_bandwidth_bps != send_params_.max_bandwidth_bps && |
params.max_bandwidth_bps >= 0) { |
// 0 uncaps max bitrate (-1). |
changed_params->max_bandwidth_bps = rtc::Optional<int>( |
@@ -805,39 +805,38 @@ bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) { |
return false; |
} |
- bool bitrate_config_changed = false; |
- |
if (changed_params.codec) { |
const VideoCodecSettings& codec_settings = *changed_params.codec; |
send_codec_ = rtc::Optional<VideoCodecSettings>(codec_settings); |
- |
LOG(LS_INFO) << "Using codec: " << codec_settings.codec.ToString(); |
- // TODO(holmer): Changing the codec parameters shouldn't necessarily mean |
- // that we change the min/max of bandwidth estimation. Reevaluate this. |
- bitrate_config_ = GetBitrateConfigForCodec(codec_settings.codec); |
- bitrate_config_changed = true; |
} |
if (changed_params.rtp_header_extensions) { |
send_rtp_extensions_ = *changed_params.rtp_header_extensions; |
} |
- if (changed_params.max_bandwidth_bps) { |
- // TODO(pbos): Figure out whether b=AS means max bitrate for this |
- // WebRtcVideoChannel2 (in which case we're good), or per sender (SSRC), in |
- // which case this should not set a Call::BitrateConfig but rather |
- // reconfigure all senders. |
- int max_bitrate_bps = *changed_params.max_bandwidth_bps; |
- bitrate_config_.start_bitrate_bps = -1; |
- bitrate_config_.max_bitrate_bps = max_bitrate_bps; |
- if (max_bitrate_bps > 0 && |
- bitrate_config_.min_bitrate_bps > max_bitrate_bps) { |
- bitrate_config_.min_bitrate_bps = max_bitrate_bps; |
+ if (changed_params.codec || changed_params.max_bandwidth_bps) { |
+ if (send_codec_) { |
+ // TODO(holmer): Changing the codec parameters shouldn't necessarily mean |
+ // that we change the min/max of bandwidth estimation. Reevaluate this. |
+ bitrate_config_ = GetBitrateConfigForCodec(send_codec_->codec); |
+ if (!changed_params.codec) { |
+ // If the codec isn't changing, set the start bitrate to -1 which means |
+ // "unchanged" so that BWE isn't affected. |
+ bitrate_config_.start_bitrate_bps = -1; |
+ } |
+ } |
+ if (params.max_bandwidth_bps >= 0) { |
+ // Note that max_bandwidth_bps intentionally takes priority over the |
+ // bitrate config for the codec. This allows FEC to be applied above the |
+ // codec target bitrate. |
+ // TODO(pbos): Figure out whether b=AS means max bitrate for this |
stefan-webrtc
2016/04/27 07:24:41
b=AS means session bandwidth, so my interpretation
|
+ // WebRtcVideoChannel2 (in which case we're good), or per sender (SSRC), |
+ // in which case this should not set a Call::BitrateConfig but rather |
+ // reconfigure all senders. |
+ bitrate_config_.max_bitrate_bps = |
+ params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps; |
} |
- bitrate_config_changed = true; |
- } |
- |
- if (bitrate_config_changed) { |
call_->SetBitrateConfig(bitrate_config_); |
} |