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

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

Issue 1741933002: Prevent a voice channel from sending data before a renderer is set. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Adding a TODO and returning a const pointer. Created 4 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
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 23 matching lines...) Expand all
34 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); 34 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0);
35 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); 35 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0);
36 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1, 0); 36 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1, 0);
37 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1, 0); 37 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1, 0);
38 const cricket::AudioCodec kRedCodec(117, "red", 8000, 0, 1, 0); 38 const cricket::AudioCodec kRedCodec(117, "red", 8000, 0, 1, 0);
39 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1, 0); 39 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1, 0);
40 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1, 0); 40 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1, 0);
41 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000, 0, 41 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000, 0,
42 1, 0); 42 1, 0);
43 const uint32_t kSsrc1 = 0x99; 43 const uint32_t kSsrc1 = 0x99;
44 const uint32_t kSsrc2 = 0x98; 44 const uint32_t kSsrc2 = 2;
45 const uint32_t kSsrc3 = 3;
45 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; 46 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 };
46 47
47 class FakeVoEWrapper : public cricket::VoEWrapper { 48 class FakeVoEWrapper : public cricket::VoEWrapper {
48 public: 49 public:
49 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) 50 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine)
50 : cricket::VoEWrapper(engine, // processing 51 : cricket::VoEWrapper(engine, // processing
51 engine, // base 52 engine, // base
52 engine, // codec 53 engine, // codec
53 engine, // hw 54 engine, // hw
54 engine, // network 55 engine, // network
55 engine, // rtp 56 engine, // rtp
56 engine) { // volume 57 engine) { // volume
57 } 58 }
58 }; 59 };
59 } // namespace 60 } // namespace
60 61
61 class FakeAudioSink : public webrtc::AudioSinkInterface { 62 class FakeAudioSink : public webrtc::AudioSinkInterface {
62 public: 63 public:
63 void OnData(const Data& audio) override {} 64 void OnData(const Data& audio) override {}
64 }; 65 };
65 66
67 class FakeAudioSource : public cricket::AudioSource {
68 void SetSink(Sink* sink) override {}
69 };
70
66 class WebRtcVoiceEngineTestFake : public testing::Test { 71 class WebRtcVoiceEngineTestFake : public testing::Test {
67 public: 72 public:
68 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} 73 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {}
69 74
70 explicit WebRtcVoiceEngineTestFake(const char* field_trials) 75 explicit WebRtcVoiceEngineTestFake(const char* field_trials)
71 : call_(webrtc::Call::Config()), 76 : call_(webrtc::Call::Config()),
72 engine_(new FakeVoEWrapper(&voe_)), 77 engine_(new FakeVoEWrapper(&voe_)),
73 channel_(nullptr), 78 channel_(nullptr),
79 fake_source_(new FakeAudioSource()),
74 override_field_trials_(field_trials) { 80 override_field_trials_(field_trials) {
75 send_parameters_.codecs.push_back(kPcmuCodec); 81 send_parameters_.codecs.push_back(kPcmuCodec);
76 recv_parameters_.codecs.push_back(kPcmuCodec); 82 recv_parameters_.codecs.push_back(kPcmuCodec);
77 } 83 }
78 bool SetupEngine() { 84 bool SetupEngine() {
79 if (!engine_.Init(rtc::Thread::Current())) { 85 if (!engine_.Init(rtc::Thread::Current())) {
80 return false; 86 return false;
81 } 87 }
82 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), 88 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(),
83 cricket::AudioOptions()); 89 cricket::AudioOptions());
84 return (channel_ != nullptr); 90 return (channel_ != nullptr);
85 } 91 }
86 bool SetupEngineWithRecvStream() { 92 bool SetupEngineWithRecvStream() {
87 if (!SetupEngine()) { 93 if (!SetupEngine()) {
88 return false; 94 return false;
89 } 95 }
90 return channel_->AddRecvStream( 96 return channel_->AddRecvStream(
91 cricket::StreamParams::CreateLegacy(kSsrc1)); 97 cricket::StreamParams::CreateLegacy(kSsrc1));
92 } 98 }
93 bool SetupEngineWithSendStream() { 99 bool SetupEngineWithSendStream() {
94 if (!SetupEngine()) { 100 if (!SetupEngine()) {
95 return false; 101 return false;
96 } 102 }
97 return channel_->AddSendStream( 103 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) {
98 cricket::StreamParams::CreateLegacy(kSsrc1)); 104 return false;
105 }
106 return channel_->SetAudioSend(kSsrc1, true, nullptr, fake_source_.get());
99 } 107 }
100 void SetupForMultiSendStream() { 108 void SetupForMultiSendStream() {
101 EXPECT_TRUE(SetupEngineWithSendStream()); 109 EXPECT_TRUE(SetupEngineWithSendStream());
102 // Remove stream added in Setup. 110 // Remove stream added in Setup.
103 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); 111 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1));
104 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc1)); 112 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc1));
105 // Verify the channel does not exist. 113 // Verify the channel does not exist.
106 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc1)); 114 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc1));
107 } 115 }
108 void DeliverPacket(const void* data, int len) { 116 void DeliverPacket(const void* data, int len) {
(...skipping 11 matching lines...) Expand all
120 return *send_stream; 128 return *send_stream;
121 } 129 }
122 130
123 const cricket::FakeAudioReceiveStream& GetRecvStream(uint32_t ssrc) { 131 const cricket::FakeAudioReceiveStream& GetRecvStream(uint32_t ssrc) {
124 const auto* recv_stream = call_.GetAudioReceiveStream(ssrc); 132 const auto* recv_stream = call_.GetAudioReceiveStream(ssrc);
125 EXPECT_TRUE(recv_stream); 133 EXPECT_TRUE(recv_stream);
126 return *recv_stream; 134 return *recv_stream;
127 } 135 }
128 136
129 const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) { 137 const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) {
130 const auto* send_stream = call_.GetAudioSendStream(ssrc); 138 return GetSendStream(ssrc).GetConfig();
131 EXPECT_TRUE(send_stream);
132 return send_stream->GetConfig();
133 } 139 }
134 140
135 const webrtc::AudioReceiveStream::Config& GetRecvStreamConfig(uint32_t ssrc) { 141 const webrtc::AudioReceiveStream::Config& GetRecvStreamConfig(uint32_t ssrc) {
136 const auto* recv_stream = call_.GetAudioReceiveStream(ssrc); 142 return GetRecvStream(ssrc).GetConfig();
137 EXPECT_TRUE(recv_stream);
138 return recv_stream->GetConfig();
139 } 143 }
140 144
141 void TestInsertDtmf(uint32_t ssrc, bool caller) { 145 void TestInsertDtmf(uint32_t ssrc, bool caller) {
142 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 146 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
143 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), 147 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(),
144 cricket::AudioOptions()); 148 cricket::AudioOptions());
145 EXPECT_TRUE(channel_ != nullptr); 149 EXPECT_TRUE(channel_ != nullptr);
146 if (caller) { 150 if (caller) {
147 // If this is a caller, local description will be applied and add the 151 // If this is a caller, local description will be applied and add the
148 // send stream. 152 // send stream.
149 EXPECT_TRUE(channel_->AddSendStream( 153 EXPECT_TRUE(channel_->AddSendStream(
150 cricket::StreamParams::CreateLegacy(kSsrc1))); 154 cricket::StreamParams::CreateLegacy(kSsrc1)));
151 } 155 }
152 156
153 // Test we can only InsertDtmf when the other side supports telephone-event. 157 // Test we can only InsertDtmf when the other side supports telephone-event.
154 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 158 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
155 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 159 EXPECT_TRUE(channel_->SetSend(true));
156 EXPECT_FALSE(channel_->CanInsertDtmf()); 160 EXPECT_FALSE(channel_->CanInsertDtmf());
157 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); 161 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111));
158 send_parameters_.codecs.push_back(kTelephoneEventCodec); 162 send_parameters_.codecs.push_back(kTelephoneEventCodec);
159 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 163 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
160 EXPECT_TRUE(channel_->CanInsertDtmf()); 164 EXPECT_TRUE(channel_->CanInsertDtmf());
161 165
162 if (!caller) { 166 if (!caller) {
163 // If this is callee, there's no active send channel yet. 167 // If this is callee, there's no active send channel yet.
164 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); 168 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123));
165 EXPECT_TRUE(channel_->AddSendStream( 169 EXPECT_TRUE(channel_->AddSendStream(
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); 398 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms);
395 } 399 }
396 400
397 protected: 401 protected:
398 cricket::FakeCall call_; 402 cricket::FakeCall call_;
399 cricket::FakeWebRtcVoiceEngine voe_; 403 cricket::FakeWebRtcVoiceEngine voe_;
400 cricket::WebRtcVoiceEngine engine_; 404 cricket::WebRtcVoiceEngine engine_;
401 cricket::VoiceMediaChannel* channel_; 405 cricket::VoiceMediaChannel* channel_;
402 cricket::AudioSendParameters send_parameters_; 406 cricket::AudioSendParameters send_parameters_;
403 cricket::AudioRecvParameters recv_parameters_; 407 cricket::AudioRecvParameters recv_parameters_;
408 rtc::scoped_ptr<FakeAudioSource> fake_source_;
the sun 2016/03/07 21:24:54 No need for scoped_ptr here.
Taylor Brandstetter 2016/03/08 00:00:31 Done.
404 409
405 private: 410 private:
406 webrtc::test::ScopedFieldTrials override_field_trials_; 411 webrtc::test::ScopedFieldTrials override_field_trials_;
407 }; 412 };
408 413
409 // Tests that our stub library "works". 414 // Tests that our stub library "works".
410 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { 415 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) {
411 EXPECT_FALSE(voe_.IsInited()); 416 EXPECT_FALSE(voe_.IsInited());
412 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 417 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
413 EXPECT_TRUE(voe_.IsInited()); 418 EXPECT_TRUE(voe_.IsInited());
(...skipping 1580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1994 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { 1999 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) {
1995 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 2000 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1996 } 2001 }
1997 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) { 2002 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) {
1998 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 2003 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1999 } 2004 }
2000 2005
2001 // Test that we can create a channel and start sending on it. 2006 // Test that we can create a channel and start sending on it.
2002 TEST_F(WebRtcVoiceEngineTestFake, Send) { 2007 TEST_F(WebRtcVoiceEngineTestFake, Send) {
2003 EXPECT_TRUE(SetupEngineWithSendStream()); 2008 EXPECT_TRUE(SetupEngineWithSendStream());
2004 int channel_num = voe_.GetLastChannel();
2005 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2009 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2006 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2010 EXPECT_TRUE(channel_->SetSend(true));
2007 EXPECT_TRUE(voe_.GetSend(channel_num)); 2011 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
2008 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2012 EXPECT_TRUE(channel_->SetSend(false));
2009 EXPECT_FALSE(voe_.GetSend(channel_num)); 2013 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
2014 }
2015
2016 // Test that a channel will send if and only if it has a source and is enabled
2017 // for sending.
2018 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) {
2019 EXPECT_TRUE(SetupEngineWithSendStream());
2020 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2021 EXPECT_TRUE(channel_->SetAudioSend(kSsrc1, true, nullptr, nullptr));
2022 EXPECT_TRUE(channel_->SetSend(true));
2023 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
2024 EXPECT_TRUE(
2025 channel_->SetAudioSend(kSsrc1, true, nullptr, fake_source_.get()));
2026 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
2027 EXPECT_TRUE(channel_->SetAudioSend(kSsrc1, true, nullptr, nullptr));
2028 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
2010 } 2029 }
2011 2030
2012 // Test that we can create a channel and start playing out on it. 2031 // Test that we can create a channel and start playing out on it.
2013 TEST_F(WebRtcVoiceEngineTestFake, Playout) { 2032 TEST_F(WebRtcVoiceEngineTestFake, Playout) {
2014 EXPECT_TRUE(SetupEngineWithRecvStream()); 2033 EXPECT_TRUE(SetupEngineWithRecvStream());
2015 int channel_num = voe_.GetLastChannel(); 2034 int channel_num = voe_.GetLastChannel();
2016 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2035 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
2017 EXPECT_TRUE(channel_->SetPlayout(true)); 2036 EXPECT_TRUE(channel_->SetPlayout(true));
2018 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2037 EXPECT_TRUE(voe_.GetPlayout(channel_num));
2019 EXPECT_TRUE(channel_->SetPlayout(false)); 2038 EXPECT_TRUE(channel_->SetPlayout(false));
2020 EXPECT_FALSE(voe_.GetPlayout(channel_num)); 2039 EXPECT_FALSE(voe_.GetPlayout(channel_num));
2021 } 2040 }
2022 2041
2023 // Test that we can add and remove send streams. 2042 // Test that we can add and remove send streams.
2024 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { 2043 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) {
2025 SetupForMultiSendStream(); 2044 SetupForMultiSendStream();
2026 2045
2027 // Set the global state for sending. 2046 // Set the global state for sending.
2028 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2047 EXPECT_TRUE(channel_->SetSend(true));
2029 2048
2030 for (uint32_t ssrc : kSsrcs4) { 2049 for (uint32_t ssrc : kSsrcs4) {
2031 EXPECT_TRUE(channel_->AddSendStream( 2050 EXPECT_TRUE(channel_->AddSendStream(
2032 cricket::StreamParams::CreateLegacy(ssrc))); 2051 cricket::StreamParams::CreateLegacy(ssrc)));
2052 EXPECT_TRUE(
2053 channel_->SetAudioSend(ssrc, true, nullptr, fake_source_.get()));
2033 // Verify that we are in a sending state for all the created streams. 2054 // Verify that we are in a sending state for all the created streams.
2034 EXPECT_TRUE(voe_.GetSend(GetSendStreamConfig(ssrc).voe_channel_id)); 2055 EXPECT_TRUE(GetSendStream(ssrc).IsSending());
2035 } 2056 }
2036 EXPECT_EQ(arraysize(kSsrcs4), call_.GetAudioSendStreams().size()); 2057 EXPECT_EQ(arraysize(kSsrcs4), call_.GetAudioSendStreams().size());
2037 2058
2038 // Delete the send streams. 2059 // Delete the send streams.
2039 for (uint32_t ssrc : kSsrcs4) { 2060 for (uint32_t ssrc : kSsrcs4) {
2040 EXPECT_TRUE(channel_->RemoveSendStream(ssrc)); 2061 EXPECT_TRUE(channel_->RemoveSendStream(ssrc));
2041 EXPECT_FALSE(call_.GetAudioSendStream(ssrc)); 2062 EXPECT_FALSE(call_.GetAudioSendStream(ssrc));
2042 EXPECT_FALSE(channel_->RemoveSendStream(ssrc)); 2063 EXPECT_FALSE(channel_->RemoveSendStream(ssrc));
2043 } 2064 }
2044 EXPECT_EQ(0u, call_.GetAudioSendStreams().size()); 2065 EXPECT_EQ(0u, call_.GetAudioSendStreams().size());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2100 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
2080 EXPECT_STREQ("PCMU", gcodec.plname); 2101 EXPECT_STREQ("PCMU", gcodec.plname);
2081 EXPECT_FALSE(voe_.GetVAD(channel_num)); 2102 EXPECT_FALSE(voe_.GetVAD(channel_num));
2082 } 2103 }
2083 } 2104 }
2084 2105
2085 // Test we can SetSend on all send streams correctly. 2106 // Test we can SetSend on all send streams correctly.
2086 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { 2107 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) {
2087 SetupForMultiSendStream(); 2108 SetupForMultiSendStream();
2088 2109
2089 // Create the send channels and they should be a SEND_NOTHING date. 2110 // Create the send channels and they should be a "not sending" date.
2090 for (uint32_t ssrc : kSsrcs4) { 2111 for (uint32_t ssrc : kSsrcs4) {
2091 EXPECT_TRUE(channel_->AddSendStream( 2112 EXPECT_TRUE(channel_->AddSendStream(
2092 cricket::StreamParams::CreateLegacy(ssrc))); 2113 cricket::StreamParams::CreateLegacy(ssrc)));
2093 int channel_num = voe_.GetLastChannel(); 2114 EXPECT_TRUE(
2094 EXPECT_FALSE(voe_.GetSend(channel_num)); 2115 channel_->SetAudioSend(ssrc, true, nullptr, fake_source_.get()));
2116 EXPECT_FALSE(GetSendStream(ssrc).IsSending());
2095 } 2117 }
2096 2118
2097 // Set the global state for starting sending. 2119 // Set the global state for starting sending.
2098 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2120 EXPECT_TRUE(channel_->SetSend(true));
2099 for (uint32_t ssrc : kSsrcs4) { 2121 for (uint32_t ssrc : kSsrcs4) {
2100 // Verify that we are in a sending state for all the send streams. 2122 // Verify that we are in a sending state for all the send streams.
2101 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2123 EXPECT_TRUE(GetSendStream(ssrc).IsSending());
2102 EXPECT_TRUE(voe_.GetSend(channel_num));
2103 } 2124 }
2104 2125
2105 // Set the global state for stopping sending. 2126 // Set the global state for stopping sending.
2106 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2127 EXPECT_TRUE(channel_->SetSend(false));
2107 for (uint32_t ssrc : kSsrcs4) { 2128 for (uint32_t ssrc : kSsrcs4) {
2108 // Verify that we are in a stop state for all the send streams. 2129 // Verify that we are in a stop state for all the send streams.
2109 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2130 EXPECT_FALSE(GetSendStream(ssrc).IsSending());
2110 EXPECT_FALSE(voe_.GetSend(channel_num));
2111 } 2131 }
2112 } 2132 }
2113 2133
2114 // Test we can set the correct statistics on all send streams. 2134 // Test we can set the correct statistics on all send streams.
2115 TEST_F(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) { 2135 TEST_F(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) {
2116 SetupForMultiSendStream(); 2136 SetupForMultiSendStream();
2117 2137
2118 // Create send streams. 2138 // Create send streams.
2119 for (uint32_t ssrc : kSsrcs4) { 2139 for (uint32_t ssrc : kSsrcs4) {
2120 EXPECT_TRUE(channel_->AddSendStream( 2140 EXPECT_TRUE(channel_->AddSendStream(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2173 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { 2193 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
2174 EXPECT_TRUE(SetupEngineWithSendStream()); 2194 EXPECT_TRUE(SetupEngineWithSendStream());
2175 int channel_num1 = voe_.GetLastChannel(); 2195 int channel_num1 = voe_.GetLastChannel();
2176 2196
2177 // Start playout without a receive stream. 2197 // Start playout without a receive stream.
2178 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2198 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2179 EXPECT_TRUE(channel_->SetPlayout(true)); 2199 EXPECT_TRUE(channel_->SetPlayout(true));
2180 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2200 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2181 2201
2182 // Adding another stream should enable playout on the new stream only. 2202 // Adding another stream should enable playout on the new stream only.
2183 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2203 EXPECT_TRUE(
2204 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc2)));
2184 int channel_num2 = voe_.GetLastChannel(); 2205 int channel_num2 = voe_.GetLastChannel();
2185 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2206 EXPECT_TRUE(channel_->SetSend(true));
2186 EXPECT_TRUE(voe_.GetSend(channel_num1)); 2207 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
2187 EXPECT_FALSE(voe_.GetSend(channel_num2));
2188 2208
2189 // Make sure only the new stream is played out. 2209 // Make sure only the new stream is played out.
2190 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2210 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2191 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2211 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2192 2212
2193 // Adding yet another stream should have stream 2 and 3 enabled for playout. 2213 // Adding yet another stream should have stream 2 and 3 enabled for playout.
2194 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2214 EXPECT_TRUE(
2215 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc3)));
2195 int channel_num3 = voe_.GetLastChannel(); 2216 int channel_num3 = voe_.GetLastChannel();
2196 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2217 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2197 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2218 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2198 EXPECT_TRUE(voe_.GetPlayout(channel_num3)); 2219 EXPECT_TRUE(voe_.GetPlayout(channel_num3));
2199 EXPECT_FALSE(voe_.GetSend(channel_num3));
2200 2220
2201 // Stop sending. 2221 // Stop sending.
2202 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2222 EXPECT_TRUE(channel_->SetSend(false));
2203 EXPECT_FALSE(voe_.GetSend(channel_num1)); 2223 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
2204 EXPECT_FALSE(voe_.GetSend(channel_num2));
2205 EXPECT_FALSE(voe_.GetSend(channel_num3));
2206 2224
2207 // Stop playout. 2225 // Stop playout.
2208 EXPECT_TRUE(channel_->SetPlayout(false)); 2226 EXPECT_TRUE(channel_->SetPlayout(false));
2209 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2227 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2210 EXPECT_FALSE(voe_.GetPlayout(channel_num2)); 2228 EXPECT_FALSE(voe_.GetPlayout(channel_num2));
2211 EXPECT_FALSE(voe_.GetPlayout(channel_num3)); 2229 EXPECT_FALSE(voe_.GetPlayout(channel_num3));
2212 2230
2213 // Restart playout and make sure only recv streams are played out. 2231 // Restart playout and make sure only recv streams are played out.
2214 EXPECT_TRUE(channel_->SetPlayout(true)); 2232 EXPECT_TRUE(channel_->SetPlayout(true));
2215 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2233 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2216 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2234 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2217 EXPECT_TRUE(voe_.GetPlayout(channel_num3)); 2235 EXPECT_TRUE(voe_.GetPlayout(channel_num3));
2218 2236
2219 // Now remove the recv streams and verify that the send stream doesn't play. 2237 // Now remove the recv streams and verify that the send stream doesn't play.
2220 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2238 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2221 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2239 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2222 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2240 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2223 } 2241 }
2224 2242
2225 // Test that we can create a channel configured for Codian bridges, 2243 // Test that we can create a channel configured for Codian bridges,
2226 // and start sending on it. 2244 // and start sending on it.
2227 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { 2245 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) {
2228 EXPECT_TRUE(SetupEngineWithSendStream()); 2246 EXPECT_TRUE(SetupEngineWithSendStream());
2229 cricket::AudioOptions options_adjust_agc; 2247 cricket::AudioOptions options_adjust_agc;
2230 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10); 2248 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10);
2231 int channel_num = voe_.GetLastChannel();
2232 webrtc::AgcConfig agc_config; 2249 webrtc::AgcConfig agc_config;
2233 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2250 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2234 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2251 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2235 send_parameters_.options = options_adjust_agc; 2252 send_parameters_.options = options_adjust_agc;
2236 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2253 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2237 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2254 EXPECT_TRUE(channel_->SetSend(true));
2238 EXPECT_TRUE(voe_.GetSend(channel_num)); 2255 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending());
2239 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2256 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2240 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated 2257 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated
2241 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2258 EXPECT_TRUE(channel_->SetSend(false));
2242 EXPECT_FALSE(voe_.GetSend(channel_num)); 2259 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending());
2243 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2260 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2244 } 2261 }
2245 2262
2246 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { 2263 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) {
2247 EXPECT_TRUE(SetupEngineWithSendStream()); 2264 EXPECT_TRUE(SetupEngineWithSendStream());
2248 webrtc::AgcConfig agc_config; 2265 webrtc::AgcConfig agc_config;
2249 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2266 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2250 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2267 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2251 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3); 2268 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3);
2252 send_parameters_.options.tx_agc_digital_compression_gain = 2269 send_parameters_.options.tx_agc_digital_compression_gain =
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2308 EXPECT_EQ(1u, info.senders.size()); 2325 EXPECT_EQ(1u, info.senders.size());
2309 VerifyVoiceSenderInfo(info.senders[0], false); 2326 VerifyVoiceSenderInfo(info.senders[0], false);
2310 // We have added one receive stream. We should see empty stats. 2327 // We have added one receive stream. We should see empty stats.
2311 EXPECT_EQ(info.receivers.size(), 1u); 2328 EXPECT_EQ(info.receivers.size(), 1u);
2312 EXPECT_EQ(info.receivers[0].ssrc(), 0); 2329 EXPECT_EQ(info.receivers[0].ssrc(), 0);
2313 } 2330 }
2314 2331
2315 // Start sending - this affects some reported stats. 2332 // Start sending - this affects some reported stats.
2316 { 2333 {
2317 cricket::VoiceMediaInfo info; 2334 cricket::VoiceMediaInfo info;
2318 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2335 EXPECT_TRUE(channel_->SetSend(true));
2319 EXPECT_EQ(true, channel_->GetStats(&info)); 2336 EXPECT_EQ(true, channel_->GetStats(&info));
2320 VerifyVoiceSenderInfo(info.senders[0], true); 2337 VerifyVoiceSenderInfo(info.senders[0], true);
2321 } 2338 }
2322 2339
2323 // Remove the kSsrc2 stream. No receiver stats. 2340 // Remove the kSsrc2 stream. No receiver stats.
2324 { 2341 {
2325 cricket::VoiceMediaInfo info; 2342 cricket::VoiceMediaInfo info;
2326 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); 2343 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2327 EXPECT_EQ(true, channel_->GetStats(&info)); 2344 EXPECT_EQ(true, channel_->GetStats(&info));
2328 EXPECT_EQ(1u, info.senders.size()); 2345 EXPECT_EQ(1u, info.senders.size());
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 } 2584 }
2568 2585
2569 // Test the InsertDtmf on specified send stream as callee. 2586 // Test the InsertDtmf on specified send stream as callee.
2570 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { 2587 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) {
2571 TestInsertDtmf(kSsrc1, false); 2588 TestInsertDtmf(kSsrc1, false);
2572 } 2589 }
2573 2590
2574 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) { 2591 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) {
2575 EXPECT_TRUE(SetupEngineWithSendStream()); 2592 EXPECT_TRUE(SetupEngineWithSendStream());
2576 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2593 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2577 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2594 EXPECT_TRUE(channel_->SetSend(true));
2578 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2595 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2579 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2596 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2580 EXPECT_TRUE(channel_->SetPlayout(true)); 2597 EXPECT_TRUE(channel_->SetPlayout(true));
2581 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1); 2598 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1);
2582 EXPECT_TRUE(channel_->SetPlayout(false)); 2599 EXPECT_TRUE(channel_->SetPlayout(false));
2583 EXPECT_FALSE(channel_->SetPlayout(true)); 2600 EXPECT_FALSE(channel_->SetPlayout(true));
2584 } 2601 }
2585 2602
2586 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { 2603 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) {
2587 EXPECT_TRUE(SetupEngineWithSendStream()); 2604 EXPECT_TRUE(SetupEngineWithSendStream());
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
2837 webrtc::AgcModes agc_mode; 2854 webrtc::AgcModes agc_mode;
2838 bool ns_enabled; 2855 bool ns_enabled;
2839 webrtc::NsModes ns_mode; 2856 webrtc::NsModes ns_mode;
2840 voe_.GetEcStatus(ec_enabled, ec_mode); 2857 voe_.GetEcStatus(ec_enabled, ec_mode);
2841 voe_.GetAgcStatus(agc_enabled, agc_mode); 2858 voe_.GetAgcStatus(agc_enabled, agc_mode);
2842 voe_.GetNsStatus(ns_enabled, ns_mode); 2859 voe_.GetNsStatus(ns_enabled, ns_mode);
2843 EXPECT_TRUE(ec_enabled); 2860 EXPECT_TRUE(ec_enabled);
2844 EXPECT_TRUE(agc_enabled); 2861 EXPECT_TRUE(agc_enabled);
2845 EXPECT_TRUE(ns_enabled); 2862 EXPECT_TRUE(ns_enabled);
2846 2863
2847 channel1->SetSend(cricket::SEND_MICROPHONE); 2864 channel1->SetSend(true);
2848 voe_.GetEcStatus(ec_enabled, ec_mode); 2865 voe_.GetEcStatus(ec_enabled, ec_mode);
2849 voe_.GetAgcStatus(agc_enabled, agc_mode); 2866 voe_.GetAgcStatus(agc_enabled, agc_mode);
2850 voe_.GetNsStatus(ns_enabled, ns_mode); 2867 voe_.GetNsStatus(ns_enabled, ns_mode);
2851 EXPECT_TRUE(ec_enabled); 2868 EXPECT_TRUE(ec_enabled);
2852 EXPECT_TRUE(agc_enabled); 2869 EXPECT_TRUE(agc_enabled);
2853 EXPECT_FALSE(ns_enabled); 2870 EXPECT_FALSE(ns_enabled);
2854 2871
2855 channel2->SetSend(cricket::SEND_MICROPHONE); 2872 channel2->SetSend(true);
2856 voe_.GetEcStatus(ec_enabled, ec_mode); 2873 voe_.GetEcStatus(ec_enabled, ec_mode);
2857 voe_.GetAgcStatus(agc_enabled, agc_mode); 2874 voe_.GetAgcStatus(agc_enabled, agc_mode);
2858 voe_.GetNsStatus(ns_enabled, ns_mode); 2875 voe_.GetNsStatus(ns_enabled, ns_mode);
2859 EXPECT_TRUE(ec_enabled); 2876 EXPECT_TRUE(ec_enabled);
2860 EXPECT_FALSE(agc_enabled); 2877 EXPECT_FALSE(agc_enabled);
2861 EXPECT_TRUE(ns_enabled); 2878 EXPECT_TRUE(ns_enabled);
2862 2879
2863 // Make sure settings take effect while we are sending. 2880 // Make sure settings take effect while we are sending.
2864 ASSERT_TRUE(channel_->SetSendParameters(parameters_options_all)); 2881 ASSERT_TRUE(channel_->SetSendParameters(parameters_options_all));
2865 cricket::AudioSendParameters parameters_options_no_agc_nor_ns = 2882 cricket::AudioSendParameters parameters_options_no_agc_nor_ns =
2866 send_parameters_; 2883 send_parameters_;
2867 parameters_options_no_agc_nor_ns.options.auto_gain_control = 2884 parameters_options_no_agc_nor_ns.options.auto_gain_control =
2868 rtc::Optional<bool>(false); 2885 rtc::Optional<bool>(false);
2869 parameters_options_no_agc_nor_ns.options.noise_suppression = 2886 parameters_options_no_agc_nor_ns.options.noise_suppression =
2870 rtc::Optional<bool>(false); 2887 rtc::Optional<bool>(false);
2871 channel2->SetSend(cricket::SEND_MICROPHONE); 2888 channel2->SetSend(true);
2872 channel2->SetSendParameters(parameters_options_no_agc_nor_ns); 2889 channel2->SetSendParameters(parameters_options_no_agc_nor_ns);
2873 expected_options.echo_cancellation = rtc::Optional<bool>(true); 2890 expected_options.echo_cancellation = rtc::Optional<bool>(true);
2874 expected_options.auto_gain_control = rtc::Optional<bool>(false); 2891 expected_options.auto_gain_control = rtc::Optional<bool>(false);
2875 expected_options.noise_suppression = rtc::Optional<bool>(false); 2892 expected_options.noise_suppression = rtc::Optional<bool>(false);
2876 EXPECT_EQ(expected_options, channel2->options()); 2893 EXPECT_EQ(expected_options, channel2->options());
2877 voe_.GetEcStatus(ec_enabled, ec_mode); 2894 voe_.GetEcStatus(ec_enabled, ec_mode);
2878 voe_.GetAgcStatus(agc_enabled, agc_mode); 2895 voe_.GetAgcStatus(agc_enabled, agc_mode);
2879 voe_.GetNsStatus(ns_enabled, ns_mode); 2896 voe_.GetNsStatus(ns_enabled, ns_mode);
2880 EXPECT_TRUE(ec_enabled); 2897 EXPECT_TRUE(ec_enabled);
2881 EXPECT_FALSE(agc_enabled); 2898 EXPECT_FALSE(agc_enabled);
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
3292 cricket::WebRtcVoiceEngine engine; 3309 cricket::WebRtcVoiceEngine engine;
3293 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); 3310 EXPECT_TRUE(engine.Init(rtc::Thread::Current()));
3294 std::unique_ptr<webrtc::Call> call( 3311 std::unique_ptr<webrtc::Call> call(
3295 webrtc::Call::Create(webrtc::Call::Config())); 3312 webrtc::Call::Create(webrtc::Call::Config()));
3296 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), 3313 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
3297 cricket::AudioOptions(), call.get()); 3314 cricket::AudioOptions(), call.get());
3298 cricket::AudioRecvParameters parameters; 3315 cricket::AudioRecvParameters parameters;
3299 parameters.codecs = engine.codecs(); 3316 parameters.codecs = engine.codecs();
3300 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3317 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3301 } 3318 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698