Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index 0e9866064df142cf7d1529065a818560a674dea3..38d2e5670b9d841c13fc3d776a6987a805d7da57 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -612,8 +612,7 @@ WebRtcVideoChannel2::WebRtcVideoChannel2( |
: VideoMediaChannel(config), |
call_(call), |
unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), |
- signal_cpu_adaptation_(config.enable_cpu_overuse_detection), |
- disable_prerenderer_smoothing_(config.disable_prerenderer_smoothing), |
+ video_config_(config.video), |
external_encoder_factory_(external_encoder_factory), |
external_decoder_factory_(external_decoder_factory) { |
RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -1001,10 +1000,12 @@ bool WebRtcVideoChannel2::AddSendStream(const StreamParams& sp) { |
send_ssrcs_.insert(used_ssrc); |
webrtc::VideoSendStream::Config config(this); |
- WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
- call_, sp, config, external_encoder_factory_, signal_cpu_adaptation_, |
- bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
- send_params_); |
+ config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
+ WebRtcVideoSendStream* stream = |
+ new WebRtcVideoSendStream(call_, sp, config, external_encoder_factory_, |
+ video_config_.enable_cpu_overuse_detection, |
+ bitrate_config_.max_bitrate_bps, send_codec_, |
+ send_rtp_extensions_, send_params_); |
uint32_t ssrc = sp.first_ssrc(); |
RTC_DCHECK(ssrc != 0); |
@@ -1132,7 +1133,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, |
receive_streams_[ssrc] = new WebRtcVideoReceiveStream( |
call_, sp, config, external_decoder_factory_, default_stream, |
- recv_codecs_, disable_prerenderer_smoothing_); |
+ recv_codecs_, video_config_.disable_prerenderer_smoothing); |
return true; |
} |
@@ -1509,7 +1510,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
enable_cpu_overuse_detection ? this : nullptr; |
if (codec_settings) { |
- SetCodecAndOptions(*codec_settings, parameters_.options); |
+ SetCodec(*codec_settings); |
} |
} |
@@ -1648,13 +1649,10 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const { |
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions( |
const VideoOptions& options) { |
rtc::CritScope cs(&lock_); |
- if (parameters_.codec_settings) { |
- LOG(LS_INFO) << "SetCodecAndOptions because of SetOptions; options=" |
- << options.ToString(); |
- SetCodecAndOptions(*parameters_.codec_settings, options); |
- } else { |
- parameters_.options = options; |
- } |
+ parameters_.options.SetAll(options); |
+ // Reconfigure encoder settings on the next frame or stream |
+ // recreation. |
+ pending_encoder_reconfiguration_ = true; |
} |
webrtc::VideoCodecType CodecTypeFromName(const std::string& name) { |
@@ -1711,9 +1709,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( |
delete encoder->encoder; |
} |
-void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( |
- const VideoCodecSettings& codec_settings, |
- const VideoOptions& options) { |
+void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec( |
+ const VideoCodecSettings& codec_settings) { |
parameters_.encoder_config = |
CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec); |
RTC_DCHECK(!parameters_.encoder_config.streams.empty()); |
@@ -1744,16 +1741,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( |
parameters_.config.rtp.nack.rtp_history_ms = |
HasNack(codec_settings.codec) ? kNackHistoryMs : 0; |
- parameters_.config.suspend_below_min_bitrate = |
- options.suspend_below_min_bitrate.value_or(false); |
- |
parameters_.codec_settings = |
rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>(codec_settings); |
- parameters_.options = options; |
- |
- LOG(LS_INFO) |
- << "RecreateWebRtcStream (send) because of SetCodecAndOptions; options=" |
- << options.ToString(); |
RecreateWebRtcStream(); |
if (allocated_encoder_.encoder != new_encoder.encoder) { |
DestroyVideoEncoder(&allocated_encoder_); |
@@ -1789,21 +1778,15 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters( |
if (params.conference_mode) { |
parameters_.conference_mode = *params.conference_mode; |
} |
+ if (params.options) |
+ SetOptions(*params.options); |
+ |
// Set codecs and options. |
if (params.codec) { |
- SetCodecAndOptions(*params.codec, |
- params.options ? *params.options : parameters_.options); |
+ SetCodec(*params.codec); |
return; |
- } else if (params.options) { |
- // Reconfigure if codecs are already set. |
- if (parameters_.codec_settings) { |
- SetCodecAndOptions(*parameters_.codec_settings, *params.options); |
- return; |
- } else { |
- parameters_.options = *params.options; |
- } |
} else if (params.conference_mode && parameters_.codec_settings) { |
- SetCodecAndOptions(*parameters_.codec_settings, parameters_.options); |
+ SetCodec(*parameters_.codec_settings); |
return; |
} |
if (recreate_stream) { |