[sigslot] - Remove sigslot from MediaStreamObserver. Bug: webrtc:11943 Change-Id: Icf91ce850913c26e45dbca1940cafd600c235ad4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227340 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34632}
diff --git a/pc/media_stream_observer.cc b/pc/media_stream_observer.cc index e66634a..28caccf 100644 --- a/pc/media_stream_observer.cc +++ b/pc/media_stream_observer.cc
@@ -10,17 +10,32 @@ #include "pc/media_stream_observer.h" +#include <functional> #include <string> +#include <utility> #include <vector> #include "absl/algorithm/container.h" namespace webrtc { -MediaStreamObserver::MediaStreamObserver(MediaStreamInterface* stream) +MediaStreamObserver::MediaStreamObserver( + MediaStreamInterface* stream, + std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_added_callback, + std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_removed_callback, + std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_added_callback, + std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_removed_callback) : stream_(stream), cached_audio_tracks_(stream->GetAudioTracks()), - cached_video_tracks_(stream->GetVideoTracks()) { + cached_video_tracks_(stream->GetVideoTracks()), + audio_track_added_callback_(std::move(audio_track_added_callback)), + audio_track_removed_callback_(std::move(audio_track_removed_callback)), + video_track_added_callback_(std::move(video_track_added_callback)), + video_track_removed_callback_(std::move(video_track_removed_callback)) { stream_->RegisterObserver(this); } @@ -39,7 +54,7 @@ [cached_track](const AudioTrackVector::value_type& new_track) { return new_track->id() == cached_track->id(); })) { - SignalAudioTrackRemoved(cached_track.get(), stream_); + audio_track_removed_callback_(cached_track.get(), stream_); } } @@ -50,7 +65,7 @@ [new_track](const AudioTrackVector::value_type& cached_track) { return new_track->id() == cached_track->id(); })) { - SignalAudioTrackAdded(new_track.get(), stream_); + audio_track_added_callback_(new_track.get(), stream_); } } @@ -61,7 +76,7 @@ [cached_track](const VideoTrackVector::value_type& new_track) { return new_track->id() == cached_track->id(); })) { - SignalVideoTrackRemoved(cached_track.get(), stream_); + video_track_removed_callback_(cached_track.get(), stream_); } } @@ -72,7 +87,7 @@ [new_track](const VideoTrackVector::value_type& cached_track) { return new_track->id() == cached_track->id(); })) { - SignalVideoTrackAdded(new_track.get(), stream_); + video_track_added_callback_(new_track.get(), stream_); } }
diff --git a/pc/media_stream_observer.h b/pc/media_stream_observer.h index 890600d..4c4f221 100644 --- a/pc/media_stream_observer.h +++ b/pc/media_stream_observer.h
@@ -11,9 +11,10 @@ #ifndef PC_MEDIA_STREAM_OBSERVER_H_ #define PC_MEDIA_STREAM_OBSERVER_H_ +#include <functional> + #include "api/media_stream_interface.h" #include "api/scoped_refptr.h" -#include "rtc_base/third_party/sigslot/sigslot.h" namespace webrtc { @@ -21,26 +22,34 @@ // corresponding signals. class MediaStreamObserver : public ObserverInterface { public: - explicit MediaStreamObserver(MediaStreamInterface* stream); + explicit MediaStreamObserver( + MediaStreamInterface* stream, + std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_added_callback, + std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_removed_callback, + std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_added_callback, + std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_removed_callback); ~MediaStreamObserver() override; const MediaStreamInterface* stream() const { return stream_; } void OnChanged() override; - sigslot::signal2<AudioTrackInterface*, MediaStreamInterface*> - SignalAudioTrackAdded; - sigslot::signal2<AudioTrackInterface*, MediaStreamInterface*> - SignalAudioTrackRemoved; - sigslot::signal2<VideoTrackInterface*, MediaStreamInterface*> - SignalVideoTrackAdded; - sigslot::signal2<VideoTrackInterface*, MediaStreamInterface*> - SignalVideoTrackRemoved; - private: rtc::scoped_refptr<MediaStreamInterface> stream_; AudioTrackVector cached_audio_tracks_; VideoTrackVector cached_video_tracks_; + const std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_added_callback_; + const std::function<void(AudioTrackInterface*, MediaStreamInterface*)> + audio_track_removed_callback_; + const std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_added_callback_; + const std::function<void(VideoTrackInterface*, MediaStreamInterface*)> + video_track_removed_callback_; }; } // namespace webrtc
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc index eaf5f70..7fb7ab2 100644 --- a/pc/sdp_offer_answer.cc +++ b/pc/sdp_offer_answer.cc
@@ -13,6 +13,7 @@ #include <algorithm> #include <iterator> #include <map> +#include <memory> #include <queue> #include <type_traits> #include <utility> @@ -2591,16 +2592,29 @@ } local_streams_->AddStream(local_stream); - MediaStreamObserver* observer = new MediaStreamObserver(local_stream); - observer->SignalAudioTrackAdded.connect( - this, &SdpOfferAnswerHandler::OnAudioTrackAdded); - observer->SignalAudioTrackRemoved.connect( - this, &SdpOfferAnswerHandler::OnAudioTrackRemoved); - observer->SignalVideoTrackAdded.connect( - this, &SdpOfferAnswerHandler::OnVideoTrackAdded); - observer->SignalVideoTrackRemoved.connect( - this, &SdpOfferAnswerHandler::OnVideoTrackRemoved); - stream_observers_.push_back(std::unique_ptr<MediaStreamObserver>(observer)); + auto observer = std::make_unique<MediaStreamObserver>( + local_stream, + [this](AudioTrackInterface* audio_track, + MediaStreamInterface* media_stream) { + RTC_DCHECK_RUN_ON(signaling_thread()); + OnAudioTrackAdded(audio_track, media_stream); + }, + [this](AudioTrackInterface* audio_track, + MediaStreamInterface* media_stream) { + RTC_DCHECK_RUN_ON(signaling_thread()); + OnAudioTrackRemoved(audio_track, media_stream); + }, + [this](VideoTrackInterface* video_track, + MediaStreamInterface* media_stream) { + RTC_DCHECK_RUN_ON(signaling_thread()); + OnVideoTrackAdded(video_track, media_stream); + }, + [this](VideoTrackInterface* video_track, + MediaStreamInterface* media_stream) { + RTC_DCHECK_RUN_ON(signaling_thread()); + OnVideoTrackRemoved(video_track, media_stream); + }); + stream_observers_.push_back(std::move(observer)); for (const auto& track : local_stream->GetAudioTracks()) { rtp_manager()->AddAudioTrack(track.get(), local_stream);
diff --git a/sdk/android/src/jni/pc/media_stream.cc b/sdk/android/src/jni/pc/media_stream.cc index 019f105..c209317 100644 --- a/sdk/android/src/jni/pc/media_stream.cc +++ b/sdk/android/src/jni/pc/media_stream.cc
@@ -25,8 +25,27 @@ : j_media_stream_( env, Java_MediaStream_Constructor(env, - jlongFromPointer(media_stream.get()))), - observer_(std::make_unique<MediaStreamObserver>(media_stream)) { + jlongFromPointer(media_stream.get()))) { + // Create an observer to update the Java stream when the native stream's set + // of tracks changes. + observer_.reset(new MediaStreamObserver( + media_stream, + [this](AudioTrackInterface* audio_track, + MediaStreamInterface* media_stream) { + OnAudioTrackAddedToStream(audio_track, media_stream); + }, + [this](AudioTrackInterface* audio_track, + MediaStreamInterface* media_stream) { + OnAudioTrackRemovedFromStream(audio_track, media_stream); + }, + [this](VideoTrackInterface* video_track, + MediaStreamInterface* media_stream) { + OnVideoTrackAddedToStream(video_track, media_stream); + }, + [this](VideoTrackInterface* video_track, + MediaStreamInterface* media_stream) { + OnVideoTrackRemovedFromStream(video_track, media_stream); + })); for (rtc::scoped_refptr<AudioTrackInterface> track : media_stream->GetAudioTracks()) { Java_MediaStream_addNativeAudioTrack(env, j_media_stream_, @@ -37,18 +56,6 @@ Java_MediaStream_addNativeVideoTrack(env, j_media_stream_, jlongFromPointer(track.release())); } - - // Create an observer to update the Java stream when the native stream's set - // of tracks changes. - observer_->SignalAudioTrackRemoved.connect( - this, &JavaMediaStream::OnAudioTrackRemovedFromStream); - observer_->SignalVideoTrackRemoved.connect( - this, &JavaMediaStream::OnVideoTrackRemovedFromStream); - observer_->SignalAudioTrackAdded.connect( - this, &JavaMediaStream::OnAudioTrackAddedToStream); - observer_->SignalVideoTrackAdded.connect( - this, &JavaMediaStream::OnVideoTrackAddedToStream); - // `j_media_stream` holds one reference. Corresponding Release() is in // MediaStream_free, triggered by MediaStream.dispose(). media_stream.release();
diff --git a/sdk/android/src/jni/pc/media_stream.h b/sdk/android/src/jni/pc/media_stream.h index 135a349..efa177c 100644 --- a/sdk/android/src/jni/pc/media_stream.h +++ b/sdk/android/src/jni/pc/media_stream.h
@@ -21,12 +21,12 @@ namespace webrtc { namespace jni { -class JavaMediaStream : public sigslot::has_slots<> { +class JavaMediaStream { public: explicit JavaMediaStream( JNIEnv* env, rtc::scoped_refptr<MediaStreamInterface> media_stream); - ~JavaMediaStream() override; + ~JavaMediaStream(); const ScopedJavaGlobalRef<jobject>& j_media_stream() { return j_media_stream_;