| 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_) {
|
|
|