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

Side by Side Diff: webrtc/media/engine/webrtcvoiceengine_unittest.cc

Issue 2746763002: Revert to allowing only 1 unsignaled receive stream for audio. (Closed)
Patch Set: fix tests Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 18 matching lines...) Expand all
29 #include "webrtc/pc/channel.h" 29 #include "webrtc/pc/channel.h"
30 #include "webrtc/test/field_trial.h" 30 #include "webrtc/test/field_trial.h"
31 #include "webrtc/test/gtest.h" 31 #include "webrtc/test/gtest.h"
32 #include "webrtc/voice_engine/transmit_mixer.h" 32 #include "webrtc/voice_engine/transmit_mixer.h"
33 33
34 using testing::Return; 34 using testing::Return;
35 using testing::StrictMock; 35 using testing::StrictMock;
36 36
37 namespace { 37 namespace {
38 38
39 constexpr uint32_t kMaxUnsignaledRecvStreams = 1;
40
39 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); 41 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1);
40 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); 42 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1);
41 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); 43 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2);
42 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); 44 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1);
43 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); 45 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1);
44 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); 46 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1);
45 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); 47 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1);
46 const cricket::AudioCodec 48 const cricket::AudioCodec
47 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); 49 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1);
48 const cricket::AudioCodec 50 const cricket::AudioCodec
(...skipping 2728 matching lines...) Expand 10 before | Expand all | Expand 10 after
2777 sizeof(kPcmuFrame))); 2779 sizeof(kPcmuFrame)));
2778 } 2780 }
2779 2781
2780 // Test that receiving N unsignaled stream works (streams will be created), and 2782 // Test that receiving N unsignaled stream works (streams will be created), and
2781 // that packets are forwarded to them all. 2783 // that packets are forwarded to them all.
2782 TEST_F(WebRtcVoiceEngineTestFake, RecvMultipleUnsignaled) { 2784 TEST_F(WebRtcVoiceEngineTestFake, RecvMultipleUnsignaled) {
2783 EXPECT_TRUE(SetupChannel()); 2785 EXPECT_TRUE(SetupChannel());
2784 unsigned char packet[sizeof(kPcmuFrame)]; 2786 unsigned char packet[sizeof(kPcmuFrame)];
2785 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); 2787 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
2786 2788
2787 constexpr uint32_t kMaxUnsignaledCount = 50;
2788
2789 // Note that SSRC = 0 is not supported. 2789 // Note that SSRC = 0 is not supported.
2790 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { 2790 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledRecvStreams); ++ssrc) {
2791 rtc::SetBE32(&packet[8], ssrc); 2791 rtc::SetBE32(&packet[8], ssrc);
2792 DeliverPacket(packet, sizeof(packet)); 2792 DeliverPacket(packet, sizeof(packet));
2793 2793
2794 // Verify we have one new stream for each loop iteration. 2794 // Verify we have one new stream for each loop iteration.
2795 EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size()); 2795 EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size());
2796 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); 2796 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets());
2797 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); 2797 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet)));
2798 } 2798 }
2799 2799
2800 // Sending on the same SSRCs again should not create new streams. 2800 // Sending on the same SSRCs again should not create new streams.
2801 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { 2801 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledRecvStreams); ++ssrc) {
2802 rtc::SetBE32(&packet[8], ssrc); 2802 rtc::SetBE32(&packet[8], ssrc);
2803 DeliverPacket(packet, sizeof(packet)); 2803 DeliverPacket(packet, sizeof(packet));
2804 2804
2805 EXPECT_EQ(kMaxUnsignaledCount, call_.GetAudioReceiveStreams().size()); 2805 EXPECT_EQ(kMaxUnsignaledRecvStreams, call_.GetAudioReceiveStreams().size());
2806 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); 2806 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets());
2807 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); 2807 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet)));
2808 } 2808 }
2809 2809
2810 // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced. 2810 // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced.
2811 constexpr uint32_t kAnotherSsrc = 667; 2811 constexpr uint32_t kAnotherSsrc = 667;
2812 rtc::SetBE32(&packet[8], kAnotherSsrc); 2812 rtc::SetBE32(&packet[8], kAnotherSsrc);
2813 DeliverPacket(packet, sizeof(packet)); 2813 DeliverPacket(packet, sizeof(packet));
2814 2814
2815 const auto& streams = call_.GetAudioReceiveStreams(); 2815 const auto& streams = call_.GetAudioReceiveStreams();
2816 EXPECT_EQ(kMaxUnsignaledCount, streams.size()); 2816 EXPECT_EQ(kMaxUnsignaledRecvStreams, streams.size());
2817 size_t i = 0; 2817 size_t i = 0;
2818 for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledCount); ++ssrc, ++i) { 2818 for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledRecvStreams); ++ssrc, ++i) {
2819 EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc); 2819 EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc);
2820 EXPECT_EQ(2, streams[i]->received_packets()); 2820 EXPECT_EQ(2, streams[i]->received_packets());
2821 } 2821 }
2822 EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc); 2822 EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc);
2823 EXPECT_EQ(1, streams[i]->received_packets()); 2823 EXPECT_EQ(1, streams[i]->received_packets());
2824 // Sanity check that we've checked all streams. 2824 // Sanity check that we've checked all streams.
2825 EXPECT_EQ(kMaxUnsignaledCount, (i + 1)); 2825 EXPECT_EQ(kMaxUnsignaledRecvStreams, (i + 1));
2826 } 2826 }
2827 2827
2828 // Test that a default channel is created even after a signaled stream has been 2828 // Test that a default channel is created even after a signaled stream has been
2829 // added, and that this stream will get any packets for unknown SSRCs. 2829 // added, and that this stream will get any packets for unknown SSRCs.
2830 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignaled) { 2830 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignaled) {
2831 EXPECT_TRUE(SetupChannel()); 2831 EXPECT_TRUE(SetupChannel());
2832 unsigned char packet[sizeof(kPcmuFrame)]; 2832 unsigned char packet[sizeof(kPcmuFrame)];
2833 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); 2833 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
2834 2834
2835 // Add a known stream, send packet and verify we got it. 2835 // Add a known stream, send packet and verify we got it.
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
3295 3295
3296 // Spawn an unsignaled stream by sending a packet - gain should be 2. 3296 // Spawn an unsignaled stream by sending a packet - gain should be 2.
3297 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; 3297 unsigned char pcmuFrame2[sizeof(kPcmuFrame)];
3298 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); 3298 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
3299 rtc::SetBE32(&pcmuFrame2[8], kSsrcX); 3299 rtc::SetBE32(&pcmuFrame2[8], kSsrcX);
3300 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); 3300 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2));
3301 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrcX).gain()); 3301 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrcX).gain());
3302 3302
3303 // Setting gain with SSRC=0 should affect all unsignaled streams. 3303 // Setting gain with SSRC=0 should affect all unsignaled streams.
3304 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc0, 3)); 3304 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc0, 3));
3305 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); 3305 if (kMaxUnsignaledRecvStreams > 1) {
3306 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain());
3307 }
3306 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrcX).gain()); 3308 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrcX).gain());
3307 3309
3308 // Setting gain on an individual stream affects only that. 3310 // Setting gain on an individual stream affects only that.
3309 EXPECT_TRUE(channel_->SetOutputVolume(kSsrcX, 4)); 3311 EXPECT_TRUE(channel_->SetOutputVolume(kSsrcX, 4));
3310 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); 3312 if (kMaxUnsignaledRecvStreams > 1) {
3313 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain());
3314 }
3311 EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrcX).gain()); 3315 EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrcX).gain());
3312 } 3316 }
3313 3317
3314 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { 3318 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
3315 const uint32_t kAudioSsrc = 123; 3319 const uint32_t kAudioSsrc = 123;
3316 const std::string kSyncLabel = "AvSyncLabel"; 3320 const std::string kSyncLabel = "AvSyncLabel";
3317 3321
3318 EXPECT_TRUE(SetupSendStream()); 3322 EXPECT_TRUE(SetupSendStream());
3319 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); 3323 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
3320 sp.sync_label = kSyncLabel; 3324 sp.sync_label = kSyncLabel;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
3487 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1)); 3491 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1));
3488 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3492 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
3489 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); 3493 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3490 3494
3491 // Spawn another unsignaled stream - it should be assigned the default sink 3495 // Spawn another unsignaled stream - it should be assigned the default sink
3492 // and the previous unsignaled stream should lose it. 3496 // and the previous unsignaled stream should lose it.
3493 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; 3497 unsigned char pcmuFrame2[sizeof(kPcmuFrame)];
3494 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); 3498 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
3495 rtc::SetBE32(&pcmuFrame2[8], kSsrcX); 3499 rtc::SetBE32(&pcmuFrame2[8], kSsrcX);
3496 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); 3500 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2));
3497 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); 3501 if (kMaxUnsignaledRecvStreams > 1) {
3502 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3503 }
3498 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); 3504 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink());
3499 3505
3500 // Reset the default sink - the second unsignaled stream should lose it. 3506 // Reset the default sink - the second unsignaled stream should lose it.
3501 channel_->SetRawAudioSink(kSsrc0, nullptr); 3507 channel_->SetRawAudioSink(kSsrc0, nullptr);
3502 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); 3508 if (kMaxUnsignaledRecvStreams > 1) {
3509 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3510 }
3503 EXPECT_EQ(nullptr, GetRecvStream(kSsrcX).sink()); 3511 EXPECT_EQ(nullptr, GetRecvStream(kSsrcX).sink());
3504 3512
3505 // Try setting the default sink while two streams exists. 3513 // Try setting the default sink while two streams exists.
3506 channel_->SetRawAudioSink(kSsrc0, std::move(fake_sink_3)); 3514 channel_->SetRawAudioSink(kSsrc0, std::move(fake_sink_3));
3507 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); 3515 if (kMaxUnsignaledRecvStreams > 1) {
3516 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3517 }
3508 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); 3518 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink());
3509 3519
3510 // Try setting the sink for the first unsignaled stream using its known SSRC. 3520 // Try setting the sink for the first unsignaled stream using its known SSRC.
3511 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_4)); 3521 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_4));
3512 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); 3522 if (kMaxUnsignaledRecvStreams > 1) {
3523 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3524 }
3513 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); 3525 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink());
3514 EXPECT_NE(GetRecvStream(kSsrc1).sink(), GetRecvStream(kSsrcX).sink()); 3526 if (kMaxUnsignaledRecvStreams > 1) {
3527 EXPECT_NE(GetRecvStream(kSsrc1).sink(), GetRecvStream(kSsrcX).sink());
3528 }
3515 } 3529 }
3516 3530
3517 // Test that, just like the video channel, the voice channel communicates the 3531 // Test that, just like the video channel, the voice channel communicates the
3518 // network state to the call. 3532 // network state to the call.
3519 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { 3533 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) {
3520 EXPECT_TRUE(SetupChannel()); 3534 EXPECT_TRUE(SetupChannel());
3521 3535
3522 EXPECT_EQ(webrtc::kNetworkUp, 3536 EXPECT_EQ(webrtc::kNetworkUp,
3523 call_.GetNetworkState(webrtc::MediaType::AUDIO)); 3537 call_.GetNetworkState(webrtc::MediaType::AUDIO));
3524 EXPECT_EQ(webrtc::kNetworkUp, 3538 EXPECT_EQ(webrtc::kNetworkUp,
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
3795 // Without this cast, the comparison turned unsigned and, thus, failed for -1. 3809 // Without this cast, the comparison turned unsigned and, thus, failed for -1.
3796 const int num_specs = static_cast<int>(specs.size()); 3810 const int num_specs = static_cast<int>(specs.size());
3797 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); 3811 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs);
3798 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); 3812 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs);
3799 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); 3813 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1);
3800 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); 3814 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs);
3801 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); 3815 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs);
3802 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); 3816 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs);
3803 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); 3817 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs);
3804 } 3818 }
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698