Remove Channel::SetRingbackTone() and Channel::PlayRingbackTone(), and the code beneath it (within libjingle).
BUG=webrtc:4690
TBR=juberti
Review URL: https://codereview.webrtc.org/1325023005
Cr-Commit-Position: refs/heads/master@{#10011}
diff --git a/talk/media/base/fakemediaengine.h b/talk/media/base/fakemediaengine.h
index 3c48aed..96d5521 100644
--- a/talk/media/base/fakemediaengine.h
+++ b/talk/media/base/fakemediaengine.h
@@ -241,9 +241,6 @@
const AudioOptions& options)
: engine_(engine),
fail_set_send_(false),
- ringback_tone_ssrc_(0),
- ringback_tone_play_(false),
- ringback_tone_loop_(false),
time_since_last_typing_(-1) {
output_scalings_[0] = OutputScaling(); // For default channel.
SetOptions(options);
@@ -257,10 +254,6 @@
}
const AudioOptions& options() const { return options_; }
- uint32 ringback_tone_ssrc() const { return ringback_tone_ssrc_; }
- bool ringback_tone_play() const { return ringback_tone_play_; }
- bool ringback_tone_loop() const { return ringback_tone_loop_; }
-
virtual bool SetSendParameters(const AudioSendParameters& params) {
return (SetSendCodecs(params.codecs) &&
SetSendRtpHeaderExtensions(params.extensions) &&
@@ -337,14 +330,6 @@
int time_window, int cost_per_typing, int reporting_threshold,
int penalty_decay, int type_event_delay) {}
- virtual bool SetRingbackTone(const char* buf, int len) { return true; }
- virtual bool PlayRingbackTone(uint32 ssrc, bool play, bool loop) {
- ringback_tone_ssrc_ = ssrc;
- ringback_tone_play_ = play;
- ringback_tone_loop_ = loop;
- return true;
- }
-
virtual bool CanInsertDtmf() {
for (std::vector<AudioCodec>::const_iterator it = send_codecs_.begin();
it != send_codecs_.end(); ++it) {
@@ -474,9 +459,6 @@
std::map<uint32, OutputScaling> output_scalings_;
std::vector<DtmfInfo> dtmf_info_queue_;
bool fail_set_send_;
- uint32 ringback_tone_ssrc_;
- bool ringback_tone_play_;
- bool ringback_tone_loop_;
int time_since_last_typing_;
AudioOptions options_;
std::map<uint32, VoiceChannelAudioSink*> local_renderers_;
diff --git a/talk/media/base/mediachannel.h b/talk/media/base/mediachannel.h
index ec11694..4911e6e 100644
--- a/talk/media/base/mediachannel.h
+++ b/talk/media/base/mediachannel.h
@@ -1086,10 +1086,6 @@
int type_event_delay) = 0;
// Set left and right scale for speaker output volume of the specified ssrc.
virtual bool SetOutputScaling(uint32 ssrc, double left, double right) = 0;
- // Specifies a ringback tone to be played during call setup.
- virtual bool SetRingbackTone(const char *buf, int len) = 0;
- // Plays or stops the aforementioned ringback tone
- virtual bool PlayRingbackTone(uint32 ssrc, bool play, bool loop) = 0;
// Returns if the telephone-event has been negotiated.
virtual bool CanInsertDtmf() { return false; }
// Send and/or play a DTMF |event| according to the |flags|.
diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc
index d0eb4ae..642fd3d 100644
--- a/talk/media/webrtc/webrtcvoiceengine.cc
+++ b/talk/media/webrtc/webrtcvoiceengine.cc
@@ -2860,53 +2860,6 @@
return true;
}
-bool WebRtcVoiceMediaChannel::SetRingbackTone(const char *buf, int len) {
- ringback_tone_.reset(new WebRtcSoundclipStream(buf, len));
- return true;
-}
-
-bool WebRtcVoiceMediaChannel::PlayRingbackTone(uint32 ssrc,
- bool play, bool loop) {
- if (!ringback_tone_) {
- return false;
- }
-
- // The voe file api is not available in chrome.
- if (!engine()->voe()->file()) {
- return false;
- }
-
- // Determine which VoiceEngine channel to play on.
- int channel = (ssrc == 0) ? voe_channel() : GetReceiveChannelNum(ssrc);
- if (channel == -1) {
- return false;
- }
-
- // Make sure the ringtone is cued properly, and play it out.
- if (play) {
- ringback_tone_->set_loop(loop);
- ringback_tone_->Rewind();
- if (engine()->voe()->file()->StartPlayingFileLocally(channel,
- ringback_tone_.get()) == -1) {
- LOG_RTCERR2(StartPlayingFileLocally, channel, ringback_tone_.get());
- LOG(LS_ERROR) << "Unable to start ringback tone";
- return false;
- }
- ringback_channels_.insert(channel);
- LOG(LS_INFO) << "Started ringback on channel " << channel;
- } else {
- if (engine()->voe()->file()->IsPlayingFileLocally(channel) == 1 &&
- engine()->voe()->file()->StopPlayingFileLocally(channel) == -1) {
- LOG_RTCERR1(StopPlayingFileLocally, channel);
- return false;
- }
- LOG(LS_INFO) << "Stopped ringback on channel " << channel;
- ringback_channels_.erase(channel);
- }
-
- return true;
-}
-
bool WebRtcVoiceMediaChannel::CanInsertDtmf() {
return dtmf_allowed_;
}
@@ -2981,22 +2934,6 @@
which_channel = voe_channel();
}
- // Stop any ringback that might be playing on the channel.
- // It's possible the ringback has already stopped, ih which case we'll just
- // use the opportunity to remove the channel from ringback_channels_.
- if (engine()->voe()->file()) {
- const std::set<int>::iterator it = ringback_channels_.find(which_channel);
- if (it != ringback_channels_.end()) {
- if (engine()->voe()->file()->IsPlayingFileLocally(
- which_channel) == 1) {
- engine()->voe()->file()->StopPlayingFileLocally(which_channel);
- LOG(LS_INFO) << "Stopped ringback on channel " << which_channel
- << " due to incoming media";
- }
- ringback_channels_.erase(which_channel);
- }
- }
-
// Pass it off to the decoder.
engine()->voe()->network()->ReceivedRTPPacket(
which_channel, packet->data(), packet->size(),
@@ -3617,18 +3554,6 @@
return true;
}
-int WebRtcSoundclipStream::Read(void *buf, size_t len) {
- size_t res = 0;
- mem_.Read(buf, len, &res, NULL);
- return static_cast<int>(res);
-}
-
-int WebRtcSoundclipStream::Rewind() {
- mem_.Rewind();
- // Return -1 to keep VoiceEngine from looping.
- return (loop_) ? 0 : -1;
-}
-
} // namespace cricket
#endif // HAVE_WEBRTC_VOICE
diff --git a/talk/media/webrtc/webrtcvoiceengine.h b/talk/media/webrtc/webrtcvoiceengine.h
index 5bf1899..655d3c9 100644
--- a/talk/media/webrtc/webrtcvoiceengine.h
+++ b/talk/media/webrtc/webrtcvoiceengine.h
@@ -53,23 +53,6 @@
namespace cricket {
-// WebRtcSoundclipStream is an adapter object that allows a memory stream to be
-// passed into WebRtc, and support looping.
-class WebRtcSoundclipStream : public webrtc::InStream {
- public:
- WebRtcSoundclipStream(const char* buf, size_t len)
- : mem_(buf, len), loop_(true) {
- }
- void set_loop(bool loop) { loop_ = loop; }
-
- int Read(void* buf, size_t len) override;
- int Rewind() override;
-
- private:
- rtc::MemoryStream mem_;
- bool loop_;
-};
-
// WebRtcMonitorStream is used to monitor a stream coming from WebRtc.
// For now we just dump the data.
class WebRtcMonitorStream : public webrtc::OutStream {
@@ -316,8 +299,6 @@
int type_event_delay) override;
bool SetOutputScaling(uint32 ssrc, double left, double right) override;
- bool SetRingbackTone(const char* buf, int len) override;
- bool PlayRingbackTone(uint32 ssrc, bool play, bool loop) override;
bool CanInsertDtmf() override;
bool InsertDtmf(uint32 ssrc, int event, int duration, int flags) override;
@@ -421,8 +402,6 @@
WebRtcVoiceEngine* const engine_;
const int voe_channel_;
- rtc::scoped_ptr<WebRtcSoundclipStream> ringback_tone_;
- std::set<int> ringback_channels_; // channels playing ringback
std::vector<AudioCodec> recv_codecs_;
std::vector<AudioCodec> send_codecs_;
rtc::scoped_ptr<webrtc::CodecInst> send_codec_;
diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
index fc373db..d7e85bc 100644
--- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc
+++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
@@ -58,7 +58,6 @@
&kPcmuCodec, &kIsacCodec, &kOpusCodec, &kG722CodecVoE, &kRedCodec,
&kCn8000Codec, &kCn16000Codec, &kTelephoneEventCodec,
};
-const char kRingbackTone[] = "RIFF____WAVE____ABCD1234";
static uint32 kSsrc1 = 0x99;
static uint32 kSsrc2 = 0x98;
@@ -2559,62 +2558,6 @@
TestInsertDtmf(kSsrc1, false);
}
-// Test that we can play a ringback tone properly in a single-stream call.
-TEST_F(WebRtcVoiceEngineTestFake, PlayRingback) {
- EXPECT_TRUE(SetupEngine());
- int channel_num = voe_.GetLastChannel();
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we fail if no ringback tone specified.
- EXPECT_FALSE(channel_->PlayRingbackTone(0, true, true));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we can set and play a ringback tone.
- EXPECT_TRUE(channel_->SetRingbackTone(
- kRingbackTone, static_cast<int>(strlen(kRingbackTone))));
- EXPECT_TRUE(channel_->PlayRingbackTone(0, true, true));
- EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
- // Check we can stop the tone manually.
- EXPECT_TRUE(channel_->PlayRingbackTone(0, false, false));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we stop the tone if a packet arrives.
- EXPECT_TRUE(channel_->PlayRingbackTone(0, true, true));
- EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
- DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
-}
-
-// Test that we can play a ringback tone properly in a multi-stream call.
-TEST_F(WebRtcVoiceEngineTestFake, PlayRingbackWithMultipleStreams) {
- EXPECT_TRUE(SetupEngine());
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
- int channel_num = voe_.GetLastChannel();
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we fail if no ringback tone specified.
- EXPECT_FALSE(channel_->PlayRingbackTone(2, true, true));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we can set and play a ringback tone on the correct ssrc.
- EXPECT_TRUE(channel_->SetRingbackTone(
- kRingbackTone, static_cast<int>(strlen(kRingbackTone))));
- EXPECT_FALSE(channel_->PlayRingbackTone(77, true, true));
- EXPECT_TRUE(channel_->PlayRingbackTone(2, true, true));
- EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
- // Check we can stop the tone manually.
- EXPECT_TRUE(channel_->PlayRingbackTone(2, false, false));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
- // Check we stop the tone if a packet arrives, but only with the right SSRC.
- EXPECT_TRUE(channel_->PlayRingbackTone(2, true, true));
- EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
- // Send a packet with SSRC 1; the tone should not stop.
- DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
- EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
- // Send a packet with SSRC 2; the tone should stop.
- char packet[sizeof(kPcmuFrame)];
- memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
- rtc::SetBE32(packet + 8, 2);
- DeliverPacket(packet, sizeof(packet));
- EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
-}
-
TEST_F(WebRtcVoiceEngineTestFake, MediaEngineCallbackOnError) {
rtc::scoped_ptr<ChannelErrorListener> listener;
cricket::WebRtcVoiceMediaChannel* media_channel;
diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc
index 294681e..3c5b9dd 100644
--- a/talk/session/media/channel.cc
+++ b/talk/session/media/channel.cc
@@ -1271,10 +1271,6 @@
media_channel(), ssrc, mute, options, renderer));
}
-bool VoiceChannel::SetRingbackTone(const void* buf, int len) {
- return InvokeOnWorker(Bind(&VoiceChannel::SetRingbackTone_w, this, buf, len));
-}
-
// TODO(juberti): Handle early media the right way. We should get an explicit
// ringing message telling us to start playing local ringback, which we cancel
// if any early media actually arrives. For now, we do the opposite, which is
@@ -1291,11 +1287,6 @@
}
}
-bool VoiceChannel::PlayRingbackTone(uint32 ssrc, bool play, bool loop) {
- return InvokeOnWorker(Bind(&VoiceChannel::PlayRingbackTone_w,
- this, ssrc, play, loop));
-}
-
bool VoiceChannel::PressDTMF(int digit, bool playout) {
int flags = DF_SEND;
if (playout) {
@@ -1505,21 +1496,6 @@
return true;
}
-bool VoiceChannel::SetRingbackTone_w(const void* buf, int len) {
- ASSERT(worker_thread() == rtc::Thread::Current());
- return media_channel()->SetRingbackTone(static_cast<const char*>(buf), len);
-}
-
-bool VoiceChannel::PlayRingbackTone_w(uint32 ssrc, bool play, bool loop) {
- ASSERT(worker_thread() == rtc::Thread::Current());
- if (play) {
- LOG(LS_INFO) << "Playing ringback tone, loop=" << loop;
- } else {
- LOG(LS_INFO) << "Stopping ringback tone";
- }
- return media_channel()->PlayRingbackTone(ssrc, play, loop);
-}
-
void VoiceChannel::HandleEarlyMediaTimeout() {
// This occurs on the main thread, not the worker thread.
if (!received_media_) {
diff --git a/talk/session/media/channel.h b/talk/session/media/channel.h
index bb430bf..ec35f4c 100644
--- a/talk/session/media/channel.h
+++ b/talk/session/media/channel.h
@@ -340,14 +340,12 @@
return static_cast<VoiceMediaChannel*>(BaseChannel::media_channel());
}
- bool SetRingbackTone(const void* buf, int len);
void SetEarlyMedia(bool enable);
// This signal is emitted when we have gone a period of time without
// receiving early media. When received, a UI should start playing its
// own ringing sound
sigslot::signal1<VoiceChannel*> SignalEarlyMediaTimeout;
- bool PlayRingbackTone(uint32 ssrc, bool play, bool loop);
// TODO(ronghuawu): Replace PressDTMF with InsertDtmf.
bool PressDTMF(int digit, bool playout);
// Returns if the telephone-event has been negotiated.
@@ -398,8 +396,6 @@
virtual bool SetRemoteContent_w(const MediaContentDescription* content,
ContentAction action,
std::string* error_desc);
- bool SetRingbackTone_w(const void* buf, int len);
- bool PlayRingbackTone_w(uint32 ssrc, bool play, bool loop);
void HandleEarlyMediaTimeout();
bool InsertDtmf_w(uint32 ssrc, int event, int duration, int flags);
bool SetOutputScaling_w(uint32 ssrc, double left, double right);
diff --git a/talk/session/media/channel_unittest.cc b/talk/session/media/channel_unittest.cc
index 9020caf..22b1aef 100644
--- a/talk/session/media/channel_unittest.cc
+++ b/talk/session/media/channel_unittest.cc
@@ -2091,33 +2091,6 @@
Base::TestOnReadyToSendWithRtcpMux();
}
-// Test that we can play a ringback tone properly.
-TEST_F(VoiceChannelTest, TestRingbackTone) {
- CreateChannels(RTCP, RTCP);
- EXPECT_FALSE(media_channel1_->ringback_tone_play());
- EXPECT_TRUE(channel1_->SetRingbackTone("RIFF", 4));
- EXPECT_TRUE(SendInitiate());
- EXPECT_TRUE(SendAccept());
- // Play ringback tone, no loop.
- EXPECT_TRUE(channel1_->PlayRingbackTone(0, true, false));
- EXPECT_EQ(0U, media_channel1_->ringback_tone_ssrc());
- EXPECT_TRUE(media_channel1_->ringback_tone_play());
- EXPECT_FALSE(media_channel1_->ringback_tone_loop());
- // Stop the ringback tone.
- EXPECT_TRUE(channel1_->PlayRingbackTone(0, false, false));
- EXPECT_FALSE(media_channel1_->ringback_tone_play());
- // Add a stream.
- EXPECT_TRUE(AddStream1(1));
- // Play ringback tone, looping, on the new stream.
- EXPECT_TRUE(channel1_->PlayRingbackTone(1, true, true));
- EXPECT_EQ(1U, media_channel1_->ringback_tone_ssrc());
- EXPECT_TRUE(media_channel1_->ringback_tone_play());
- EXPECT_TRUE(media_channel1_->ringback_tone_loop());
- // Stop the ringback tone.
- EXPECT_TRUE(channel1_->PlayRingbackTone(1, false, false));
- EXPECT_FALSE(media_channel1_->ringback_tone_play());
-}
-
// Test that we can scale the output volume properly for 1:1 calls.
TEST_F(VoiceChannelTest, TestScaleVolume1to1Call) {
CreateChannels(RTCP, RTCP);