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

Unified Diff: talk/media/webrtc/webrtcvoiceengine_unittest.cc

Issue 1551813002: Storing raw audio sink for default audio track. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressing solenberg@'s comments. Created 4 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
Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc
diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
index a62bcb225fc7c6111fed44c0a43507f1ecf7b353..f764a01fc8adb6d34ae66feb012ff8f5a542689c 100644
--- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc
+++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
@@ -72,6 +72,11 @@ class FakeVoEWrapper : public cricket::VoEWrapper {
};
} // namespace
+class FakeAudioSink : public rtc::RefCountedObject<webrtc::AudioSinkInterface> {
+ public:
+ void OnData(const Data& audio) override {}
+};
+
class WebRtcVoiceEngineTestFake : public testing::Test {
public:
WebRtcVoiceEngineTestFake()
@@ -125,6 +130,12 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
return *send_stream;
}
+ const cricket::FakeAudioReceiveStream& GetRecvStream(uint32_t ssrc) {
+ const auto* recv_stream = call_.GetAudioReceiveStream(ssrc);
+ EXPECT_TRUE(recv_stream);
+ return *recv_stream;
+ }
+
const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) {
const auto* send_stream = call_.GetAudioSendStream(ssrc);
EXPECT_TRUE(send_stream);
@@ -3105,6 +3116,57 @@ TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) {
EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
}
+TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) {
+ EXPECT_TRUE(SetupEngine());
+ rtc::scoped_refptr<FakeAudioSink> fake_sink = new FakeAudioSink();
+
+ // This should do nothing, since there's no recv stream yet.
+ channel_->SetRawAudioSink(kSsrc1, fake_sink);
+ // Ensure the ref count wasn't incremented.
+ EXPECT_TRUE(fake_sink->HasOneRef());
+
+ EXPECT_TRUE(
+ channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1)));
+ // Now, the channel should latch on to the sink.
+ channel_->SetRawAudioSink(kSsrc1, fake_sink);
+ EXPECT_FALSE(fake_sink->HasOneRef());
+ EXPECT_EQ(fake_sink, GetRecvStream(kSsrc1).sink());
+
+ // Setting a nullptr should release the reference.
+ channel_->SetRawAudioSink(kSsrc1, nullptr);
+ EXPECT_TRUE(fake_sink->HasOneRef());
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) {
+ EXPECT_TRUE(SetupEngine());
+ rtc::scoped_refptr<FakeAudioSink> fake_sink_1 = new FakeAudioSink();
+ rtc::scoped_refptr<FakeAudioSink> fake_sink_2 = new FakeAudioSink();
+
+ // Should be able to set a default sink even when no stream exists.
+ channel_->SetRawAudioSink(0, fake_sink_1);
+ EXPECT_FALSE(fake_sink_1->HasOneRef());
+
+ // Create default channel.
+ DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
+ EXPECT_EQ(fake_sink_1, GetRecvStream(0x01).sink());
+
+ // Should be able to set the default sink after a stream exists.
+ channel_->SetRawAudioSink(0, fake_sink_2);
+ EXPECT_TRUE(fake_sink_1->HasOneRef());
+ EXPECT_FALSE(fake_sink_2->HasOneRef());
+ EXPECT_EQ(fake_sink_2, GetRecvStream(0x01).sink());
+
+ // If we remove and add a default stream, it should get the same sink.
+ EXPECT_TRUE(channel_->RemoveRecvStream(0x01));
+ DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
+ EXPECT_FALSE(fake_sink_2->HasOneRef());
+ EXPECT_EQ(fake_sink_2, GetRecvStream(0x01).sink());
+
+ // Finally, try resetting the default sink.
+ channel_->SetRawAudioSink(0, nullptr);
+ EXPECT_TRUE(fake_sink_2->HasOneRef());
+}
+
// Tests that the library initializes and shuts down properly.
TEST(WebRtcVoiceEngineTest, StartupShutdown) {
cricket::WebRtcVoiceEngine engine;

Powered by Google App Engine
This is Rietveld 408576698