mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Remove sigslot usage from DtmfProviderInterface
Bug: webrtc:11943 Change-Id: I452efbb099affc10e9197573fa0e40094a0d90ca Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/270420 Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37681}
This commit is contained in:
parent
9582f7548c
commit
da2afbd70c
6 changed files with 18 additions and 56 deletions
|
@ -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();
|
||||
|
|
|
@ -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<DtmfSender> 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_);
|
||||
|
|
|
@ -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<DtmfInfo>& dtmf_info_queue() const {
|
||||
return dtmf_info_queue_;
|
||||
|
@ -111,7 +105,6 @@ class FakeDtmfProvider : public DtmfProviderInterface {
|
|||
bool can_insert_ = false;
|
||||
std::vector<DtmfInfo> 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_);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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<AudioTrackInterface>(
|
||||
static_cast<AudioTrackInterface*>(track_.get()));
|
||||
}
|
||||
sigslot::signal0<> SignalDestroyed;
|
||||
|
||||
LegacyStatsCollectorInterface* legacy_stats_ = nullptr;
|
||||
rtc::scoped_refptr<DtmfSender> dtmf_sender_;
|
||||
rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender_proxy_;
|
||||
bool cached_track_enabled_ = false;
|
||||
|
||||
|
|
|
@ -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<std::pair<RidList, RidList>>,
|
||||
public sigslot::has_slots<> {
|
||||
public ::testing::WithParamInterface<std::pair<RidList, RidList>> {
|
||||
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<MediaStreamInterface> local_stream_;
|
||||
rtc::scoped_refptr<VideoTrackInterface> video_track_;
|
||||
rtc::scoped_refptr<AudioTrackInterface> 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();
|
||||
|
|
Loading…
Reference in a new issue