Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(937)

Unified Diff: webrtc/pc/rtpsender.cc

Issue 2666853002: Move DTMF sender to RtpSender (as opposed to WebRtcSession). (Closed)
Patch Set: Merge with master Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/pc/rtpsender.h ('k') | webrtc/pc/rtpsenderreceiver_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/rtpsender.cc
diff --git a/webrtc/pc/rtpsender.cc b/webrtc/pc/rtpsender.cc
index 3e8c7e122e11bbb0604b29dca7bff844f12f304f..c8ac830bf342ce4b7bcf0b3c83560b69c1984885 100644
--- a/webrtc/pc/rtpsender.cc
+++ b/webrtc/pc/rtpsender.cc
@@ -57,6 +57,7 @@ AudioRtpSender::AudioRtpSender(AudioTrackInterface* track,
sink_adapter_(new LocalAudioSinkAdapter()) {
track_->RegisterObserver(this);
track_->AddSink(sink_adapter_.get());
+ CreateDtmfSender();
}
AudioRtpSender::AudioRtpSender(AudioTrackInterface* track,
@@ -71,6 +72,7 @@ AudioRtpSender::AudioRtpSender(AudioTrackInterface* track,
sink_adapter_(new LocalAudioSinkAdapter()) {
track_->RegisterObserver(this);
track_->AddSink(sink_adapter_.get());
+ CreateDtmfSender();
}
AudioRtpSender::AudioRtpSender(cricket::VoiceChannel* channel,
@@ -79,12 +81,50 @@ AudioRtpSender::AudioRtpSender(cricket::VoiceChannel* channel,
stream_id_(rtc::CreateRandomUuid()),
channel_(channel),
stats_(stats),
- sink_adapter_(new LocalAudioSinkAdapter()) {}
+ sink_adapter_(new LocalAudioSinkAdapter()) {
+ CreateDtmfSender();
+}
AudioRtpSender::~AudioRtpSender() {
+ // For DtmfSender.
+ SignalDestroyed();
Stop();
}
+bool AudioRtpSender::CanInsertDtmf() {
+ if (!channel_) {
+ LOG(LS_ERROR) << "CanInsertDtmf: No audio channel exists.";
+ return false;
+ }
+ // Check that this RTP sender is active (description has been applied that
+ // matches an SSRC to its ID).
+ if (!ssrc_) {
+ LOG(LS_ERROR) << "CanInsertDtmf: Sender does not have SSRC.";
+ return false;
+ }
+ return channel_->CanInsertDtmf();
+}
+
+bool AudioRtpSender::InsertDtmf(int code, int duration) {
+ if (!channel_) {
+ LOG(LS_ERROR) << "CanInsertDtmf: No audio channel exists.";
+ return false;
+ }
+ if (!ssrc_) {
+ LOG(LS_ERROR) << "CanInsertDtmf: Sender does not have SSRC.";
+ return false;
+ }
+ if (!channel_->InsertDtmf(ssrc_, code, duration)) {
+ LOG(LS_ERROR) << "Failed to insert DTMF to channel.";
+ return false;
+ }
+ return true;
+}
+
+sigslot::signal0<>* AudioRtpSender::GetOnDestroyedSignal() {
+ return &SignalDestroyed;
+}
+
void AudioRtpSender::OnChanged() {
TRACE_EVENT0("webrtc", "AudioRtpSender::OnChanged");
RTC_DCHECK(!stopped_);
@@ -158,6 +198,10 @@ bool AudioRtpSender::SetParameters(const RtpParameters& parameters) {
return channel_->SetRtpSendParameters(ssrc_, parameters);
}
+rtc::scoped_refptr<DtmfSenderInterface> AudioRtpSender::GetDtmfSender() const {
+ return dtmf_sender_proxy_;
+}
+
void AudioRtpSender::SetSsrc(uint32_t ssrc) {
TRACE_EVENT0("webrtc", "AudioRtpSender::SetSsrc");
if (stopped_ || ssrc == ssrc_) {
@@ -237,6 +281,20 @@ void AudioRtpSender::ClearAudioSend() {
}
}
+void AudioRtpSender::CreateDtmfSender() {
+ // Should be on signaling thread.
+ // TODO(deadbeef): Add thread checking to RtpSender/RtpReceiver
+ // implementations.
+ rtc::scoped_refptr<DtmfSenderInterface> sender(
+ DtmfSender::Create(track_, rtc::Thread::Current(), this));
+ if (!sender.get()) {
+ LOG(LS_ERROR) << "CreateDtmfSender failed on DtmfSender::Create.";
+ RTC_NOTREACHED();
+ }
+ dtmf_sender_proxy_ =
+ DtmfSenderProxy::Create(rtc::Thread::Current(), sender.get());
+}
+
VideoRtpSender::VideoRtpSender(VideoTrackInterface* track,
const std::string& stream_id,
cricket::VideoChannel* channel)
@@ -336,6 +394,11 @@ bool VideoRtpSender::SetParameters(const RtpParameters& parameters) {
return channel_->SetRtpSendParameters(ssrc_, parameters);
}
+rtc::scoped_refptr<DtmfSenderInterface> VideoRtpSender::GetDtmfSender() const {
+ LOG(LS_ERROR) << "Tried to get DTMF sender from video sender.";
+ return nullptr;
+}
+
void VideoRtpSender::SetSsrc(uint32_t ssrc) {
TRACE_EVENT0("webrtc", "VideoRtpSender::SetSsrc");
if (stopped_ || ssrc == ssrc_) {
« no previous file with comments | « webrtc/pc/rtpsender.h ('k') | webrtc/pc/rtpsenderreceiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698