Index: webrtc/media/engine/webrtcvoiceengine_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
index c55389ae7361d9beaa4e8a1469a732019836e943..f3856cc14182c024cc6411adfa65811141101445 100644 |
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
@@ -2740,9 +2740,8 @@ TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { |
EXPECT_TRUE(channel_->RemoveRecvStream(ssrc1)); |
} |
-// Test that receiving on an unsignalled stream works (default channel will be |
-// created). |
-TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { |
+// Test that receiving on an unsignaled stream works (a stream is created). |
+TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaled) { |
EXPECT_TRUE(SetupChannel()); |
EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); |
@@ -2753,37 +2752,57 @@ TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { |
sizeof(kPcmuFrame))); |
} |
-// Test that receiving on an unsignalled stream works (default channel will be |
-// created), and that packets will be forwarded to the default channel |
-// regardless of their SSRCs. |
-TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) { |
+// Test that receiving N unsignaled stream works (streams will be created), and |
+// that packets are forwarded to them all. |
+TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledWithSsrcSwitch) { |
EXPECT_TRUE(SetupChannel()); |
unsigned char packet[sizeof(kPcmuFrame)]; |
memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
- // Note that ssrc = 0 is not supported. |
- uint32_t ssrc = 1; |
- for (; ssrc < 10; ++ssrc) { |
+ constexpr uint32_t kMaxUnsignaledCount = 50; |
+ |
+ // Note that SSRC = 0 is not supported. |
+ for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { |
rtc::SetBE32(&packet[8], ssrc); |
DeliverPacket(packet, sizeof(packet)); |
- // Verify we only have one default stream. |
- EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
+ // Verify we have one new stream for each loop iteration. |
+ EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size()); |
EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); |
EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
} |
- // Sending the same ssrc again should not create a new stream. |
- --ssrc; |
+ // Send on the same SSRCs again should not create new streams. |
Taylor Brandstetter
2017/02/17 08:36:15
nit: "Sending"
the sun
2017/02/17 10:10:57
Done.
|
+ for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { |
+ rtc::SetBE32(&packet[8], ssrc); |
+ DeliverPacket(packet, sizeof(packet)); |
+ |
+ EXPECT_EQ(kMaxUnsignaledCount, call_.GetAudioReceiveStreams().size()); |
+ EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); |
+ EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
+ } |
+ |
+ // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced. |
+ constexpr uint32_t kAnotherSsrc = 667; |
+ rtc::SetBE32(&packet[8], kAnotherSsrc); |
DeliverPacket(packet, sizeof(packet)); |
- EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
- EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); |
- EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
+ |
+ const auto& streams = call_.GetAudioReceiveStreams(); |
+ EXPECT_EQ(kMaxUnsignaledCount, streams.size()); |
+ size_t i = 0; |
+ for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledCount); ++ssrc, ++i) { |
+ EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc); |
+ EXPECT_EQ(2, streams[i]->received_packets()); |
+ } |
+ EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc); |
+ EXPECT_EQ(1, streams[i]->received_packets()); |
+ ++i; |
+ EXPECT_EQ(kMaxUnsignaledCount, i); |
Taylor Brandstetter
2017/02/17 08:36:15
What's the purpose of the final ++i and EXPECT_EQ?
the sun
2017/02/17 10:10:57
Yes, basically to "complete" the loop
|
} |
// Test that a default channel is created even after a signalled stream has been |
// added, and that this stream will get any packets for unknown SSRCs. |
-TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { |
+TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignalled) { |
Taylor Brandstetter
2017/02/17 08:36:15
nit: This uses both "Unsignaled" and "Unsignalled"
the sun
2017/02/17 10:10:57
Done.
|
EXPECT_TRUE(SetupChannel()); |
unsigned char packet[sizeof(kPcmuFrame)]; |
memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
@@ -3291,14 +3310,34 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { |
EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain()); |
} |
-TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { |
+TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeUnsignaledRecvStream) { |
EXPECT_TRUE(SetupChannel()); |
+ |
+ unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; |
+ memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); |
+ rtc::SetBE32(&pcmuFrame2[8], kSsrc4); |
+ |
+ // Spawn an unsignaled stream by sending a packet - gain should be 1. |
+ DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); |
+ EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc4).gain()); |
+ |
+ // Should remember the volume "2" which will be set on new unsignaled streams, |
+ // and also set the gain to 2 on existing unsignaled streams. |
EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); |
+ EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc4).gain()); |
+ |
+ // Spawn an unsignaled stream by sending a packet - gain should be 2. |
DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
Taylor Brandstetter
2017/02/17 08:36:14
nit: May be more readable if "kPcmuFrame2" was del
the sun
2017/02/17 10:10:57
Done.
|
EXPECT_DOUBLE_EQ(2, GetRecvStream(1).gain()); |
+ |
+ // Setting gain with SSRC=0 should affect all unsignaled streams. |
EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); |
+ EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc4).gain()); |
EXPECT_DOUBLE_EQ(3, GetRecvStream(1).gain()); |
+ |
+ // Setting gain on an individual stream affects only that. |
EXPECT_TRUE(channel_->SetOutputVolume(1, 4)); |
+ EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc4).gain()); |
EXPECT_DOUBLE_EQ(4, GetRecvStream(1).gain()); |
} |
@@ -3451,7 +3490,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { |
EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
} |
-TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { |
+TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkUnsignaledRecvStream) { |
EXPECT_TRUE(SetupChannel()); |
std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |