From b66003ca79cd34f65ef964a5e3b4766bc97a5659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Tue, 5 Feb 2019 22:41:20 +0100 Subject: [PATCH] Delete video source proxying in WebRtcVideoSendStream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10147 Change-Id: Ib9f399e79d99f7d8db53fa38ef4b92986913ac26 Reviewed-on: https://webrtc-review.googlesource.com/c/121569 Reviewed-by: Erik Språng Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/master@{#26633} --- media/engine/webrtc_video_engine.cc | 40 +++-------------------------- media/engine/webrtc_video_engine.h | 14 ++-------- 2 files changed, 5 insertions(+), 49 deletions(-) diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index e0018726f1..9c97bd1567 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -1567,7 +1567,6 @@ WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream( enable_cpu_overuse_detection_(enable_cpu_overuse_detection), source_(nullptr), stream_(nullptr), - encoder_sink_(nullptr), parameters_(std::move(config), options, max_bitrate_bps, codec_settings), rtp_parameters_(CreateRtpParametersWithEncodings(sp)), sending_(false) { @@ -1663,7 +1662,7 @@ bool WebRtcVideoChannel::WebRtcVideoSendStream::SetVideoSend( // Switch to the new source. source_ = source; if (source && stream_) { - stream_->SetSource(this, GetDegradationPreference()); + stream_->SetSource(source_, GetDegradationPreference()); } return true; } @@ -1843,7 +1842,7 @@ webrtc::RTCError WebRtcVideoChannel::WebRtcVideoSendStream::SetRtpParameters( UpdateSendState(); } if (new_degradation_preference) { - stream_->SetSource(this, GetDegradationPreference()); + stream_->SetSource(source_, GetDegradationPreference()); } return webrtc::RTCError::OK(); } @@ -2024,39 +2023,6 @@ void WebRtcVideoChannel::WebRtcVideoSendStream::SetSend(bool send) { UpdateSendState(); } -void WebRtcVideoChannel::WebRtcVideoSendStream::RemoveSink( - rtc::VideoSinkInterface* sink) { - RTC_DCHECK_RUN_ON(&thread_checker_); - RTC_DCHECK(encoder_sink_ == sink); - encoder_sink_ = nullptr; - source_->RemoveSink(sink); -} - -void WebRtcVideoChannel::WebRtcVideoSendStream::AddOrUpdateSink( - rtc::VideoSinkInterface* sink, - const rtc::VideoSinkWants& wants) { - if (worker_thread_ == rtc::Thread::Current()) { - // AddOrUpdateSink is called on |worker_thread_| if this is the first - // registration of |sink|. - RTC_DCHECK_RUN_ON(&thread_checker_); - encoder_sink_ = sink; - source_->AddOrUpdateSink(encoder_sink_, wants); - } else { - // Subsequent calls to AddOrUpdateSink will happen on the encoder task - // queue. - invoker_.AsyncInvoke( - RTC_FROM_HERE, worker_thread_, [this, sink, wants] { - RTC_DCHECK_RUN_ON(&thread_checker_); - // |sink| may be invalidated after this task was posted since - // RemoveSink is called on the worker thread. - bool encoder_sink_valid = (sink == encoder_sink_); - if (source_ && encoder_sink_valid) { - source_->AddOrUpdateSink(encoder_sink_, wants); - } - }); - } -} - VideoSenderInfo WebRtcVideoChannel::WebRtcVideoSendStream::GetVideoSenderInfo( bool log_stats) { VideoSenderInfo info; @@ -2179,7 +2145,7 @@ void WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream() { parameters_.encoder_config.encoder_specific_settings = NULL; if (source_) { - stream_->SetSource(this, GetDegradationPreference()); + stream_->SetSource(source_, GetDegradationPreference()); } // Call stream_->Start() if necessary conditions are met. diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index a3d5a2f42b..464c78f43e 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -254,8 +254,7 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { const std::vector& codecs); // Wrapper for the sender part. - class WebRtcVideoSendStream - : public rtc::VideoSourceInterface { + class WebRtcVideoSendStream { public: WebRtcVideoSendStream( webrtc::Call* call, @@ -276,14 +275,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { void SetFrameEncryptor( rtc::scoped_refptr frame_encryptor); - // Implements rtc::VideoSourceInterface. - // WebRtcVideoSendStream acts as a source to the webrtc::VideoSendStream - // in |stream_|. This is done to proxy VideoSinkWants from the encoder to - // the worker thread. - void AddOrUpdateSink(rtc::VideoSinkInterface* sink, - const rtc::VideoSinkWants& wants) override; - void RemoveSink(rtc::VideoSinkInterface* sink) override; - bool SetVideoSend(const VideoOptions* options, rtc::VideoSourceInterface* source); @@ -341,8 +332,7 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { RTC_GUARDED_BY(&thread_checker_); webrtc::VideoSendStream* stream_ RTC_GUARDED_BY(&thread_checker_); - rtc::VideoSinkInterface* encoder_sink_ - RTC_GUARDED_BY(&thread_checker_); + // Contains settings that are the same for all streams in the MediaChannel, // such as codecs, header extensions, and the global bitrate limit for the // entire channel.