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

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

Issue 1765423005: Change VideoRtpReceiver to create remote VideoTrack and VideoTrackSource. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixed up the comments. Created 4 years, 9 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/base/videobroadcaster.cc ('k') | no next file » | 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 02de6b8e6bd499ec67f44b337efc74e1d48a8c5f..daffc2fd3419f66ff615a90fd7a576d43fd744c9 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -1616,6 +1616,8 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetCapturer(
}
}
capturer_ = capturer;
+ // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
+ // that might cause a lock order inversion.
capturer_->AddOrUpdateSink(this, sink_wants_);
return true;
}
@@ -1631,6 +1633,8 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::DisconnectCapturer() {
return false;
}
+ // |capturer_->RemoveSink| may not be called while holding |lock_| since
+ // that might cause a lock order inversion.
capturer_->RemoveSink(this);
capturer_ = NULL;
// Reset |cpu_restricted_counter_| if the capturer is changed. It is not
@@ -1755,46 +1759,54 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
const ChangedSendParameters& params) {
- rtc::CritScope cs(&lock_);
- // |recreate_stream| means construction-time parameters have changed and the
- // sending stream needs to be reset with the new config.
- bool recreate_stream = false;
- if (params.rtcp_mode) {
- parameters_.config.rtp.rtcp_mode = *params.rtcp_mode;
- recreate_stream = true;
- }
+ {
+ rtc::CritScope cs(&lock_);
+ // |recreate_stream| means construction-time parameters have changed and the
+ // sending stream needs to be reset with the new config.
+ bool recreate_stream = false;
+ if (params.rtcp_mode) {
+ parameters_.config.rtp.rtcp_mode = *params.rtcp_mode;
+ recreate_stream = true;
+ }
+ if (params.rtp_header_extensions) {
+ parameters_.config.rtp.extensions = *params.rtp_header_extensions;
+ recreate_stream = true;
+ }
+ if (params.max_bandwidth_bps) {
+ // Max bitrate has changed, reconfigure encoder settings on the next frame
+ // or stream recreation.
+ parameters_.max_bitrate_bps = *params.max_bandwidth_bps;
+ pending_encoder_reconfiguration_ = true;
+ }
+ if (params.conference_mode) {
+ parameters_.conference_mode = *params.conference_mode;
+ }
+ if (params.options)
+ SetOptions(*params.options);
+
+ // Set codecs and options.
+ if (params.codec) {
+ SetCodec(*params.codec);
+ return;
+ } else if (params.conference_mode && parameters_.codec_settings) {
+ SetCodec(*parameters_.codec_settings);
+ return;
+ }
+ if (recreate_stream) {
+ LOG(LS_INFO)
+ << "RecreateWebRtcStream (send) because of SetSendParameters";
+ RecreateWebRtcStream();
+ }
+ } // release |lock_|
+
+ // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
+ // that might cause a lock order inversion.
if (params.rtp_header_extensions) {
- parameters_.config.rtp.extensions = *params.rtp_header_extensions;
sink_wants_.rotation_applied = !ContainsHeaderExtension(
*params.rtp_header_extensions, kRtpVideoRotationHeaderExtension);
if (capturer_) {
capturer_->AddOrUpdateSink(this, sink_wants_);
}
- recreate_stream = true;
- }
- if (params.max_bandwidth_bps) {
- // Max bitrate has changed, reconfigure encoder settings on the next frame
- // or stream recreation.
- parameters_.max_bitrate_bps = *params.max_bandwidth_bps;
- pending_encoder_reconfiguration_ = true;
- }
- if (params.conference_mode) {
- parameters_.conference_mode = *params.conference_mode;
- }
- if (params.options)
- SetOptions(*params.options);
-
- // Set codecs and options.
- if (params.codec) {
- SetCodec(*params.codec);
- return;
- } else if (params.conference_mode && parameters_.codec_settings) {
- SetCodec(*parameters_.codec_settings);
- return;
- }
- if (recreate_stream) {
- LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters";
- RecreateWebRtcStream();
}
}
@@ -1961,6 +1973,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) {
sink_wants_.max_pixel_count = max_pixel_count;
sink_wants_.max_pixel_count_step_up = max_pixel_count_step_up;
}
+ // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
+ // that might cause a lock order inversion.
capturer_->AddOrUpdateSink(this, sink_wants_);
}
« no previous file with comments | « webrtc/media/base/videobroadcaster.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698