Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Unified Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2710493008: Recreate WebrtcVideoSendStream if screen content setting is changed. (Closed)
Patch Set: readability Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvideoengine2.cc
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index c192b52402ee95ef3f2ffd9dbe25f65ded5ecf6d..4e33df74fa272bbbd3dc9bd9d7a3ae5bbe277e50 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -1588,7 +1588,8 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
? webrtc::RtcpMode::kReducedSize
: webrtc::RtcpMode::kCompound;
if (codec_settings) {
- SetCodec(*codec_settings);
+ bool force_encoder_allocation = false;
+ SetCodec(*codec_settings, force_encoder_allocation);
}
}
@@ -1612,6 +1613,18 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend(
if (options_present) {
VideoOptions old_options = parameters_.options;
parameters_.options.SetAll(*options);
+ if (parameters_.options.is_screencast.value_or(false) !=
+ old_options.is_screencast.value_or(false) &&
+ parameters_.codec_settings) {
+ // If screen content settings change, we may need to recreate the codec
+ // instance so that the correct type is used.
+
+ bool force_encoder_allocation = true;
+ SetCodec(*parameters_.codec_settings, force_encoder_allocation);
+ // Mark screenshare parameter as being updated, then test for any other
+ // changes that may require codec reconfiguration.
+ old_options.is_screencast = options->is_screencast;
+ }
if (parameters_.options != old_options) {
ReconfigureEncoder();
}
@@ -1645,10 +1658,11 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const {
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
- const VideoCodec& codec) {
+ const VideoCodec& codec,
+ bool force_encoder_allocation) {
RTC_DCHECK_RUN_ON(&thread_checker_);
// Do not re-create encoders of the same type.
- if (codec == allocated_encoder_.codec &&
+ if (!force_encoder_allocation && codec == allocated_encoder_.codec &&
allocated_encoder_.encoder != nullptr) {
return allocated_encoder_;
}
@@ -1695,12 +1709,14 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(
}
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
- const VideoCodecSettings& codec_settings) {
+ const VideoCodecSettings& codec_settings,
+ bool force_encoder_allocation) {
RTC_DCHECK_RUN_ON(&thread_checker_);
parameters_.encoder_config = CreateVideoEncoderConfig(codec_settings.codec);
RTC_DCHECK_GT(parameters_.encoder_config.number_of_streams, 0);
- AllocatedEncoder new_encoder = CreateVideoEncoder(codec_settings.codec);
+ AllocatedEncoder new_encoder =
+ CreateVideoEncoder(codec_settings.codec, force_encoder_allocation);
parameters_.config.encoder_settings.encoder = new_encoder.encoder;
parameters_.config.encoder_settings.full_overuse_time = new_encoder.external;
parameters_.config.encoder_settings.payload_name = codec_settings.codec.name;
@@ -1767,10 +1783,12 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
// Set codecs and options.
if (params.codec) {
- SetCodec(*params.codec);
+ bool force_encoder_allocation = false;
+ SetCodec(*params.codec, force_encoder_allocation);
recreate_stream = false; // SetCodec has already recreated the stream.
} else if (params.conference_mode && parameters_.codec_settings) {
- SetCodec(*parameters_.codec_settings);
+ bool force_encoder_allocation = false;
+ SetCodec(*parameters_.codec_settings, force_encoder_allocation);
recreate_stream = false; // SetCodec has already recreated the stream.
}
if (recreate_stream) {
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698