Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index 0dd8938dc3451758fb0441cb4df457baa6832abe..43b0f32d1fbf55cf94c71d4898695d7f11c5e4b4 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -616,7 +616,9 @@ WebRtcVideoChannel2::WebRtcVideoChannel2( |
external_encoder_factory_(external_encoder_factory), |
external_decoder_factory_(external_decoder_factory) { |
RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
- options_.SetAll(options); |
+ |
+ send_params_.options = options; |
+ |
rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; |
sending_ = false; |
default_send_ssrc_ = 0; |
@@ -736,9 +738,9 @@ bool WebRtcVideoChannel2::GetChangedSendParameters( |
// Handle options. |
// TODO(pbos): Require VideoSendParameters to contain a full set of options |
// and check if params.options != options_ instead of applying a delta. |
- VideoOptions new_options = options_; |
+ VideoOptions new_options = send_params_.options; |
new_options.SetAll(params.options); |
- if (!(new_options == options_)) { |
+ if (!(new_options == send_params_.options)) { |
changed_params->options = rtc::Optional<VideoOptions>(new_options); |
} |
@@ -801,7 +803,7 @@ bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) { |
} |
if (changed_params.options) |
- options_.SetAll(*changed_params.options); |
+ send_params_.options.SetAll(*changed_params.options); |
{ |
rtc::CritScope stream_lock(&stream_crit_); |
@@ -950,9 +952,7 @@ bool WebRtcVideoChannel2::SetVideoSend(uint32_t ssrc, bool enable, |
return false; |
} |
if (enable && options) { |
- VideoSendParameters new_params = send_params_; |
- new_params.options.SetAll(*options); |
- SetSendParameters(send_params_); |
+ SetOptions(ssrc, *options); |
} |
return true; |
} |
@@ -996,10 +996,10 @@ bool WebRtcVideoChannel2::AddSendStream(const StreamParams& sp) { |
webrtc::VideoSendStream::Config config(this); |
config.overuse_callback = this; |
- WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
- call_, sp, config, external_encoder_factory_, options_, |
- bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
- send_params_); |
+ WebRtcVideoSendStream* stream = |
+ new WebRtcVideoSendStream(call_, sp, config, external_encoder_factory_, |
+ bitrate_config_.max_bitrate_bps, send_codec_, |
+ send_rtp_extensions_, send_params_); |
uint32_t ssrc = sp.first_ssrc(); |
RTC_DCHECK(ssrc != 0); |
@@ -1098,7 +1098,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, |
rtc::CritScope stream_lock(&stream_crit_); |
// Remove running stream if this was a default stream. |
- auto prev_stream = receive_streams_.find(ssrc); |
+ const auto& prev_stream = receive_streams_.find(ssrc); |
if (prev_stream != receive_streams_.end()) { |
if (default_stream || !prev_stream->second->IsDefaultStream()) { |
LOG(LS_ERROR) << "Receive stream for SSRC '" << ssrc |
@@ -1268,11 +1268,12 @@ bool WebRtcVideoChannel2::SetCapturer(uint32_t ssrc, VideoCapturer* capturer) { |
RTC_DCHECK(ssrc != 0); |
{ |
rtc::CritScope stream_lock(&stream_crit_); |
- if (send_streams_.find(ssrc) == send_streams_.end()) { |
+ const auto& kv = send_streams_.find(ssrc); |
+ if (kv == send_streams_.end()) { |
LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; |
return false; |
} |
- if (!send_streams_[ssrc]->SetCapturer(capturer)) { |
+ if (!kv->second->SetCapturer(capturer)) { |
return false; |
} |
} |
@@ -1366,20 +1367,27 @@ bool WebRtcVideoChannel2::MuteStream(uint32_t ssrc, bool mute) { |
<< (mute ? "mute" : "unmute"); |
RTC_DCHECK(ssrc != 0); |
rtc::CritScope stream_lock(&stream_crit_); |
- if (send_streams_.find(ssrc) == send_streams_.end()) { |
+ const auto& kv = send_streams_.find(ssrc); |
+ if (kv == send_streams_.end()) { |
LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; |
return false; |
} |
- send_streams_[ssrc]->MuteStream(mute); |
+ kv->second->MuteStream(mute); |
return true; |
} |
// TODO(pbos): Remove SetOptions in favor of SetSendParameters. |
-void WebRtcVideoChannel2::SetOptions(const VideoOptions& options) { |
- VideoSendParameters new_params = send_params_; |
- new_params.options.SetAll(options); |
- SetSendParameters(send_params_); |
+void WebRtcVideoChannel2::SetOptions(uint32_t ssrc, |
+ const VideoOptions& options) { |
+ LOG(LS_INFO) << "SetOptions: ssrc " << ssrc << ": " << options.ToString(); |
+ |
+ rtc::CritScope stream_lock(&stream_crit_); |
+ const auto& kv = send_streams_.find(ssrc); |
+ if (kv == send_streams_.end()) { |
+ return; |
+ } |
+ kv->second->SetOptions(options); |
} |
void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) { |
@@ -1481,7 +1489,6 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
const StreamParams& sp, |
const webrtc::VideoSendStream::Config& config, |
WebRtcVideoEncoderFactory* external_encoder_factory, |
- const VideoOptions& options, |
int max_bitrate_bps, |
const rtc::Optional<VideoCodecSettings>& codec_settings, |
const std::vector<webrtc::RtpExtension>& rtp_extensions, |
@@ -1493,7 +1500,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
call_(call), |
external_encoder_factory_(external_encoder_factory), |
stream_(NULL), |
- parameters_(config, options, max_bitrate_bps, codec_settings), |
+ parameters_(config, send_params.options, max_bitrate_bps, codec_settings), |
pending_encoder_reconfiguration_(false), |
allocated_encoder_(NULL, webrtc::kVideoCodecUnknown, false), |
capturer_(NULL), |