Move DTMF sender to RtpSender (as opposed to WebRtcSession).
Previously in the spec, there was a createDtmfSender method on
PeerConnection, but that's been replaced by a "dtmf" attribute
on RtpSender, which allows getting a DTMF sender without having
an audio track.
This also simplifies the code slightly, since tracks are now not
necessary for identification.
BUG=webrtc:4180
Review-Url: https://codereview.webrtc.org/2666853002
Cr-Commit-Position: refs/heads/master@{#16409}
diff --git a/webrtc/pc/rtpsender.h b/webrtc/pc/rtpsender.h
index ed244b4..0322399 100644
--- a/webrtc/pc/rtpsender.h
+++ b/webrtc/pc/rtpsender.h
@@ -24,6 +24,7 @@
#include "webrtc/base/criticalsection.h"
#include "webrtc/media/base/audiosource.h"
#include "webrtc/pc/channel.h"
+#include "webrtc/pc/dtmfsender.h"
#include "webrtc/pc/statscollector.h"
namespace webrtc {
@@ -68,7 +69,8 @@
rtc::CriticalSection lock_;
};
-class AudioRtpSender : public ObserverInterface,
+class AudioRtpSender : public DtmfProviderInterface,
+ public ObserverInterface,
public rtc::RefCountedObject<RtpSenderInternal> {
public:
// StatsCollector provided so that Add/RemoveLocalAudioTrack can be called
@@ -91,10 +93,15 @@
virtual ~AudioRtpSender();
- // ObserverInterface implementation
+ // DtmfSenderProvider implementation.
+ bool CanInsertDtmf() override;
+ bool InsertDtmf(int code, int duration) override;
+ sigslot::signal0<>* GetOnDestroyedSignal() override;
+
+ // ObserverInterface implementation.
void OnChanged() override;
- // RtpSenderInterface implementation
+ // RtpSenderInterface implementation.
bool SetTrack(MediaStreamTrackInterface* track) override;
rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
return track_;
@@ -116,6 +123,8 @@
RtpParameters GetParameters() const override;
bool SetParameters(const RtpParameters& parameters) override;
+ rtc::scoped_refptr<DtmfSenderInterface> GetDtmfSender() const override;
+
// RtpSenderInternal implementation.
void SetSsrc(uint32_t ssrc) override;
@@ -140,11 +149,16 @@
// Helper function to call SetAudioSend with "stop sending" parameters.
void ClearAudioSend();
+ void CreateDtmfSender();
+
+ sigslot::signal0<> SignalDestroyed;
+
std::string id_;
std::string stream_id_;
cricket::VoiceChannel* channel_ = nullptr;
StatsCollector* stats_;
rtc::scoped_refptr<AudioTrackInterface> track_;
+ rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender_proxy_;
uint32_t ssrc_ = 0;
bool cached_track_enabled_ = false;
bool stopped_ = false;
@@ -197,6 +211,8 @@
RtpParameters GetParameters() const override;
bool SetParameters(const RtpParameters& parameters) override;
+ rtc::scoped_refptr<DtmfSenderInterface> GetDtmfSender() const override;
+
// RtpSenderInternal implementation.
void SetSsrc(uint32_t ssrc) override;