diff --git a/pc/dtmf_sender.cc b/pc/dtmf_sender.cc index 91d642cc3d..c3bd4b6b7b 100644 --- a/pc/dtmf_sender.cc +++ b/pc/dtmf_sender.cc @@ -75,11 +75,14 @@ DtmfSender::DtmfSender(TaskQueueBase* signaling_thread, inter_tone_gap_(kDtmfDefaultGapMs), comma_delay_(kDtmfDefaultCommaDelayMs) { RTC_DCHECK(signaling_thread_); - if (provider_) { - RTC_DCHECK(provider_->GetOnDestroyedSignal()); - provider_->GetOnDestroyedSignal()->connect( - this, &DtmfSender::OnProviderDestroyed); - } + RTC_DCHECK(provider_); +} + +void DtmfSender::OnDtmfProviderDestroyed() { + RTC_DCHECK_RUN_ON(signaling_thread_); + RTC_DLOG(LS_INFO) << "The Dtmf provider is deleted. Clear the sending queue."; + StopSending(); + provider_ = nullptr; } DtmfSender::~DtmfSender() { @@ -232,14 +235,6 @@ void DtmfSender::DoInsertDtmf() { QueueInsertDtmf(RTC_FROM_HERE, tone_gap); } -void DtmfSender::OnProviderDestroyed() { - RTC_DCHECK_RUN_ON(signaling_thread_); - - RTC_LOG(LS_INFO) << "The Dtmf provider is deleted. Clear the sending queue."; - StopSending(); - provider_ = nullptr; -} - void DtmfSender::StopSending() { if (safety_flag_) { safety_flag_->SetNotAlive(); diff --git a/pc/dtmf_sender.h b/pc/dtmf_sender.h index eb3bf5fa7b..c295f032f9 100644 --- a/pc/dtmf_sender.h +++ b/pc/dtmf_sender.h @@ -23,7 +23,6 @@ #include "pc/proxy.h" #include "rtc_base/location.h" #include "rtc_base/ref_count.h" -#include "rtc_base/third_party/sigslot/sigslot.h" #include "rtc_base/thread_annotations.h" // DtmfSender is the native implementation of the RTCDTMFSender defined by @@ -43,19 +42,18 @@ class DtmfProviderInterface { // The `duration` indicates the length of the DTMF tone in ms. // Returns true on success and false on failure. virtual bool InsertDtmf(int code, int duration) = 0; - // Returns a `sigslot::signal0<>` signal. The signal should fire before - // the provider is destroyed. - virtual sigslot::signal0<>* GetOnDestroyedSignal() = 0; protected: virtual ~DtmfProviderInterface() {} }; -class DtmfSender : public DtmfSenderInterface, public sigslot::has_slots<> { +class DtmfSender : public DtmfSenderInterface { public: static rtc::scoped_refptr Create(TaskQueueBase* signaling_thread, DtmfProviderInterface* provider); + void OnDtmfProviderDestroyed(); + // Implements DtmfSenderInterface. void RegisterObserver(DtmfSenderObserverInterface* observer) override; void UnregisterObserver() override; @@ -85,8 +83,6 @@ class DtmfSender : public DtmfSenderInterface, public sigslot::has_slots<> { // The DTMF sending task. void DoInsertDtmf() RTC_RUN_ON(signaling_thread_); - void OnProviderDestroyed(); - void StopSending() RTC_RUN_ON(signaling_thread_); DtmfSenderObserverInterface* observer_ RTC_GUARDED_BY(signaling_thread_); diff --git a/pc/dtmf_sender_unittest.cc b/pc/dtmf_sender_unittest.cc index 922abdcc2b..ab5ba9eaee 100644 --- a/pc/dtmf_sender_unittest.cc +++ b/pc/dtmf_sender_unittest.cc @@ -77,8 +77,6 @@ class FakeDtmfProvider : public DtmfProviderInterface { FakeDtmfProvider() : last_insert_dtmf_call_(0) {} - ~FakeDtmfProvider() { SignalDestroyed(); } - // Implements DtmfProviderInterface. bool CanInsertDtmf() override { return can_insert_; } @@ -95,10 +93,6 @@ class FakeDtmfProvider : public DtmfProviderInterface { return true; } - sigslot::signal0<>* GetOnDestroyedSignal() override { - return &SignalDestroyed; - } - // getter and setter const std::vector& dtmf_info_queue() const { return dtmf_info_queue_; @@ -111,7 +105,6 @@ class FakeDtmfProvider : public DtmfProviderInterface { bool can_insert_ = false; std::vector dtmf_info_queue_; int64_t last_insert_dtmf_call_; - sigslot::signal0<> SignalDestroyed; }; class DtmfSenderTest : public ::testing::Test { @@ -273,6 +266,7 @@ TEST_F(DtmfSenderTest, InsertDtmfWhileProviderIsDeleted) { EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs, fake_clock_); // Delete provider. + dtmf_->OnDtmfProviderDestroyed(); provider_.reset(); // The queue should be discontinued so no more tone callbacks. SIMULATED_WAIT(false, 200, fake_clock_); diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc index 0b9642df34..bf41f97cf2 100644 --- a/pc/rtp_sender.cc +++ b/pc/rtp_sender.cc @@ -467,14 +467,13 @@ AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread, SetStreamsObserver* set_streams_observer) : RtpSenderBase(worker_thread, id, set_streams_observer), legacy_stats_(legacy_stats), - dtmf_sender_proxy_(DtmfSenderProxy::Create( - rtc::Thread::Current(), - DtmfSender::Create(rtc::Thread::Current(), this))), + dtmf_sender_(DtmfSender::Create(rtc::Thread::Current(), this)), + dtmf_sender_proxy_( + DtmfSenderProxy::Create(rtc::Thread::Current(), dtmf_sender_)), sink_adapter_(new LocalAudioSinkAdapter()) {} AudioRtpSender::~AudioRtpSender() { - // For DtmfSender. - SignalDestroyed(); + dtmf_sender_->OnDtmfProviderDestroyed(); Stop(); } @@ -511,10 +510,6 @@ bool AudioRtpSender::InsertDtmf(int code, int duration) { return success; } -sigslot::signal0<>* AudioRtpSender::GetOnDestroyedSignal() { - return &SignalDestroyed; -} - void AudioRtpSender::OnChanged() { RTC_DCHECK_RUN_ON(signaling_thread_); TRACE_EVENT0("webrtc", "AudioRtpSender::OnChanged"); diff --git a/pc/rtp_sender.h b/pc/rtp_sender.h index f552df0a3b..6e07dde4c5 100644 --- a/pc/rtp_sender.h +++ b/pc/rtp_sender.h @@ -40,7 +40,6 @@ #include "pc/legacy_stats_collector_interface.h" #include "rtc_base/checks.h" #include "rtc_base/synchronization/mutex.h" -#include "rtc_base/third_party/sigslot/sigslot.h" #include "rtc_base/thread.h" #include "rtc_base/thread_annotations.h" @@ -314,7 +313,6 @@ class AudioRtpSender : public DtmfProviderInterface, public RtpSenderBase { // DtmfSenderProvider implementation. bool CanInsertDtmf() override; bool InsertDtmf(int code, int duration) override; - sigslot::signal0<>* GetOnDestroyedSignal() override; // ObserverInterface implementation. void OnChanged() override; @@ -351,9 +349,9 @@ class AudioRtpSender : public DtmfProviderInterface, public RtpSenderBase { return rtc::scoped_refptr( static_cast(track_.get())); } - sigslot::signal0<> SignalDestroyed; LegacyStatsCollectorInterface* legacy_stats_ = nullptr; + rtc::scoped_refptr dtmf_sender_; rtc::scoped_refptr dtmf_sender_proxy_; bool cached_track_enabled_ = false; diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc index 94b79f4567..333fde5413 100644 --- a/pc/rtp_sender_receiver_unittest.cc +++ b/pc/rtp_sender_receiver_unittest.cc @@ -63,7 +63,6 @@ #include "rtc_base/checks.h" #include "rtc_base/gunit.h" #include "rtc_base/location.h" -#include "rtc_base/third_party/sigslot/sigslot.h" #include "rtc_base/thread.h" #include "test/gmock.h" #include "test/gtest.h" @@ -102,8 +101,7 @@ namespace webrtc { class RtpSenderReceiverTest : public ::testing::Test, - public ::testing::WithParamInterface>, - public sigslot::has_slots<> { + public ::testing::WithParamInterface> { public: RtpSenderReceiverTest() : network_thread_(rtc::Thread::Current()), @@ -209,8 +207,6 @@ class RtpSenderReceiverTest audio_rtp_sender_->SetStreams({local_stream_->id()}); audio_rtp_sender_->SetMediaChannel(voice_media_channel()); audio_rtp_sender_->SetSsrc(kAudioSsrc); - audio_rtp_sender_->GetOnDestroyedSignal()->connect( - this, &RtpSenderReceiverTest::OnAudioSenderDestroyed); VerifyVoiceChannelInput(); } @@ -220,8 +216,6 @@ class RtpSenderReceiverTest audio_rtp_sender_->SetMediaChannel(voice_media_channel()); } - void OnAudioSenderDestroyed() { audio_sender_destroyed_signal_fired_ = true; } - void CreateVideoRtpSender(uint32_t ssrc) { CreateVideoRtpSender(false, ssrc); } @@ -528,7 +522,6 @@ class RtpSenderReceiverTest rtc::scoped_refptr local_stream_; rtc::scoped_refptr video_track_; rtc::scoped_refptr audio_track_; - bool audio_sender_destroyed_signal_fired_ = false; webrtc::test::ScopedKeyValueConfig field_trials_; }; @@ -1621,15 +1614,6 @@ TEST_F(RtpSenderReceiverTest, InsertDtmf) { send_ssrc, 2, expected_duration)); } -// Make sure the signal from "GetOnDestroyedSignal()" fires when the sender is -// destroyed, which is needed for the DTMF sender. -TEST_F(RtpSenderReceiverTest, TestOnDestroyedSignal) { - CreateAudioRtpSender(); - EXPECT_FALSE(audio_sender_destroyed_signal_fired_); - audio_rtp_sender_ = nullptr; - EXPECT_TRUE(audio_sender_destroyed_signal_fired_); -} - // Validate that the default FrameEncryptor setting is nullptr. TEST_F(RtpSenderReceiverTest, AudioSenderCanSetFrameEncryptor) { CreateAudioRtpSender();