OLD | NEW |
---|---|
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 29 matching lines...) Expand all Loading... | |
40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); | 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); |
41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); | 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); | 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); | 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); | 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
45 const cricket::AudioCodec | 45 const cricket::AudioCodec |
46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); | 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
47 const cricket::AudioCodec | 47 const cricket::AudioCodec |
48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); | 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
49 | 49 |
50 const uint32_t kSsrc1 = 0x99; | 50 const uint32_t kSsrc1 = 1; |
51 const uint32_t kSsrc2 = 2; | 51 const uint32_t kSsrc2 = 2; |
52 const uint32_t kSsrc3 = 3; | 52 const uint32_t kSsrc3 = 3; |
53 const uint32_t kSsrc4 = 0x42; | 53 const uint32_t kSsrc4 = 0x42; |
54 const uint32_t kSsrc9 = 0x9; | |
54 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; | 55 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; |
55 | 56 |
56 constexpr int kRtpHistoryMs = 5000; | 57 constexpr int kRtpHistoryMs = 5000; |
57 | 58 |
58 class FakeVoEWrapper : public cricket::VoEWrapper { | 59 class FakeVoEWrapper : public cricket::VoEWrapper { |
59 public: | 60 public: |
60 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) | 61 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) |
61 : cricket::VoEWrapper(engine, // processing | 62 : cricket::VoEWrapper(engine, // processing |
62 engine, // base | 63 engine, // base |
63 engine, // codec | 64 engine, // codec |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
130 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); | 131 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); |
131 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), | 132 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), |
132 cricket::AudioOptions()); | 133 cricket::AudioOptions()); |
133 return (channel_ != nullptr); | 134 return (channel_ != nullptr); |
134 } | 135 } |
135 | 136 |
136 bool SetupRecvStream() { | 137 bool SetupRecvStream() { |
137 if (!SetupChannel()) { | 138 if (!SetupChannel()) { |
138 return false; | 139 return false; |
139 } | 140 } |
140 return AddRecvStream(kSsrc1); | 141 return AddRecvStream(kSsrc9); |
Taylor Brandstetter
2017/02/17 10:34:46
What was the motivation for changing to kSsrc9? I
the sun
2017/02/17 11:22:47
kPcmuFrame has hard coded SSRC=1, so it is sometim
Taylor Brandstetter
2017/02/17 16:10:53
I'd suggest fixing that problem by either renaming
| |
141 } | 142 } |
142 | 143 |
143 bool SetupSendStream() { | 144 bool SetupSendStream() { |
144 if (!SetupChannel()) { | 145 if (!SetupChannel()) { |
145 return false; | 146 return false; |
146 } | 147 } |
147 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) { | 148 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc9))) { |
148 return false; | 149 return false; |
149 } | 150 } |
150 EXPECT_CALL(apm_, set_output_will_be_muted(false)); | 151 EXPECT_CALL(apm_, set_output_will_be_muted(false)); |
151 return channel_->SetAudioSend(kSsrc1, true, nullptr, &fake_source_); | 152 return channel_->SetAudioSend(kSsrc9, true, nullptr, &fake_source_); |
152 } | 153 } |
153 | 154 |
154 bool AddRecvStream(uint32_t ssrc) { | 155 bool AddRecvStream(uint32_t ssrc) { |
155 EXPECT_TRUE(channel_); | 156 EXPECT_TRUE(channel_); |
156 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc)); | 157 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc)); |
157 } | 158 } |
158 | 159 |
159 void SetupForMultiSendStream() { | 160 void SetupForMultiSendStream() { |
160 EXPECT_TRUE(SetupSendStream()); | 161 EXPECT_TRUE(SetupSendStream()); |
161 // Remove stream added in Setup. | 162 // Remove stream added in Setup. |
162 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 163 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9)); |
163 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc1)); | 164 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc9)); |
164 // Verify the channel does not exist. | 165 // Verify the channel does not exist. |
165 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc1)); | 166 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc9)); |
166 } | 167 } |
167 | 168 |
168 void DeliverPacket(const void* data, int len) { | 169 void DeliverPacket(const void* data, int len) { |
169 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len); | 170 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len); |
170 channel_->OnPacketReceived(&packet, rtc::PacketTime()); | 171 channel_->OnPacketReceived(&packet, rtc::PacketTime()); |
171 } | 172 } |
172 | 173 |
173 void TearDown() override { | 174 void TearDown() override { |
174 delete channel_; | 175 delete channel_; |
175 } | 176 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
224 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source)); | 225 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source)); |
225 } | 226 } |
226 | 227 |
227 void TestInsertDtmf(uint32_t ssrc, bool caller, | 228 void TestInsertDtmf(uint32_t ssrc, bool caller, |
228 const cricket::AudioCodec& codec) { | 229 const cricket::AudioCodec& codec) { |
229 EXPECT_TRUE(SetupChannel()); | 230 EXPECT_TRUE(SetupChannel()); |
230 if (caller) { | 231 if (caller) { |
231 // If this is a caller, local description will be applied and add the | 232 // If this is a caller, local description will be applied and add the |
232 // send stream. | 233 // send stream. |
233 EXPECT_TRUE(channel_->AddSendStream( | 234 EXPECT_TRUE(channel_->AddSendStream( |
234 cricket::StreamParams::CreateLegacy(kSsrc1))); | 235 cricket::StreamParams::CreateLegacy(kSsrc9))); |
235 } | 236 } |
236 | 237 |
237 // Test we can only InsertDtmf when the other side supports telephone-event. | 238 // Test we can only InsertDtmf when the other side supports telephone-event. |
238 SetSendParameters(send_parameters_); | 239 SetSendParameters(send_parameters_); |
239 SetSend(true); | 240 SetSend(true); |
240 EXPECT_FALSE(channel_->CanInsertDtmf()); | 241 EXPECT_FALSE(channel_->CanInsertDtmf()); |
241 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); | 242 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); |
242 send_parameters_.codecs.push_back(codec); | 243 send_parameters_.codecs.push_back(codec); |
243 SetSendParameters(send_parameters_); | 244 SetSendParameters(send_parameters_); |
244 EXPECT_TRUE(channel_->CanInsertDtmf()); | 245 EXPECT_TRUE(channel_->CanInsertDtmf()); |
245 | 246 |
246 if (!caller) { | 247 if (!caller) { |
247 // If this is callee, there's no active send channel yet. | 248 // If this is callee, there's no active send channel yet. |
248 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); | 249 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); |
249 EXPECT_TRUE(channel_->AddSendStream( | 250 EXPECT_TRUE(channel_->AddSendStream( |
250 cricket::StreamParams::CreateLegacy(kSsrc1))); | 251 cricket::StreamParams::CreateLegacy(kSsrc9))); |
251 } | 252 } |
252 | 253 |
253 // Check we fail if the ssrc is invalid. | 254 // Check we fail if the ssrc is invalid. |
254 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); | 255 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); |
255 | 256 |
256 // Test send. | 257 // Test send. |
257 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = | 258 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = |
258 GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 259 GetSendStream(kSsrc9).GetLatestTelephoneEvent(); |
259 EXPECT_EQ(-1, telephone_event.payload_type); | 260 EXPECT_EQ(-1, telephone_event.payload_type); |
260 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); | 261 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); |
261 telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 262 telephone_event = GetSendStream(kSsrc9).GetLatestTelephoneEvent(); |
262 EXPECT_EQ(codec.id, telephone_event.payload_type); | 263 EXPECT_EQ(codec.id, telephone_event.payload_type); |
263 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency); | 264 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency); |
264 EXPECT_EQ(2, telephone_event.event_code); | 265 EXPECT_EQ(2, telephone_event.event_code); |
265 EXPECT_EQ(123, telephone_event.duration_ms); | 266 EXPECT_EQ(123, telephone_event.duration_ms); |
266 } | 267 } |
267 | 268 |
268 // Test that send bandwidth is set correctly. | 269 // Test that send bandwidth is set correctly. |
269 // |codec| is the codec under test. | 270 // |codec| is the codec under test. |
270 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). | 271 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). |
271 // |expected_result| is the expected result from SetMaxSendBandwidth(). | 272 // |expected_result| is the expected result from SetMaxSendBandwidth(). |
272 // |expected_bitrate| is the expected audio bitrate afterward. | 273 // |expected_bitrate| is the expected audio bitrate afterward. |
273 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, | 274 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, |
274 int max_bitrate, | 275 int max_bitrate, |
275 bool expected_result, | 276 bool expected_result, |
276 int expected_bitrate) { | 277 int expected_bitrate) { |
277 cricket::AudioSendParameters parameters; | 278 cricket::AudioSendParameters parameters; |
278 parameters.codecs.push_back(codec); | 279 parameters.codecs.push_back(codec); |
279 parameters.max_bandwidth_bps = max_bitrate; | 280 parameters.max_bandwidth_bps = max_bitrate; |
280 if (expected_result) { | 281 if (expected_result) { |
281 SetSendParameters(parameters); | 282 SetSendParameters(parameters); |
282 } else { | 283 } else { |
283 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 284 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
284 } | 285 } |
285 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrc1)); | 286 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrc9)); |
286 } | 287 } |
287 | 288 |
288 // Sets the per-stream maximum bitrate limit for the specified SSRC. | 289 // Sets the per-stream maximum bitrate limit for the specified SSRC. |
289 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { | 290 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { |
290 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); | 291 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); |
291 EXPECT_EQ(1UL, parameters.encodings.size()); | 292 EXPECT_EQ(1UL, parameters.encodings.size()); |
292 | 293 |
293 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate); | 294 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate); |
294 return channel_->SetRtpSendParameters(ssrc, parameters); | 295 return channel_->SetRtpSendParameters(ssrc, parameters); |
295 } | 296 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
334 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { | 335 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { |
335 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; | 336 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; |
336 } | 337 } |
337 | 338 |
338 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, | 339 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, |
339 int global_max, | 340 int global_max, |
340 int stream_max, | 341 int stream_max, |
341 bool expected_result, | 342 bool expected_result, |
342 int expected_codec_bitrate) { | 343 int expected_codec_bitrate) { |
343 // Clear the bitrate limit from the previous test case. | 344 // Clear the bitrate limit from the previous test case. |
344 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc1, -1)); | 345 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc9, -1)); |
345 | 346 |
346 // Attempt to set the requested bitrate limits. | 347 // Attempt to set the requested bitrate limits. |
347 SetGlobalMaxBitrate(codec, global_max); | 348 SetGlobalMaxBitrate(codec, global_max); |
348 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc1, stream_max)); | 349 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc9, stream_max)); |
349 | 350 |
350 // Verify that reading back the parameters gives results | 351 // Verify that reading back the parameters gives results |
351 // consistent with the Set() result. | 352 // consistent with the Set() result. |
352 webrtc::RtpParameters resulting_parameters = | 353 webrtc::RtpParameters resulting_parameters = |
353 channel_->GetRtpSendParameters(kSsrc1); | 354 channel_->GetRtpSendParameters(kSsrc9); |
354 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); | 355 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); |
355 EXPECT_EQ(expected_result ? stream_max : -1, | 356 EXPECT_EQ(expected_result ? stream_max : -1, |
356 resulting_parameters.encodings[0].max_bitrate_bps); | 357 resulting_parameters.encodings[0].max_bitrate_bps); |
357 | 358 |
358 // Verify that the codec settings have the expected bitrate. | 359 // Verify that the codec settings have the expected bitrate. |
359 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc1)); | 360 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc9)); |
360 } | 361 } |
361 | 362 |
362 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, | 363 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, |
363 int expected_min_bitrate_bps, | 364 int expected_min_bitrate_bps, |
364 const char* start_bitrate_kbps, | 365 const char* start_bitrate_kbps, |
365 int expected_start_bitrate_bps, | 366 int expected_start_bitrate_bps, |
366 const char* max_bitrate_kbps, | 367 const char* max_bitrate_kbps, |
367 int expected_max_bitrate_bps) { | 368 int expected_max_bitrate_bps) { |
368 EXPECT_TRUE(SetupSendStream()); | 369 EXPECT_TRUE(SetupSendStream()); |
369 auto& codecs = send_parameters_.codecs; | 370 auto& codecs = send_parameters_.codecs; |
370 codecs.clear(); | 371 codecs.clear(); |
371 codecs.push_back(kOpusCodec); | 372 codecs.push_back(kOpusCodec); |
372 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps; | 373 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps; |
373 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps; | 374 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps; |
374 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps; | 375 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps; |
375 SetSendParameters(send_parameters_); | 376 SetSendParameters(send_parameters_); |
376 | 377 |
377 EXPECT_EQ(expected_min_bitrate_bps, | 378 EXPECT_EQ(expected_min_bitrate_bps, |
378 call_.GetConfig().bitrate_config.min_bitrate_bps); | 379 call_.GetConfig().bitrate_config.min_bitrate_bps); |
379 EXPECT_EQ(expected_start_bitrate_bps, | 380 EXPECT_EQ(expected_start_bitrate_bps, |
380 call_.GetConfig().bitrate_config.start_bitrate_bps); | 381 call_.GetConfig().bitrate_config.start_bitrate_bps); |
381 EXPECT_EQ(expected_max_bitrate_bps, | 382 EXPECT_EQ(expected_max_bitrate_bps, |
382 call_.GetConfig().bitrate_config.max_bitrate_bps); | 383 call_.GetConfig().bitrate_config.max_bitrate_bps); |
383 } | 384 } |
384 | 385 |
385 void TestSetSendRtpHeaderExtensions(const std::string& ext) { | 386 void TestSetSendRtpHeaderExtensions(const std::string& ext) { |
386 EXPECT_TRUE(SetupSendStream()); | 387 EXPECT_TRUE(SetupSendStream()); |
387 | 388 |
388 // Ensure extensions are off by default. | 389 // Ensure extensions are off by default. |
389 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 390 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size()); |
390 | 391 |
391 // Ensure unknown extensions won't cause an error. | 392 // Ensure unknown extensions won't cause an error. |
392 send_parameters_.extensions.push_back( | 393 send_parameters_.extensions.push_back( |
393 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); | 394 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); |
394 SetSendParameters(send_parameters_); | 395 SetSendParameters(send_parameters_); |
395 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 396 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size()); |
396 | 397 |
397 // Ensure extensions stay off with an empty list of headers. | 398 // Ensure extensions stay off with an empty list of headers. |
398 send_parameters_.extensions.clear(); | 399 send_parameters_.extensions.clear(); |
399 SetSendParameters(send_parameters_); | 400 SetSendParameters(send_parameters_); |
400 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 401 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size()); |
401 | 402 |
402 // Ensure extension is set properly. | 403 // Ensure extension is set properly. |
403 const int id = 1; | 404 const int id = 1; |
404 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); | 405 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); |
405 SetSendParameters(send_parameters_); | 406 SetSendParameters(send_parameters_); |
406 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 407 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc9).rtp.extensions.size()); |
407 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc1).rtp.extensions[0].uri); | 408 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc9).rtp.extensions[0].uri); |
408 EXPECT_EQ(id, GetSendStreamConfig(kSsrc1).rtp.extensions[0].id); | 409 EXPECT_EQ(id, GetSendStreamConfig(kSsrc9).rtp.extensions[0].id); |
409 | 410 |
410 // Ensure extension is set properly on new stream. | 411 // Ensure extension is set properly on new stream. |
411 EXPECT_TRUE(channel_->AddSendStream( | 412 EXPECT_TRUE(channel_->AddSendStream( |
412 cricket::StreamParams::CreateLegacy(kSsrc2))); | 413 cricket::StreamParams::CreateLegacy(kSsrc2))); |
413 EXPECT_NE(call_.GetAudioSendStream(kSsrc1), | 414 EXPECT_NE(call_.GetAudioSendStream(kSsrc9), |
414 call_.GetAudioSendStream(kSsrc2)); | 415 call_.GetAudioSendStream(kSsrc2)); |
415 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); | 416 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); |
416 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri); | 417 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri); |
417 EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id); | 418 EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id); |
418 | 419 |
419 // Ensure all extensions go back off with an empty list. | 420 // Ensure all extensions go back off with an empty list. |
420 send_parameters_.codecs.push_back(kPcmuCodec); | 421 send_parameters_.codecs.push_back(kPcmuCodec); |
421 send_parameters_.extensions.clear(); | 422 send_parameters_.extensions.clear(); |
422 SetSendParameters(send_parameters_); | 423 SetSendParameters(send_parameters_); |
423 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 424 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size()); |
424 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); | 425 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); |
425 } | 426 } |
426 | 427 |
427 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { | 428 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { |
428 EXPECT_TRUE(SetupRecvStream()); | 429 EXPECT_TRUE(SetupRecvStream()); |
429 | 430 |
430 // Ensure extensions are off by default. | 431 // Ensure extensions are off by default. |
431 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 432 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size()); |
432 | 433 |
433 // Ensure unknown extensions won't cause an error. | 434 // Ensure unknown extensions won't cause an error. |
434 recv_parameters_.extensions.push_back( | 435 recv_parameters_.extensions.push_back( |
435 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); | 436 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); |
436 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 437 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
437 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 438 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size()); |
438 | 439 |
439 // Ensure extensions stay off with an empty list of headers. | 440 // Ensure extensions stay off with an empty list of headers. |
440 recv_parameters_.extensions.clear(); | 441 recv_parameters_.extensions.clear(); |
441 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 442 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
442 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 443 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size()); |
443 | 444 |
444 // Ensure extension is set properly. | 445 // Ensure extension is set properly. |
445 const int id = 2; | 446 const int id = 2; |
446 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); | 447 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); |
447 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 448 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
448 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 449 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size()); |
449 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].uri); | 450 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc9).rtp.extensions[0].uri); |
450 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].id); | 451 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc9).rtp.extensions[0].id); |
451 | 452 |
452 // Ensure extension is set properly on new stream. | 453 // Ensure extension is set properly on new stream. |
453 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 454 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
454 EXPECT_NE(call_.GetAudioReceiveStream(kSsrc1), | 455 EXPECT_NE(call_.GetAudioReceiveStream(kSsrc9), |
455 call_.GetAudioReceiveStream(kSsrc2)); | 456 call_.GetAudioReceiveStream(kSsrc2)); |
456 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); | 457 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); |
457 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri); | 458 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri); |
458 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); | 459 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); |
459 | 460 |
460 // Ensure all extensions go back off with an empty list. | 461 // Ensure all extensions go back off with an empty list. |
461 recv_parameters_.extensions.clear(); | 462 recv_parameters_.extensions.clear(); |
462 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 463 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
463 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 464 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size()); |
464 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); | 465 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); |
465 } | 466 } |
466 | 467 |
467 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { | 468 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { |
468 webrtc::AudioSendStream::Stats stats; | 469 webrtc::AudioSendStream::Stats stats; |
469 stats.local_ssrc = 12; | 470 stats.local_ssrc = 12; |
470 stats.bytes_sent = 345; | 471 stats.bytes_sent = 345; |
471 stats.packets_sent = 678; | 472 stats.packets_sent = 678; |
472 stats.packets_lost = 9012; | 473 stats.packets_lost = 9012; |
473 stats.fraction_lost = 34.56f; | 474 stats.fraction_lost = 34.56f; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
621 | 622 |
622 // Tests that we can create and destroy a channel. | 623 // Tests that we can create and destroy a channel. |
623 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { | 624 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { |
624 EXPECT_TRUE(SetupChannel()); | 625 EXPECT_TRUE(SetupChannel()); |
625 } | 626 } |
626 | 627 |
627 // Test that we can add a send stream and that it has the correct defaults. | 628 // Test that we can add a send stream and that it has the correct defaults. |
628 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) { | 629 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) { |
629 EXPECT_TRUE(SetupChannel()); | 630 EXPECT_TRUE(SetupChannel()); |
630 EXPECT_TRUE( | 631 EXPECT_TRUE( |
631 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | 632 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc9))); |
632 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrc1); | 633 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrc9); |
633 EXPECT_EQ(kSsrc1, config.rtp.ssrc); | 634 EXPECT_EQ(kSsrc9, config.rtp.ssrc); |
634 EXPECT_EQ("", config.rtp.c_name); | 635 EXPECT_EQ("", config.rtp.c_name); |
635 EXPECT_EQ(0u, config.rtp.extensions.size()); | 636 EXPECT_EQ(0u, config.rtp.extensions.size()); |
636 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), | 637 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), |
637 config.send_transport); | 638 config.send_transport); |
638 } | 639 } |
639 | 640 |
640 // Test that we can add a receive stream and that it has the correct defaults. | 641 // Test that we can add a receive stream and that it has the correct defaults. |
641 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) { | 642 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) { |
642 EXPECT_TRUE(SetupChannel()); | 643 EXPECT_TRUE(SetupChannel()); |
643 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 644 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
644 const webrtc::AudioReceiveStream::Config& config = | 645 const webrtc::AudioReceiveStream::Config& config = |
645 GetRecvStreamConfig(kSsrc1); | 646 GetRecvStreamConfig(kSsrc9); |
646 EXPECT_EQ(kSsrc1, config.rtp.remote_ssrc); | 647 EXPECT_EQ(kSsrc9, config.rtp.remote_ssrc); |
647 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); | 648 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); |
648 EXPECT_FALSE(config.rtp.transport_cc); | 649 EXPECT_FALSE(config.rtp.transport_cc); |
649 EXPECT_EQ(0u, config.rtp.extensions.size()); | 650 EXPECT_EQ(0u, config.rtp.extensions.size()); |
650 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), | 651 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), |
651 config.rtcp_send_transport); | 652 config.rtcp_send_transport); |
652 EXPECT_EQ("", config.sync_group); | 653 EXPECT_EQ("", config.sync_group); |
653 } | 654 } |
654 | 655 |
655 // Tests that the list of supported codecs is created properly and ordered | 656 // Tests that the list of supported codecs is created properly and ordered |
656 // correctly (such that opus appears first). | 657 // correctly (such that opus appears first). |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
721 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 722 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
722 EXPECT_TRUE(SetupChannel()); | 723 EXPECT_TRUE(SetupChannel()); |
723 cricket::AudioRecvParameters parameters; | 724 cricket::AudioRecvParameters parameters; |
724 parameters.codecs.push_back(kIsacCodec); | 725 parameters.codecs.push_back(kIsacCodec); |
725 parameters.codecs.push_back(kPcmuCodec); | 726 parameters.codecs.push_back(kPcmuCodec); |
726 parameters.codecs.push_back(kTelephoneEventCodec1); | 727 parameters.codecs.push_back(kTelephoneEventCodec1); |
727 parameters.codecs.push_back(kTelephoneEventCodec2); | 728 parameters.codecs.push_back(kTelephoneEventCodec2); |
728 parameters.codecs[0].id = 106; // collide with existing CN 32k | 729 parameters.codecs[0].id = 106; // collide with existing CN 32k |
729 parameters.codecs[2].id = 126; | 730 parameters.codecs[2].id = 126; |
730 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 731 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
731 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 732 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
732 int channel_num = voe_.GetLastChannel(); | 733 int channel_num = voe_.GetLastChannel(); |
733 | 734 |
734 webrtc::CodecInst gcodec; | 735 webrtc::CodecInst gcodec; |
735 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 736 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
736 gcodec.plfreq = 16000; | 737 gcodec.plfreq = 16000; |
737 gcodec.channels = 1; | 738 gcodec.channels = 1; |
738 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 739 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
739 EXPECT_EQ(106, gcodec.pltype); | 740 EXPECT_EQ(106, gcodec.pltype); |
740 EXPECT_STREQ("ISAC", gcodec.plname); | 741 EXPECT_STREQ("ISAC", gcodec.plname); |
741 | 742 |
(...skipping 29 matching lines...) Expand all Loading... | |
771 } | 772 } |
772 | 773 |
773 // Test that we can decode OPUS without stereo parameters. | 774 // Test that we can decode OPUS without stereo parameters. |
774 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { | 775 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { |
775 EXPECT_TRUE(SetupChannel()); | 776 EXPECT_TRUE(SetupChannel()); |
776 cricket::AudioRecvParameters parameters; | 777 cricket::AudioRecvParameters parameters; |
777 parameters.codecs.push_back(kIsacCodec); | 778 parameters.codecs.push_back(kIsacCodec); |
778 parameters.codecs.push_back(kPcmuCodec); | 779 parameters.codecs.push_back(kPcmuCodec); |
779 parameters.codecs.push_back(kOpusCodec); | 780 parameters.codecs.push_back(kOpusCodec); |
780 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 781 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
781 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 782 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
782 int channel_num = voe_.GetLastChannel(); | 783 int channel_num = voe_.GetLastChannel(); |
783 webrtc::CodecInst opus; | 784 webrtc::CodecInst opus; |
784 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 785 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
785 // Even without stereo parameters, recv codecs still specify channels = 2. | 786 // Even without stereo parameters, recv codecs still specify channels = 2. |
786 EXPECT_EQ(2, opus.channels); | 787 EXPECT_EQ(2, opus.channels); |
787 EXPECT_EQ(111, opus.pltype); | 788 EXPECT_EQ(111, opus.pltype); |
788 EXPECT_STREQ("opus", opus.plname); | 789 EXPECT_STREQ("opus", opus.plname); |
789 opus.pltype = 0; | 790 opus.pltype = 0; |
790 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); | 791 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); |
791 EXPECT_EQ(111, opus.pltype); | 792 EXPECT_EQ(111, opus.pltype); |
792 } | 793 } |
793 | 794 |
794 // Test that we can decode OPUS with stereo = 0. | 795 // Test that we can decode OPUS with stereo = 0. |
795 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { | 796 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { |
796 EXPECT_TRUE(SetupChannel()); | 797 EXPECT_TRUE(SetupChannel()); |
797 cricket::AudioRecvParameters parameters; | 798 cricket::AudioRecvParameters parameters; |
798 parameters.codecs.push_back(kIsacCodec); | 799 parameters.codecs.push_back(kIsacCodec); |
799 parameters.codecs.push_back(kPcmuCodec); | 800 parameters.codecs.push_back(kPcmuCodec); |
800 parameters.codecs.push_back(kOpusCodec); | 801 parameters.codecs.push_back(kOpusCodec); |
801 parameters.codecs[2].params["stereo"] = "0"; | 802 parameters.codecs[2].params["stereo"] = "0"; |
802 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 803 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
803 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 804 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
804 int channel_num2 = voe_.GetLastChannel(); | 805 int channel_num2 = voe_.GetLastChannel(); |
805 webrtc::CodecInst opus; | 806 webrtc::CodecInst opus; |
806 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 807 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
807 // Even when stereo is off, recv codecs still specify channels = 2. | 808 // Even when stereo is off, recv codecs still specify channels = 2. |
808 EXPECT_EQ(2, opus.channels); | 809 EXPECT_EQ(2, opus.channels); |
809 EXPECT_EQ(111, opus.pltype); | 810 EXPECT_EQ(111, opus.pltype); |
810 EXPECT_STREQ("opus", opus.plname); | 811 EXPECT_STREQ("opus", opus.plname); |
811 opus.pltype = 0; | 812 opus.pltype = 0; |
812 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 813 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
813 EXPECT_EQ(111, opus.pltype); | 814 EXPECT_EQ(111, opus.pltype); |
814 } | 815 } |
815 | 816 |
816 // Test that we can decode OPUS with stereo = 1. | 817 // Test that we can decode OPUS with stereo = 1. |
817 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { | 818 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { |
818 EXPECT_TRUE(SetupChannel()); | 819 EXPECT_TRUE(SetupChannel()); |
819 cricket::AudioRecvParameters parameters; | 820 cricket::AudioRecvParameters parameters; |
820 parameters.codecs.push_back(kIsacCodec); | 821 parameters.codecs.push_back(kIsacCodec); |
821 parameters.codecs.push_back(kPcmuCodec); | 822 parameters.codecs.push_back(kPcmuCodec); |
822 parameters.codecs.push_back(kOpusCodec); | 823 parameters.codecs.push_back(kOpusCodec); |
823 parameters.codecs[2].params["stereo"] = "1"; | 824 parameters.codecs[2].params["stereo"] = "1"; |
824 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 825 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
825 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 826 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
826 int channel_num2 = voe_.GetLastChannel(); | 827 int channel_num2 = voe_.GetLastChannel(); |
827 webrtc::CodecInst opus; | 828 webrtc::CodecInst opus; |
828 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 829 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
829 EXPECT_EQ(2, opus.channels); | 830 EXPECT_EQ(2, opus.channels); |
830 EXPECT_EQ(111, opus.pltype); | 831 EXPECT_EQ(111, opus.pltype); |
831 EXPECT_STREQ("opus", opus.plname); | 832 EXPECT_STREQ("opus", opus.plname); |
832 opus.pltype = 0; | 833 opus.pltype = 0; |
833 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 834 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
834 EXPECT_EQ(111, opus.pltype); | 835 EXPECT_EQ(111, opus.pltype); |
835 } | 836 } |
836 | 837 |
837 // Test that changes to recv codecs are applied to all streams. | 838 // Test that changes to recv codecs are applied to all streams. |
838 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { | 839 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
839 EXPECT_TRUE(SetupChannel()); | 840 EXPECT_TRUE(SetupChannel()); |
840 cricket::AudioRecvParameters parameters; | 841 cricket::AudioRecvParameters parameters; |
841 parameters.codecs.push_back(kIsacCodec); | 842 parameters.codecs.push_back(kIsacCodec); |
842 parameters.codecs.push_back(kPcmuCodec); | 843 parameters.codecs.push_back(kPcmuCodec); |
843 parameters.codecs.push_back(kTelephoneEventCodec1); | 844 parameters.codecs.push_back(kTelephoneEventCodec1); |
844 parameters.codecs.push_back(kTelephoneEventCodec2); | 845 parameters.codecs.push_back(kTelephoneEventCodec2); |
845 parameters.codecs[0].id = 106; // collide with existing CN 32k | 846 parameters.codecs[0].id = 106; // collide with existing CN 32k |
846 parameters.codecs[2].id = 126; | 847 parameters.codecs[2].id = 126; |
847 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 848 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
848 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 849 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
849 int channel_num2 = voe_.GetLastChannel(); | 850 int channel_num2 = voe_.GetLastChannel(); |
850 | 851 |
851 webrtc::CodecInst gcodec; | 852 webrtc::CodecInst gcodec; |
852 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 853 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
853 gcodec.plfreq = 16000; | 854 gcodec.plfreq = 16000; |
854 gcodec.channels = 1; | 855 gcodec.channels = 1; |
855 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); | 856 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
856 EXPECT_EQ(106, gcodec.pltype); | 857 EXPECT_EQ(106, gcodec.pltype); |
857 EXPECT_STREQ("ISAC", gcodec.plname); | 858 EXPECT_STREQ("ISAC", gcodec.plname); |
858 | 859 |
(...skipping 10 matching lines...) Expand all Loading... | |
869 EXPECT_STREQ("telephone-event", gcodec.plname); | 870 EXPECT_STREQ("telephone-event", gcodec.plname); |
870 } | 871 } |
871 | 872 |
872 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { | 873 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { |
873 EXPECT_TRUE(SetupRecvStream()); | 874 EXPECT_TRUE(SetupRecvStream()); |
874 cricket::AudioRecvParameters parameters; | 875 cricket::AudioRecvParameters parameters; |
875 parameters.codecs.push_back(kIsacCodec); | 876 parameters.codecs.push_back(kIsacCodec); |
876 parameters.codecs[0].id = 106; // collide with existing CN 32k | 877 parameters.codecs[0].id = 106; // collide with existing CN 32k |
877 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 878 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
878 | 879 |
879 const auto& dm = GetRecvStreamConfig(kSsrc1).decoder_map; | 880 const auto& dm = GetRecvStreamConfig(kSsrc9).decoder_map; |
880 ASSERT_EQ(1, dm.count(106)); | 881 ASSERT_EQ(1, dm.count(106)); |
881 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106)); | 882 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106)); |
882 } | 883 } |
883 | 884 |
884 // Test that we can apply the same set of codecs again while playing. | 885 // Test that we can apply the same set of codecs again while playing. |
885 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { | 886 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { |
886 EXPECT_TRUE(SetupRecvStream()); | 887 EXPECT_TRUE(SetupRecvStream()); |
887 cricket::AudioRecvParameters parameters; | 888 cricket::AudioRecvParameters parameters; |
888 parameters.codecs.push_back(kIsacCodec); | 889 parameters.codecs.push_back(kIsacCodec); |
889 parameters.codecs.push_back(kCn16000Codec); | 890 parameters.codecs.push_back(kCn16000Codec); |
890 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 891 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
891 channel_->SetPlayout(true); | 892 channel_->SetPlayout(true); |
892 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 893 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
893 | 894 |
894 // Changing the payload type of a codec should fail. | 895 // Changing the payload type of a codec should fail. |
895 parameters.codecs[0].id = 127; | 896 parameters.codecs[0].id = 127; |
896 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); | 897 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
897 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 898 EXPECT_TRUE(GetRecvStream(kSsrc9).started()); |
898 } | 899 } |
899 | 900 |
900 // Test that we can add a codec while playing. | 901 // Test that we can add a codec while playing. |
901 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { | 902 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { |
902 EXPECT_TRUE(SetupRecvStream()); | 903 EXPECT_TRUE(SetupRecvStream()); |
903 cricket::AudioRecvParameters parameters; | 904 cricket::AudioRecvParameters parameters; |
904 parameters.codecs.push_back(kIsacCodec); | 905 parameters.codecs.push_back(kIsacCodec); |
905 parameters.codecs.push_back(kCn16000Codec); | 906 parameters.codecs.push_back(kCn16000Codec); |
906 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 907 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
907 channel_->SetPlayout(true); | 908 channel_->SetPlayout(true); |
908 | 909 |
909 parameters.codecs.push_back(kOpusCodec); | 910 parameters.codecs.push_back(kOpusCodec); |
910 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 911 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
911 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 912 EXPECT_TRUE(GetRecvStream(kSsrc9).started()); |
912 webrtc::CodecInst gcodec; | 913 webrtc::CodecInst gcodec; |
913 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec)); | 914 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec)); |
914 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); | 915 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); |
915 } | 916 } |
916 | 917 |
917 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { | 918 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { |
918 EXPECT_TRUE(SetupSendStream()); | 919 EXPECT_TRUE(SetupSendStream()); |
919 | 920 |
920 // Test that when autobw is enabled, bitrate is kept as the default | 921 // Test that when autobw is enabled, bitrate is kept as the default |
921 // value. autobw is enabled for the following tests because the target | 922 // value. autobw is enabled for the following tests because the target |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
967 | 968 |
968 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { | 969 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { |
969 EXPECT_TRUE(SetupChannel()); | 970 EXPECT_TRUE(SetupChannel()); |
970 const int kDesiredBitrate = 128000; | 971 const int kDesiredBitrate = 128000; |
971 cricket::AudioSendParameters parameters; | 972 cricket::AudioSendParameters parameters; |
972 parameters.codecs = engine_->send_codecs(); | 973 parameters.codecs = engine_->send_codecs(); |
973 parameters.max_bandwidth_bps = kDesiredBitrate; | 974 parameters.max_bandwidth_bps = kDesiredBitrate; |
974 SetSendParameters(parameters); | 975 SetSendParameters(parameters); |
975 | 976 |
976 EXPECT_TRUE(channel_->AddSendStream( | 977 EXPECT_TRUE(channel_->AddSendStream( |
977 cricket::StreamParams::CreateLegacy(kSsrc1))); | 978 cricket::StreamParams::CreateLegacy(kSsrc9))); |
978 | 979 |
979 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrc1)); | 980 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrc9)); |
980 } | 981 } |
981 | 982 |
982 // Test that bitrate cannot be set for CBR codecs. | 983 // Test that bitrate cannot be set for CBR codecs. |
983 // Bitrate is ignored if it is higher than the fixed bitrate. | 984 // Bitrate is ignored if it is higher than the fixed bitrate. |
984 // Bitrate less then the fixed bitrate is an error. | 985 // Bitrate less then the fixed bitrate is an error. |
985 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { | 986 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { |
986 EXPECT_TRUE(SetupSendStream()); | 987 EXPECT_TRUE(SetupSendStream()); |
987 | 988 |
988 // PCMU, default bitrate == 64000. | 989 // PCMU, default bitrate == 64000. |
989 SetSendParameters(send_parameters_); | 990 SetSendParameters(send_parameters_); |
990 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 991 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9)); |
991 | 992 |
992 send_parameters_.max_bandwidth_bps = 128000; | 993 send_parameters_.max_bandwidth_bps = 128000; |
993 SetSendParameters(send_parameters_); | 994 SetSendParameters(send_parameters_); |
994 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 995 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9)); |
995 | 996 |
996 send_parameters_.max_bandwidth_bps = 128; | 997 send_parameters_.max_bandwidth_bps = 128; |
997 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 998 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
998 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 999 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9)); |
999 } | 1000 } |
1000 | 1001 |
1001 // Test that the per-stream bitrate limit and the global | 1002 // Test that the per-stream bitrate limit and the global |
1002 // bitrate limit both apply. | 1003 // bitrate limit both apply. |
1003 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { | 1004 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { |
1004 EXPECT_TRUE(SetupSendStream()); | 1005 EXPECT_TRUE(SetupSendStream()); |
1005 | 1006 |
1006 // opus, default bitrate == 64000. | 1007 // opus, default bitrate == 64000. |
1007 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); | 1008 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); |
1008 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); | 1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); |
1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); | 1010 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); |
1010 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); | 1011 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); |
1011 | 1012 |
1012 // CBR codecs allow both maximums to exceed the bitrate. | 1013 // CBR codecs allow both maximums to exceed the bitrate. |
1013 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); | 1014 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); |
1014 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); | 1015 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); |
1015 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); | 1016 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); |
1016 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); | 1017 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); |
1017 | 1018 |
1018 // CBR codecs don't allow per stream maximums to be too low. | 1019 // CBR codecs don't allow per stream maximums to be too low. |
1019 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000); | 1020 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000); |
1020 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000); | 1021 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000); |
1021 } | 1022 } |
1022 | 1023 |
1023 // Test that an attempt to set RtpParameters for a stream that does not exist | 1024 // Test that an attempt to set RtpParameters for a stream that does not exist |
1024 // fails. | 1025 // fails. |
1025 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) { | 1026 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) { |
1026 EXPECT_TRUE(SetupChannel()); | 1027 EXPECT_TRUE(SetupChannel()); |
1027 webrtc::RtpParameters nonexistent_parameters = | 1028 webrtc::RtpParameters nonexistent_parameters = |
1028 channel_->GetRtpSendParameters(kSsrc1); | 1029 channel_->GetRtpSendParameters(kSsrc9); |
1029 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); | 1030 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); |
1030 | 1031 |
1031 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); | 1032 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); |
1032 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, nonexistent_parameters)); | 1033 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, nonexistent_parameters)); |
1033 } | 1034 } |
1034 | 1035 |
1035 TEST_F(WebRtcVoiceEngineTestFake, | 1036 TEST_F(WebRtcVoiceEngineTestFake, |
1036 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) { | 1037 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) { |
1037 // This test verifies that setting RtpParameters succeeds only if | 1038 // This test verifies that setting RtpParameters succeeds only if |
1038 // the structure contains exactly one encoding. | 1039 // the structure contains exactly one encoding. |
1039 // TODO(skvlad): Update this test when we start supporting setting parameters | 1040 // TODO(skvlad): Update this test when we start supporting setting parameters |
1040 // for each encoding individually. | 1041 // for each encoding individually. |
1041 | 1042 |
1042 EXPECT_TRUE(SetupSendStream()); | 1043 EXPECT_TRUE(SetupSendStream()); |
1043 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1044 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9); |
1044 // Two or more encodings should result in failure. | 1045 // Two or more encodings should result in failure. |
1045 parameters.encodings.push_back(webrtc::RtpEncodingParameters()); | 1046 parameters.encodings.push_back(webrtc::RtpEncodingParameters()); |
1046 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1047 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters)); |
1047 // Zero encodings should also fail. | 1048 // Zero encodings should also fail. |
1048 parameters.encodings.clear(); | 1049 parameters.encodings.clear(); |
1049 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1050 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters)); |
1050 } | 1051 } |
1051 | 1052 |
1052 // Changing the SSRC through RtpParameters is not allowed. | 1053 // Changing the SSRC through RtpParameters is not allowed. |
1053 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) { | 1054 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) { |
1054 EXPECT_TRUE(SetupSendStream()); | 1055 EXPECT_TRUE(SetupSendStream()); |
1055 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1056 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9); |
1056 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef); | 1057 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef); |
1057 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1058 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters)); |
1058 } | 1059 } |
1059 | 1060 |
1060 // Test that a stream will not be sending if its encoding is made | 1061 // Test that a stream will not be sending if its encoding is made |
1061 // inactive through SetRtpSendParameters. | 1062 // inactive through SetRtpSendParameters. |
1062 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { | 1063 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { |
1063 EXPECT_TRUE(SetupSendStream()); | 1064 EXPECT_TRUE(SetupSendStream()); |
1064 SetSend(true); | 1065 SetSend(true); |
1065 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 1066 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
1066 // Get current parameters and change "active" to false. | 1067 // Get current parameters and change "active" to false. |
1067 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1068 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9); |
1068 ASSERT_EQ(1u, parameters.encodings.size()); | 1069 ASSERT_EQ(1u, parameters.encodings.size()); |
1069 ASSERT_TRUE(parameters.encodings[0].active); | 1070 ASSERT_TRUE(parameters.encodings[0].active); |
1070 parameters.encodings[0].active = false; | 1071 parameters.encodings[0].active = false; |
1071 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1072 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, parameters)); |
1072 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 1073 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
1073 | 1074 |
1074 // Now change it back to active and verify we resume sending. | 1075 // Now change it back to active and verify we resume sending. |
1075 parameters.encodings[0].active = true; | 1076 parameters.encodings[0].active = true; |
1076 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1077 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, parameters)); |
1077 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 1078 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
1078 } | 1079 } |
1079 | 1080 |
1080 // Test that SetRtpSendParameters configures the correct encoding channel for | 1081 // Test that SetRtpSendParameters configures the correct encoding channel for |
1081 // each SSRC. | 1082 // each SSRC. |
1082 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { | 1083 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { |
1083 SetupForMultiSendStream(); | 1084 SetupForMultiSendStream(); |
1084 // Create send streams. | 1085 // Create send streams. |
1085 for (uint32_t ssrc : kSsrcs4) { | 1086 for (uint32_t ssrc : kSsrcs4) { |
1086 EXPECT_TRUE( | 1087 EXPECT_TRUE( |
1087 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); | 1088 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); |
(...skipping 19 matching lines...) Expand all Loading... | |
1107 } | 1108 } |
1108 | 1109 |
1109 // Test that GetRtpSendParameters returns the currently configured codecs. | 1110 // Test that GetRtpSendParameters returns the currently configured codecs. |
1110 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { | 1111 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { |
1111 EXPECT_TRUE(SetupSendStream()); | 1112 EXPECT_TRUE(SetupSendStream()); |
1112 cricket::AudioSendParameters parameters; | 1113 cricket::AudioSendParameters parameters; |
1113 parameters.codecs.push_back(kIsacCodec); | 1114 parameters.codecs.push_back(kIsacCodec); |
1114 parameters.codecs.push_back(kPcmuCodec); | 1115 parameters.codecs.push_back(kPcmuCodec); |
1115 SetSendParameters(parameters); | 1116 SetSendParameters(parameters); |
1116 | 1117 |
1117 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); | 1118 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc9); |
1118 ASSERT_EQ(2u, rtp_parameters.codecs.size()); | 1119 ASSERT_EQ(2u, rtp_parameters.codecs.size()); |
1119 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); | 1120 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); |
1120 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); | 1121 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); |
1121 } | 1122 } |
1122 | 1123 |
1123 // Test that GetRtpSendParameters returns an SSRC. | 1124 // Test that GetRtpSendParameters returns an SSRC. |
1124 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) { | 1125 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) { |
1125 EXPECT_TRUE(SetupSendStream()); | 1126 EXPECT_TRUE(SetupSendStream()); |
1126 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); | 1127 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc9); |
1127 ASSERT_EQ(1u, rtp_parameters.encodings.size()); | 1128 ASSERT_EQ(1u, rtp_parameters.encodings.size()); |
1128 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); | 1129 EXPECT_EQ(kSsrc9, rtp_parameters.encodings[0].ssrc); |
1129 } | 1130 } |
1130 | 1131 |
1131 // Test that if we set/get parameters multiple times, we get the same results. | 1132 // Test that if we set/get parameters multiple times, we get the same results. |
1132 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) { | 1133 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) { |
1133 EXPECT_TRUE(SetupSendStream()); | 1134 EXPECT_TRUE(SetupSendStream()); |
1134 cricket::AudioSendParameters parameters; | 1135 cricket::AudioSendParameters parameters; |
1135 parameters.codecs.push_back(kIsacCodec); | 1136 parameters.codecs.push_back(kIsacCodec); |
1136 parameters.codecs.push_back(kPcmuCodec); | 1137 parameters.codecs.push_back(kPcmuCodec); |
1137 SetSendParameters(parameters); | 1138 SetSendParameters(parameters); |
1138 | 1139 |
1139 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrc1); | 1140 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrc9); |
1140 | 1141 |
1141 // We should be able to set the params we just got. | 1142 // We should be able to set the params we just got. |
1142 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, initial_params)); | 1143 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, initial_params)); |
1143 | 1144 |
1144 // ... And this shouldn't change the params returned by GetRtpSendParameters. | 1145 // ... And this shouldn't change the params returned by GetRtpSendParameters. |
1145 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrc1); | 1146 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrc9); |
1146 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrc1)); | 1147 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrc9)); |
1147 } | 1148 } |
1148 | 1149 |
1149 // Test that GetRtpReceiveParameters returns the currently configured codecs. | 1150 // Test that GetRtpReceiveParameters returns the currently configured codecs. |
1150 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) { | 1151 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) { |
1151 EXPECT_TRUE(SetupRecvStream()); | 1152 EXPECT_TRUE(SetupRecvStream()); |
1152 cricket::AudioRecvParameters parameters; | 1153 cricket::AudioRecvParameters parameters; |
1153 parameters.codecs.push_back(kIsacCodec); | 1154 parameters.codecs.push_back(kIsacCodec); |
1154 parameters.codecs.push_back(kPcmuCodec); | 1155 parameters.codecs.push_back(kPcmuCodec); |
1155 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1156 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1156 | 1157 |
1157 webrtc::RtpParameters rtp_parameters = | 1158 webrtc::RtpParameters rtp_parameters = |
1158 channel_->GetRtpReceiveParameters(kSsrc1); | 1159 channel_->GetRtpReceiveParameters(kSsrc9); |
1159 ASSERT_EQ(2u, rtp_parameters.codecs.size()); | 1160 ASSERT_EQ(2u, rtp_parameters.codecs.size()); |
1160 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); | 1161 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); |
1161 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); | 1162 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); |
1162 } | 1163 } |
1163 | 1164 |
1164 // Test that GetRtpReceiveParameters returns an SSRC. | 1165 // Test that GetRtpReceiveParameters returns an SSRC. |
1165 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) { | 1166 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) { |
1166 EXPECT_TRUE(SetupRecvStream()); | 1167 EXPECT_TRUE(SetupRecvStream()); |
1167 webrtc::RtpParameters rtp_parameters = | 1168 webrtc::RtpParameters rtp_parameters = |
1168 channel_->GetRtpReceiveParameters(kSsrc1); | 1169 channel_->GetRtpReceiveParameters(kSsrc9); |
1169 ASSERT_EQ(1u, rtp_parameters.encodings.size()); | 1170 ASSERT_EQ(1u, rtp_parameters.encodings.size()); |
1170 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); | 1171 EXPECT_EQ(kSsrc9, rtp_parameters.encodings[0].ssrc); |
1171 } | 1172 } |
1172 | 1173 |
1173 // Test that if we set/get parameters multiple times, we get the same results. | 1174 // Test that if we set/get parameters multiple times, we get the same results. |
1174 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) { | 1175 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) { |
1175 EXPECT_TRUE(SetupRecvStream()); | 1176 EXPECT_TRUE(SetupRecvStream()); |
1176 cricket::AudioRecvParameters parameters; | 1177 cricket::AudioRecvParameters parameters; |
1177 parameters.codecs.push_back(kIsacCodec); | 1178 parameters.codecs.push_back(kIsacCodec); |
1178 parameters.codecs.push_back(kPcmuCodec); | 1179 parameters.codecs.push_back(kPcmuCodec); |
1179 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1180 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1180 | 1181 |
1181 webrtc::RtpParameters initial_params = | 1182 webrtc::RtpParameters initial_params = |
1182 channel_->GetRtpReceiveParameters(kSsrc1); | 1183 channel_->GetRtpReceiveParameters(kSsrc9); |
1183 | 1184 |
1184 // We should be able to set the params we just got. | 1185 // We should be able to set the params we just got. |
1185 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrc1, initial_params)); | 1186 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrc9, initial_params)); |
1186 | 1187 |
1187 // ... And this shouldn't change the params returned by | 1188 // ... And this shouldn't change the params returned by |
1188 // GetRtpReceiveParameters. | 1189 // GetRtpReceiveParameters. |
1189 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrc1); | 1190 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrc9); |
1190 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrc1)); | 1191 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrc9)); |
1191 } | 1192 } |
1192 | 1193 |
1193 // Test that we apply codecs properly. | 1194 // Test that we apply codecs properly. |
1194 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { | 1195 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { |
1195 EXPECT_TRUE(SetupSendStream()); | 1196 EXPECT_TRUE(SetupSendStream()); |
1196 cricket::AudioSendParameters parameters; | 1197 cricket::AudioSendParameters parameters; |
1197 parameters.codecs.push_back(kIsacCodec); | 1198 parameters.codecs.push_back(kIsacCodec); |
1198 parameters.codecs.push_back(kPcmuCodec); | 1199 parameters.codecs.push_back(kPcmuCodec); |
1199 parameters.codecs.push_back(kCn8000Codec); | 1200 parameters.codecs.push_back(kCn8000Codec); |
1200 parameters.codecs[0].id = 96; | 1201 parameters.codecs[0].id = 96; |
1201 parameters.codecs[0].bitrate = 48000; | 1202 parameters.codecs[0].bitrate = 48000; |
1202 const int initial_num = call_.GetNumCreatedSendStreams(); | 1203 const int initial_num = call_.GetNumCreatedSendStreams(); |
1203 SetSendParameters(parameters); | 1204 SetSendParameters(parameters); |
1204 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1205 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1205 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1206 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
1206 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1207 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
1207 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); | 1208 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); |
1208 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1209 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
1209 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1210 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
1210 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1211 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
1211 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 1212 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); |
1212 EXPECT_FALSE(channel_->CanInsertDtmf()); | 1213 EXPECT_FALSE(channel_->CanInsertDtmf()); |
1213 } | 1214 } |
1214 | 1215 |
1215 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried | 1216 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried |
(...skipping 14 matching lines...) Expand all Loading... | |
1230 SetSendParameters(parameters); | 1231 SetSendParameters(parameters); |
1231 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1232 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1232 } | 1233 } |
1233 | 1234 |
1234 // Verify that G722 is set with 16000 samples per second to WebRTC. | 1235 // Verify that G722 is set with 16000 samples per second to WebRTC. |
1235 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { | 1236 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { |
1236 EXPECT_TRUE(SetupSendStream()); | 1237 EXPECT_TRUE(SetupSendStream()); |
1237 cricket::AudioSendParameters parameters; | 1238 cricket::AudioSendParameters parameters; |
1238 parameters.codecs.push_back(kG722CodecSdp); | 1239 parameters.codecs.push_back(kG722CodecSdp); |
1239 SetSendParameters(parameters); | 1240 SetSendParameters(parameters); |
1240 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1241 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1241 EXPECT_STREQ("G722", gcodec.plname); | 1242 EXPECT_STREQ("G722", gcodec.plname); |
1242 EXPECT_EQ(1, gcodec.channels); | 1243 EXPECT_EQ(1, gcodec.channels); |
1243 EXPECT_EQ(16000, gcodec.plfreq); | 1244 EXPECT_EQ(16000, gcodec.plfreq); |
1244 } | 1245 } |
1245 | 1246 |
1246 // Test that if clockrate is not 48000 for opus, we fail. | 1247 // Test that if clockrate is not 48000 for opus, we fail. |
1247 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { | 1248 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { |
1248 EXPECT_TRUE(SetupSendStream()); | 1249 EXPECT_TRUE(SetupSendStream()); |
1249 cricket::AudioSendParameters parameters; | 1250 cricket::AudioSendParameters parameters; |
1250 parameters.codecs.push_back(kOpusCodec); | 1251 parameters.codecs.push_back(kOpusCodec); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1307 } | 1308 } |
1308 | 1309 |
1309 // Test that with bitrate=0 and no stereo, | 1310 // Test that with bitrate=0 and no stereo, |
1310 // channels and bitrate are 1 and 32000. | 1311 // channels and bitrate are 1 and 32000. |
1311 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { | 1312 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { |
1312 EXPECT_TRUE(SetupSendStream()); | 1313 EXPECT_TRUE(SetupSendStream()); |
1313 cricket::AudioSendParameters parameters; | 1314 cricket::AudioSendParameters parameters; |
1314 parameters.codecs.push_back(kOpusCodec); | 1315 parameters.codecs.push_back(kOpusCodec); |
1315 parameters.codecs[0].bitrate = 0; | 1316 parameters.codecs[0].bitrate = 0; |
1316 SetSendParameters(parameters); | 1317 SetSendParameters(parameters); |
1317 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1318 CheckSendCodec(kSsrc9, "opus", 1, 32000); |
1318 } | 1319 } |
1319 | 1320 |
1320 // Test that with bitrate=0 and stereo=0, | 1321 // Test that with bitrate=0 and stereo=0, |
1321 // channels and bitrate are 1 and 32000. | 1322 // channels and bitrate are 1 and 32000. |
1322 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { | 1323 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { |
1323 EXPECT_TRUE(SetupSendStream()); | 1324 EXPECT_TRUE(SetupSendStream()); |
1324 cricket::AudioSendParameters parameters; | 1325 cricket::AudioSendParameters parameters; |
1325 parameters.codecs.push_back(kOpusCodec); | 1326 parameters.codecs.push_back(kOpusCodec); |
1326 parameters.codecs[0].bitrate = 0; | 1327 parameters.codecs[0].bitrate = 0; |
1327 parameters.codecs[0].params["stereo"] = "0"; | 1328 parameters.codecs[0].params["stereo"] = "0"; |
1328 SetSendParameters(parameters); | 1329 SetSendParameters(parameters); |
1329 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1330 CheckSendCodec(kSsrc9, "opus", 1, 32000); |
1330 } | 1331 } |
1331 | 1332 |
1332 // Test that with bitrate=invalid and stereo=0, | 1333 // Test that with bitrate=invalid and stereo=0, |
1333 // channels and bitrate are 1 and 32000. | 1334 // channels and bitrate are 1 and 32000. |
1334 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { | 1335 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { |
1335 EXPECT_TRUE(SetupSendStream()); | 1336 EXPECT_TRUE(SetupSendStream()); |
1336 cricket::AudioSendParameters parameters; | 1337 cricket::AudioSendParameters parameters; |
1337 parameters.codecs.push_back(kOpusCodec); | 1338 parameters.codecs.push_back(kOpusCodec); |
1338 parameters.codecs[0].params["stereo"] = "0"; | 1339 parameters.codecs[0].params["stereo"] = "0"; |
1339 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1340 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1340 parameters.codecs[0].bitrate = 5999; | 1341 parameters.codecs[0].bitrate = 5999; |
1341 SetSendParameters(parameters); | 1342 SetSendParameters(parameters); |
1342 CheckSendCodec(kSsrc1, "opus", 1, 6000); | 1343 CheckSendCodec(kSsrc9, "opus", 1, 6000); |
1343 | 1344 |
1344 parameters.codecs[0].bitrate = 510001; | 1345 parameters.codecs[0].bitrate = 510001; |
1345 SetSendParameters(parameters); | 1346 SetSendParameters(parameters); |
1346 CheckSendCodec(kSsrc1, "opus", 1, 510000); | 1347 CheckSendCodec(kSsrc9, "opus", 1, 510000); |
1347 } | 1348 } |
1348 | 1349 |
1349 // Test that with bitrate=0 and stereo=1, | 1350 // Test that with bitrate=0 and stereo=1, |
1350 // channels and bitrate are 2 and 64000. | 1351 // channels and bitrate are 2 and 64000. |
1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { | 1352 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { |
1352 EXPECT_TRUE(SetupSendStream()); | 1353 EXPECT_TRUE(SetupSendStream()); |
1353 cricket::AudioSendParameters parameters; | 1354 cricket::AudioSendParameters parameters; |
1354 parameters.codecs.push_back(kOpusCodec); | 1355 parameters.codecs.push_back(kOpusCodec); |
1355 parameters.codecs[0].bitrate = 0; | 1356 parameters.codecs[0].bitrate = 0; |
1356 parameters.codecs[0].params["stereo"] = "1"; | 1357 parameters.codecs[0].params["stereo"] = "1"; |
1357 SetSendParameters(parameters); | 1358 SetSendParameters(parameters); |
1358 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1359 CheckSendCodec(kSsrc9, "opus", 2, 64000); |
1359 } | 1360 } |
1360 | 1361 |
1361 // Test that with bitrate=invalid and stereo=1, | 1362 // Test that with bitrate=invalid and stereo=1, |
1362 // channels and bitrate are 2 and 64000. | 1363 // channels and bitrate are 2 and 64000. |
1363 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { | 1364 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { |
1364 EXPECT_TRUE(SetupSendStream()); | 1365 EXPECT_TRUE(SetupSendStream()); |
1365 cricket::AudioSendParameters parameters; | 1366 cricket::AudioSendParameters parameters; |
1366 parameters.codecs.push_back(kOpusCodec); | 1367 parameters.codecs.push_back(kOpusCodec); |
1367 parameters.codecs[0].params["stereo"] = "1"; | 1368 parameters.codecs[0].params["stereo"] = "1"; |
1368 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1369 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1369 parameters.codecs[0].bitrate = 5999; | 1370 parameters.codecs[0].bitrate = 5999; |
1370 SetSendParameters(parameters); | 1371 SetSendParameters(parameters); |
1371 CheckSendCodec(kSsrc1, "opus", 2, 6000); | 1372 CheckSendCodec(kSsrc9, "opus", 2, 6000); |
1372 | 1373 |
1373 parameters.codecs[0].bitrate = 510001; | 1374 parameters.codecs[0].bitrate = 510001; |
1374 SetSendParameters(parameters); | 1375 SetSendParameters(parameters); |
1375 CheckSendCodec(kSsrc1, "opus", 2, 510000); | 1376 CheckSendCodec(kSsrc9, "opus", 2, 510000); |
1376 } | 1377 } |
1377 | 1378 |
1378 // Test that with bitrate=N and stereo unset, | 1379 // Test that with bitrate=N and stereo unset, |
1379 // channels and bitrate are 1 and N. | 1380 // channels and bitrate are 1 and N. |
1380 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { | 1381 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { |
1381 EXPECT_TRUE(SetupSendStream()); | 1382 EXPECT_TRUE(SetupSendStream()); |
1382 cricket::AudioSendParameters parameters; | 1383 cricket::AudioSendParameters parameters; |
1383 parameters.codecs.push_back(kOpusCodec); | 1384 parameters.codecs.push_back(kOpusCodec); |
1384 parameters.codecs[0].bitrate = 96000; | 1385 parameters.codecs[0].bitrate = 96000; |
1385 SetSendParameters(parameters); | 1386 SetSendParameters(parameters); |
1386 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1387 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1387 EXPECT_EQ(111, gcodec.pltype); | 1388 EXPECT_EQ(111, gcodec.pltype); |
1388 EXPECT_EQ(96000, gcodec.rate); | 1389 EXPECT_EQ(96000, gcodec.rate); |
1389 EXPECT_STREQ("opus", gcodec.plname); | 1390 EXPECT_STREQ("opus", gcodec.plname); |
1390 EXPECT_EQ(1, gcodec.channels); | 1391 EXPECT_EQ(1, gcodec.channels); |
1391 EXPECT_EQ(48000, gcodec.plfreq); | 1392 EXPECT_EQ(48000, gcodec.plfreq); |
1392 } | 1393 } |
1393 | 1394 |
1394 // Test that with bitrate=N and stereo=0, | 1395 // Test that with bitrate=N and stereo=0, |
1395 // channels and bitrate are 1 and N. | 1396 // channels and bitrate are 1 and N. |
1396 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { | 1397 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { |
1397 EXPECT_TRUE(SetupSendStream()); | 1398 EXPECT_TRUE(SetupSendStream()); |
1398 cricket::AudioSendParameters parameters; | 1399 cricket::AudioSendParameters parameters; |
1399 parameters.codecs.push_back(kOpusCodec); | 1400 parameters.codecs.push_back(kOpusCodec); |
1400 parameters.codecs[0].bitrate = 30000; | 1401 parameters.codecs[0].bitrate = 30000; |
1401 parameters.codecs[0].params["stereo"] = "0"; | 1402 parameters.codecs[0].params["stereo"] = "0"; |
1402 SetSendParameters(parameters); | 1403 SetSendParameters(parameters); |
1403 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1404 CheckSendCodec(kSsrc9, "opus", 1, 30000); |
1404 } | 1405 } |
1405 | 1406 |
1406 // Test that with bitrate=N and without any parameters, | 1407 // Test that with bitrate=N and without any parameters, |
1407 // channels and bitrate are 1 and N. | 1408 // channels and bitrate are 1 and N. |
1408 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { | 1409 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { |
1409 EXPECT_TRUE(SetupSendStream()); | 1410 EXPECT_TRUE(SetupSendStream()); |
1410 cricket::AudioSendParameters parameters; | 1411 cricket::AudioSendParameters parameters; |
1411 parameters.codecs.push_back(kOpusCodec); | 1412 parameters.codecs.push_back(kOpusCodec); |
1412 parameters.codecs[0].bitrate = 30000; | 1413 parameters.codecs[0].bitrate = 30000; |
1413 SetSendParameters(parameters); | 1414 SetSendParameters(parameters); |
1414 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1415 CheckSendCodec(kSsrc9, "opus", 1, 30000); |
1415 } | 1416 } |
1416 | 1417 |
1417 // Test that with bitrate=N and stereo=1, | 1418 // Test that with bitrate=N and stereo=1, |
1418 // channels and bitrate are 2 and N. | 1419 // channels and bitrate are 2 and N. |
1419 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { | 1420 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { |
1420 EXPECT_TRUE(SetupSendStream()); | 1421 EXPECT_TRUE(SetupSendStream()); |
1421 cricket::AudioSendParameters parameters; | 1422 cricket::AudioSendParameters parameters; |
1422 parameters.codecs.push_back(kOpusCodec); | 1423 parameters.codecs.push_back(kOpusCodec); |
1423 parameters.codecs[0].bitrate = 30000; | 1424 parameters.codecs[0].bitrate = 30000; |
1424 parameters.codecs[0].params["stereo"] = "1"; | 1425 parameters.codecs[0].params["stereo"] = "1"; |
1425 SetSendParameters(parameters); | 1426 SetSendParameters(parameters); |
1426 CheckSendCodec(kSsrc1, "opus", 2, 30000); | 1427 CheckSendCodec(kSsrc9, "opus", 2, 30000); |
1427 } | 1428 } |
1428 | 1429 |
1429 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. | 1430 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. |
1430 // Also test that the "maxaveragebitrate" can't be set to values outside the | 1431 // Also test that the "maxaveragebitrate" can't be set to values outside the |
1431 // range of 6000 and 510000 | 1432 // range of 6000 and 510000 |
1432 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { | 1433 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { |
1433 EXPECT_TRUE(SetupSendStream()); | 1434 EXPECT_TRUE(SetupSendStream()); |
1434 cricket::AudioSendParameters parameters; | 1435 cricket::AudioSendParameters parameters; |
1435 parameters.codecs.push_back(kOpusCodec); | 1436 parameters.codecs.push_back(kOpusCodec); |
1436 parameters.codecs[0].bitrate = 30000; | 1437 parameters.codecs[0].bitrate = 30000; |
1437 // Ignore if less than 6000. | 1438 // Ignore if less than 6000. |
1438 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; | 1439 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; |
1439 SetSendParameters(parameters); | 1440 SetSendParameters(parameters); |
1440 EXPECT_EQ(6000, GetCodecBitrate(kSsrc1)); | 1441 EXPECT_EQ(6000, GetCodecBitrate(kSsrc9)); |
1441 | 1442 |
1442 // Ignore if larger than 510000. | 1443 // Ignore if larger than 510000. |
1443 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; | 1444 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; |
1444 SetSendParameters(parameters); | 1445 SetSendParameters(parameters); |
1445 EXPECT_EQ(510000, GetCodecBitrate(kSsrc1)); | 1446 EXPECT_EQ(510000, GetCodecBitrate(kSsrc9)); |
1446 | 1447 |
1447 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; | 1448 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; |
1448 SetSendParameters(parameters); | 1449 SetSendParameters(parameters); |
1449 EXPECT_EQ(200000, GetCodecBitrate(kSsrc1)); | 1450 EXPECT_EQ(200000, GetCodecBitrate(kSsrc9)); |
1450 } | 1451 } |
1451 | 1452 |
1452 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { | 1453 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { |
1453 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1454 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
1454 200000); | 1455 200000); |
1455 } | 1456 } |
1456 | 1457 |
1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { | 1458 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { |
1458 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 1459 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
1459 } | 1460 } |
(...skipping 21 matching lines...) Expand all Loading... | |
1481 } | 1482 } |
1482 | 1483 |
1483 // Test that we can enable NACK with opus as caller. | 1484 // Test that we can enable NACK with opus as caller. |
1484 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { | 1485 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { |
1485 EXPECT_TRUE(SetupSendStream()); | 1486 EXPECT_TRUE(SetupSendStream()); |
1486 cricket::AudioSendParameters parameters; | 1487 cricket::AudioSendParameters parameters; |
1487 parameters.codecs.push_back(kOpusCodec); | 1488 parameters.codecs.push_back(kOpusCodec); |
1488 parameters.codecs[0].AddFeedbackParam( | 1489 parameters.codecs[0].AddFeedbackParam( |
1489 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1490 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1490 cricket::kParamValueEmpty)); | 1491 cricket::kParamValueEmpty)); |
1491 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1492 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1492 SetSendParameters(parameters); | 1493 SetSendParameters(parameters); |
1493 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1494 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1494 } | 1495 } |
1495 | 1496 |
1496 // Test that we can enable NACK with opus as callee. | 1497 // Test that we can enable NACK with opus as callee. |
1497 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { | 1498 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { |
1498 EXPECT_TRUE(SetupRecvStream()); | 1499 EXPECT_TRUE(SetupRecvStream()); |
1499 cricket::AudioSendParameters parameters; | 1500 cricket::AudioSendParameters parameters; |
1500 parameters.codecs.push_back(kOpusCodec); | 1501 parameters.codecs.push_back(kOpusCodec); |
1501 parameters.codecs[0].AddFeedbackParam( | 1502 parameters.codecs[0].AddFeedbackParam( |
1502 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1503 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1503 cricket::kParamValueEmpty)); | 1504 cricket::kParamValueEmpty)); |
1504 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1505 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1505 SetSendParameters(parameters); | 1506 SetSendParameters(parameters); |
1506 // NACK should be enabled even with no send stream. | 1507 // NACK should be enabled even with no send stream. |
1507 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1508 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1508 | 1509 |
1509 EXPECT_TRUE(channel_->AddSendStream( | 1510 EXPECT_TRUE(channel_->AddSendStream( |
1510 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1511 cricket::StreamParams::CreateLegacy(kSsrc9))); |
1511 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1512 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1512 } | 1513 } |
1513 | 1514 |
1514 // Test that we can enable NACK on receive streams. | 1515 // Test that we can enable NACK on receive streams. |
1515 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { | 1516 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { |
1516 EXPECT_TRUE(SetupSendStream()); | 1517 EXPECT_TRUE(SetupSendStream()); |
1517 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1518 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
1518 cricket::AudioSendParameters parameters; | 1519 cricket::AudioSendParameters parameters; |
1519 parameters.codecs.push_back(kOpusCodec); | 1520 parameters.codecs.push_back(kOpusCodec); |
1520 parameters.codecs[0].AddFeedbackParam( | 1521 parameters.codecs[0].AddFeedbackParam( |
1521 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1522 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1522 cricket::kParamValueEmpty)); | 1523 cricket::kParamValueEmpty)); |
1523 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1524 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1524 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1525 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1525 SetSendParameters(parameters); | 1526 SetSendParameters(parameters); |
1526 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1527 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1527 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1528 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1528 } | 1529 } |
1529 | 1530 |
1530 // Test that we can disable NACK. | 1531 // Test that we can disable NACK. |
1531 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { | 1532 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { |
1532 EXPECT_TRUE(SetupSendStream()); | 1533 EXPECT_TRUE(SetupSendStream()); |
1533 cricket::AudioSendParameters parameters; | 1534 cricket::AudioSendParameters parameters; |
1534 parameters.codecs.push_back(kOpusCodec); | 1535 parameters.codecs.push_back(kOpusCodec); |
1535 parameters.codecs[0].AddFeedbackParam( | 1536 parameters.codecs[0].AddFeedbackParam( |
1536 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1537 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1537 cricket::kParamValueEmpty)); | 1538 cricket::kParamValueEmpty)); |
1538 SetSendParameters(parameters); | 1539 SetSendParameters(parameters); |
1539 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1540 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1540 | 1541 |
1541 parameters.codecs.clear(); | 1542 parameters.codecs.clear(); |
1542 parameters.codecs.push_back(kOpusCodec); | 1543 parameters.codecs.push_back(kOpusCodec); |
1543 SetSendParameters(parameters); | 1544 SetSendParameters(parameters); |
1544 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1545 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1545 } | 1546 } |
1546 | 1547 |
1547 // Test that we can disable NACK on receive streams. | 1548 // Test that we can disable NACK on receive streams. |
1548 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { | 1549 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { |
1549 EXPECT_TRUE(SetupSendStream()); | 1550 EXPECT_TRUE(SetupSendStream()); |
1550 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1551 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
1551 cricket::AudioSendParameters parameters; | 1552 cricket::AudioSendParameters parameters; |
1552 parameters.codecs.push_back(kOpusCodec); | 1553 parameters.codecs.push_back(kOpusCodec); |
1553 parameters.codecs[0].AddFeedbackParam( | 1554 parameters.codecs[0].AddFeedbackParam( |
1554 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1555 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1555 cricket::kParamValueEmpty)); | 1556 cricket::kParamValueEmpty)); |
1556 SetSendParameters(parameters); | 1557 SetSendParameters(parameters); |
1557 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1558 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1558 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1559 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1559 | 1560 |
1560 parameters.codecs.clear(); | 1561 parameters.codecs.clear(); |
1561 parameters.codecs.push_back(kOpusCodec); | 1562 parameters.codecs.push_back(kOpusCodec); |
1562 SetSendParameters(parameters); | 1563 SetSendParameters(parameters); |
1563 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1564 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1564 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1565 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1565 } | 1566 } |
1566 | 1567 |
1567 // Test that NACK is enabled on a new receive stream. | 1568 // Test that NACK is enabled on a new receive stream. |
1568 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { | 1569 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { |
1569 EXPECT_TRUE(SetupSendStream()); | 1570 EXPECT_TRUE(SetupSendStream()); |
1570 cricket::AudioSendParameters parameters; | 1571 cricket::AudioSendParameters parameters; |
1571 parameters.codecs.push_back(kIsacCodec); | 1572 parameters.codecs.push_back(kIsacCodec); |
1572 parameters.codecs.push_back(kCn16000Codec); | 1573 parameters.codecs.push_back(kCn16000Codec); |
1573 parameters.codecs[0].AddFeedbackParam( | 1574 parameters.codecs[0].AddFeedbackParam( |
1574 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1575 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1575 cricket::kParamValueEmpty)); | 1576 cricket::kParamValueEmpty)); |
1576 SetSendParameters(parameters); | 1577 SetSendParameters(parameters); |
1577 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1578 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms); |
1578 | 1579 |
1579 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1580 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
1580 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1581 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1581 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 1582 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
1582 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); | 1583 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); |
1583 } | 1584 } |
1584 | 1585 |
1585 // Test that without useinbandfec, Opus FEC is off. | 1586 // Test that without useinbandfec, Opus FEC is off. |
1586 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { | 1587 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { |
1587 EXPECT_TRUE(SetupSendStream()); | 1588 EXPECT_TRUE(SetupSendStream()); |
1588 cricket::AudioSendParameters parameters; | 1589 cricket::AudioSendParameters parameters; |
1589 parameters.codecs.push_back(kOpusCodec); | 1590 parameters.codecs.push_back(kOpusCodec); |
1590 SetSendParameters(parameters); | 1591 SetSendParameters(parameters); |
1591 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1592 EXPECT_FALSE(GetCodecFec(kSsrc9)); |
1592 } | 1593 } |
1593 | 1594 |
1594 // Test that with useinbandfec=0, Opus FEC is off. | 1595 // Test that with useinbandfec=0, Opus FEC is off. |
1595 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { | 1596 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { |
1596 EXPECT_TRUE(SetupSendStream()); | 1597 EXPECT_TRUE(SetupSendStream()); |
1597 cricket::AudioSendParameters parameters; | 1598 cricket::AudioSendParameters parameters; |
1598 parameters.codecs.push_back(kOpusCodec); | 1599 parameters.codecs.push_back(kOpusCodec); |
1599 parameters.codecs[0].bitrate = 0; | 1600 parameters.codecs[0].bitrate = 0; |
1600 parameters.codecs[0].params["useinbandfec"] = "0"; | 1601 parameters.codecs[0].params["useinbandfec"] = "0"; |
1601 SetSendParameters(parameters); | 1602 SetSendParameters(parameters); |
1602 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1603 CheckSendCodec(kSsrc9, "opus", 1, 32000); |
1603 } | 1604 } |
1604 | 1605 |
1605 // Test that with useinbandfec=1, Opus FEC is on. | 1606 // Test that with useinbandfec=1, Opus FEC is on. |
1606 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { | 1607 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { |
1607 EXPECT_TRUE(SetupSendStream()); | 1608 EXPECT_TRUE(SetupSendStream()); |
1608 cricket::AudioSendParameters parameters; | 1609 cricket::AudioSendParameters parameters; |
1609 parameters.codecs.push_back(kOpusCodec); | 1610 parameters.codecs.push_back(kOpusCodec); |
1610 parameters.codecs[0].bitrate = 0; | 1611 parameters.codecs[0].bitrate = 0; |
1611 parameters.codecs[0].params["useinbandfec"] = "1"; | 1612 parameters.codecs[0].params["useinbandfec"] = "1"; |
1612 SetSendParameters(parameters); | 1613 SetSendParameters(parameters); |
1613 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1614 EXPECT_TRUE(GetCodecFec(kSsrc9)); |
1614 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1615 CheckSendCodec(kSsrc9, "opus", 1, 32000); |
1615 } | 1616 } |
1616 | 1617 |
1617 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. | 1618 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. |
1618 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { | 1619 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { |
1619 EXPECT_TRUE(SetupSendStream()); | 1620 EXPECT_TRUE(SetupSendStream()); |
1620 cricket::AudioSendParameters parameters; | 1621 cricket::AudioSendParameters parameters; |
1621 parameters.codecs.push_back(kOpusCodec); | 1622 parameters.codecs.push_back(kOpusCodec); |
1622 parameters.codecs[0].bitrate = 0; | 1623 parameters.codecs[0].bitrate = 0; |
1623 parameters.codecs[0].params["stereo"] = "1"; | 1624 parameters.codecs[0].params["stereo"] = "1"; |
1624 parameters.codecs[0].params["useinbandfec"] = "1"; | 1625 parameters.codecs[0].params["useinbandfec"] = "1"; |
1625 SetSendParameters(parameters); | 1626 SetSendParameters(parameters); |
1626 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1627 EXPECT_TRUE(GetCodecFec(kSsrc9)); |
1627 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1628 CheckSendCodec(kSsrc9, "opus", 2, 64000); |
1628 } | 1629 } |
1629 | 1630 |
1630 // Test that with non-Opus, codec FEC is off. | 1631 // Test that with non-Opus, codec FEC is off. |
1631 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { | 1632 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { |
1632 EXPECT_TRUE(SetupSendStream()); | 1633 EXPECT_TRUE(SetupSendStream()); |
1633 cricket::AudioSendParameters parameters; | 1634 cricket::AudioSendParameters parameters; |
1634 parameters.codecs.push_back(kIsacCodec); | 1635 parameters.codecs.push_back(kIsacCodec); |
1635 SetSendParameters(parameters); | 1636 SetSendParameters(parameters); |
1636 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1637 EXPECT_FALSE(GetCodecFec(kSsrc9)); |
1637 } | 1638 } |
1638 | 1639 |
1639 // Test the with non-Opus, even if useinbandfec=1, FEC is off. | 1640 // Test the with non-Opus, even if useinbandfec=1, FEC is off. |
1640 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { | 1641 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { |
1641 EXPECT_TRUE(SetupSendStream()); | 1642 EXPECT_TRUE(SetupSendStream()); |
1642 cricket::AudioSendParameters parameters; | 1643 cricket::AudioSendParameters parameters; |
1643 parameters.codecs.push_back(kIsacCodec); | 1644 parameters.codecs.push_back(kIsacCodec); |
1644 parameters.codecs[0].params["useinbandfec"] = "1"; | 1645 parameters.codecs[0].params["useinbandfec"] = "1"; |
1645 SetSendParameters(parameters); | 1646 SetSendParameters(parameters); |
1646 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1647 EXPECT_FALSE(GetCodecFec(kSsrc9)); |
1647 } | 1648 } |
1648 | 1649 |
1649 // Test that Opus FEC status can be changed. | 1650 // Test that Opus FEC status can be changed. |
1650 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { | 1651 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { |
1651 EXPECT_TRUE(SetupSendStream()); | 1652 EXPECT_TRUE(SetupSendStream()); |
1652 cricket::AudioSendParameters parameters; | 1653 cricket::AudioSendParameters parameters; |
1653 parameters.codecs.push_back(kOpusCodec); | 1654 parameters.codecs.push_back(kOpusCodec); |
1654 SetSendParameters(parameters); | 1655 SetSendParameters(parameters); |
1655 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1656 EXPECT_FALSE(GetCodecFec(kSsrc9)); |
1656 | 1657 |
1657 parameters.codecs[0].params["useinbandfec"] = "1"; | 1658 parameters.codecs[0].params["useinbandfec"] = "1"; |
1658 SetSendParameters(parameters); | 1659 SetSendParameters(parameters); |
1659 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1660 EXPECT_TRUE(GetCodecFec(kSsrc9)); |
1660 } | 1661 } |
1661 | 1662 |
1662 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | 1663 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
1663 EXPECT_TRUE(SetupChannel()); | 1664 EXPECT_TRUE(SetupChannel()); |
1664 cricket::AudioSendParameters send_parameters; | 1665 cricket::AudioSendParameters send_parameters; |
1665 send_parameters.codecs.push_back(kOpusCodec); | 1666 send_parameters.codecs.push_back(kOpusCodec); |
1666 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | 1667 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
1667 SetSendParameters(send_parameters); | 1668 SetSendParameters(send_parameters); |
1668 | 1669 |
1669 cricket::AudioRecvParameters recv_parameters; | 1670 cricket::AudioRecvParameters recv_parameters; |
1670 recv_parameters.codecs.push_back(kIsacCodec); | 1671 recv_parameters.codecs.push_back(kIsacCodec); |
1671 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | 1672 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
1672 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 1673 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
1673 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1674 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc9) != nullptr); |
1674 EXPECT_FALSE( | 1675 EXPECT_FALSE( |
1675 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1676 call_.GetAudioReceiveStream(kSsrc9)->GetConfig().rtp.transport_cc); |
1676 | 1677 |
1677 send_parameters.codecs = engine_->send_codecs(); | 1678 send_parameters.codecs = engine_->send_codecs(); |
1678 SetSendParameters(send_parameters); | 1679 SetSendParameters(send_parameters); |
1679 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1680 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc9) != nullptr); |
1680 EXPECT_TRUE( | 1681 EXPECT_TRUE( |
1681 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1682 call_.GetAudioReceiveStream(kSsrc9)->GetConfig().rtp.transport_cc); |
1682 } | 1683 } |
1683 | 1684 |
1684 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | 1685 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. |
1685 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | 1686 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { |
1686 EXPECT_TRUE(SetupSendStream()); | 1687 EXPECT_TRUE(SetupSendStream()); |
1687 cricket::AudioSendParameters parameters; | 1688 cricket::AudioSendParameters parameters; |
1688 parameters.codecs.push_back(kOpusCodec); | 1689 parameters.codecs.push_back(kOpusCodec); |
1689 parameters.codecs[0].bitrate = 0; | 1690 parameters.codecs[0].bitrate = 0; |
1690 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1691 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1691 SetSendParameters(parameters); | 1692 SetSendParameters(parameters); |
1692 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | 1693 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc9)); |
1693 EXPECT_EQ(12000, GetCodecBitrate(kSsrc1)); | 1694 EXPECT_EQ(12000, GetCodecBitrate(kSsrc9)); |
1694 | 1695 |
1695 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1696 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1696 SetSendParameters(parameters); | 1697 SetSendParameters(parameters); |
1697 EXPECT_EQ(24000, GetCodecBitrate(kSsrc1)); | 1698 EXPECT_EQ(24000, GetCodecBitrate(kSsrc9)); |
1698 } | 1699 } |
1699 | 1700 |
1700 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. | 1701 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. |
1701 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { | 1702 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { |
1702 EXPECT_TRUE(SetupSendStream()); | 1703 EXPECT_TRUE(SetupSendStream()); |
1703 cricket::AudioSendParameters parameters; | 1704 cricket::AudioSendParameters parameters; |
1704 parameters.codecs.push_back(kOpusCodec); | 1705 parameters.codecs.push_back(kOpusCodec); |
1705 parameters.codecs[0].bitrate = 0; | 1706 parameters.codecs[0].bitrate = 0; |
1706 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); | 1707 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); |
1707 SetSendParameters(parameters); | 1708 SetSendParameters(parameters); |
1708 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc1)); | 1709 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc9)); |
1709 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | 1710 EXPECT_EQ(20000, GetCodecBitrate(kSsrc9)); |
1710 | 1711 |
1711 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1712 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1712 SetSendParameters(parameters); | 1713 SetSendParameters(parameters); |
1713 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | 1714 EXPECT_EQ(40000, GetCodecBitrate(kSsrc9)); |
1714 } | 1715 } |
1715 | 1716 |
1716 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. | 1717 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. |
1717 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { | 1718 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { |
1718 EXPECT_TRUE(SetupSendStream()); | 1719 EXPECT_TRUE(SetupSendStream()); |
1719 cricket::AudioSendParameters parameters; | 1720 cricket::AudioSendParameters parameters; |
1720 parameters.codecs.push_back(kOpusCodec); | 1721 parameters.codecs.push_back(kOpusCodec); |
1721 parameters.codecs[0].bitrate = 0; | 1722 parameters.codecs[0].bitrate = 0; |
1722 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); | 1723 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); |
1723 SetSendParameters(parameters); | 1724 SetSendParameters(parameters); |
1724 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc1)); | 1725 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc9)); |
1725 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | 1726 EXPECT_EQ(20000, GetCodecBitrate(kSsrc9)); |
1726 | 1727 |
1727 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1728 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1728 SetSendParameters(parameters); | 1729 SetSendParameters(parameters); |
1729 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | 1730 EXPECT_EQ(40000, GetCodecBitrate(kSsrc9)); |
1730 } | 1731 } |
1731 | 1732 |
1732 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. | 1733 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. |
1733 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { | 1734 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { |
1734 EXPECT_TRUE(SetupSendStream()); | 1735 EXPECT_TRUE(SetupSendStream()); |
1735 cricket::AudioSendParameters parameters; | 1736 cricket::AudioSendParameters parameters; |
1736 parameters.codecs.push_back(kOpusCodec); | 1737 parameters.codecs.push_back(kOpusCodec); |
1737 parameters.codecs[0].bitrate = 0; | 1738 parameters.codecs[0].bitrate = 0; |
1738 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); | 1739 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); |
1739 SetSendParameters(parameters); | 1740 SetSendParameters(parameters); |
1740 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc1)); | 1741 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc9)); |
1741 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | 1742 EXPECT_EQ(32000, GetCodecBitrate(kSsrc9)); |
1742 | 1743 |
1743 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1744 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1744 SetSendParameters(parameters); | 1745 SetSendParameters(parameters); |
1745 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1746 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9)); |
1746 } | 1747 } |
1747 | 1748 |
1748 // Test 24000 < maxplaybackrate triggers Opus full band mode. | 1749 // Test 24000 < maxplaybackrate triggers Opus full band mode. |
1749 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { | 1750 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { |
1750 EXPECT_TRUE(SetupSendStream()); | 1751 EXPECT_TRUE(SetupSendStream()); |
1751 cricket::AudioSendParameters parameters; | 1752 cricket::AudioSendParameters parameters; |
1752 parameters.codecs.push_back(kOpusCodec); | 1753 parameters.codecs.push_back(kOpusCodec); |
1753 parameters.codecs[0].bitrate = 0; | 1754 parameters.codecs[0].bitrate = 0; |
1754 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); | 1755 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); |
1755 SetSendParameters(parameters); | 1756 SetSendParameters(parameters); |
1756 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc1)); | 1757 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc9)); |
1757 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | 1758 EXPECT_EQ(32000, GetCodecBitrate(kSsrc9)); |
1758 | 1759 |
1759 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1760 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1760 SetSendParameters(parameters); | 1761 SetSendParameters(parameters); |
1761 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1762 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9)); |
1762 } | 1763 } |
1763 | 1764 |
1764 // Test Opus that without maxplaybackrate, default playback rate is used. | 1765 // Test Opus that without maxplaybackrate, default playback rate is used. |
1765 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { | 1766 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { |
1766 EXPECT_TRUE(SetupSendStream()); | 1767 EXPECT_TRUE(SetupSendStream()); |
1767 cricket::AudioSendParameters parameters; | 1768 cricket::AudioSendParameters parameters; |
1768 parameters.codecs.push_back(kOpusCodec); | 1769 parameters.codecs.push_back(kOpusCodec); |
1769 SetSendParameters(parameters); | 1770 SetSendParameters(parameters); |
1770 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | 1771 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc9)); |
1771 } | 1772 } |
1772 | 1773 |
1773 // Test the with non-Opus, maxplaybackrate has no effect. | 1774 // Test the with non-Opus, maxplaybackrate has no effect. |
1774 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { | 1775 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { |
1775 EXPECT_TRUE(SetupSendStream()); | 1776 EXPECT_TRUE(SetupSendStream()); |
1776 cricket::AudioSendParameters parameters; | 1777 cricket::AudioSendParameters parameters; |
1777 parameters.codecs.push_back(kIsacCodec); | 1778 parameters.codecs.push_back(kIsacCodec); |
1778 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); | 1779 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); |
1779 SetSendParameters(parameters); | 1780 SetSendParameters(parameters); |
1780 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc1)); | 1781 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc9)); |
1781 } | 1782 } |
1782 | 1783 |
1783 // Test maxplaybackrate can be set on two streams. | 1784 // Test maxplaybackrate can be set on two streams. |
1784 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { | 1785 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { |
1785 EXPECT_TRUE(SetupSendStream()); | 1786 EXPECT_TRUE(SetupSendStream()); |
1786 cricket::AudioSendParameters parameters; | 1787 cricket::AudioSendParameters parameters; |
1787 parameters.codecs.push_back(kOpusCodec); | 1788 parameters.codecs.push_back(kOpusCodec); |
1788 SetSendParameters(parameters); | 1789 SetSendParameters(parameters); |
1789 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | 1790 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc9)); |
1790 | 1791 |
1791 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1792 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1792 SetSendParameters(parameters); | 1793 SetSendParameters(parameters); |
1793 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | 1794 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc9)); |
1794 | 1795 |
1795 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); | 1796 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); |
1796 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); | 1797 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); |
1797 } | 1798 } |
1798 | 1799 |
1799 // Test that with usedtx=0, Opus DTX is off. | 1800 // Test that with usedtx=0, Opus DTX is off. |
1800 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { | 1801 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { |
1801 EXPECT_TRUE(SetupSendStream()); | 1802 EXPECT_TRUE(SetupSendStream()); |
1802 cricket::AudioSendParameters parameters; | 1803 cricket::AudioSendParameters parameters; |
1803 parameters.codecs.push_back(kOpusCodec); | 1804 parameters.codecs.push_back(kOpusCodec); |
1804 parameters.codecs[0].params["usedtx"] = "0"; | 1805 parameters.codecs[0].params["usedtx"] = "0"; |
1805 SetSendParameters(parameters); | 1806 SetSendParameters(parameters); |
1806 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | 1807 EXPECT_FALSE(GetOpusDtx(kSsrc9)); |
1807 } | 1808 } |
1808 | 1809 |
1809 // Test that with usedtx=1, Opus DTX is on. | 1810 // Test that with usedtx=1, Opus DTX is on. |
1810 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { | 1811 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { |
1811 EXPECT_TRUE(SetupSendStream()); | 1812 EXPECT_TRUE(SetupSendStream()); |
1812 cricket::AudioSendParameters parameters; | 1813 cricket::AudioSendParameters parameters; |
1813 parameters.codecs.push_back(kOpusCodec); | 1814 parameters.codecs.push_back(kOpusCodec); |
1814 parameters.codecs[0].params["usedtx"] = "1"; | 1815 parameters.codecs[0].params["usedtx"] = "1"; |
1815 SetSendParameters(parameters); | 1816 SetSendParameters(parameters); |
1816 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | 1817 EXPECT_TRUE(GetOpusDtx(kSsrc9)); |
1817 } | 1818 } |
1818 | 1819 |
1819 // Test that usedtx=1 works with stereo Opus. | 1820 // Test that usedtx=1 works with stereo Opus. |
1820 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { | 1821 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { |
1821 EXPECT_TRUE(SetupSendStream()); | 1822 EXPECT_TRUE(SetupSendStream()); |
1822 cricket::AudioSendParameters parameters; | 1823 cricket::AudioSendParameters parameters; |
1823 parameters.codecs.push_back(kOpusCodec); | 1824 parameters.codecs.push_back(kOpusCodec); |
1824 parameters.codecs[0].params["usedtx"] = "1"; | 1825 parameters.codecs[0].params["usedtx"] = "1"; |
1825 parameters.codecs[0].params["stereo"] = "1"; | 1826 parameters.codecs[0].params["stereo"] = "1"; |
1826 SetSendParameters(parameters); | 1827 SetSendParameters(parameters); |
1827 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | 1828 EXPECT_TRUE(GetOpusDtx(kSsrc9)); |
1828 } | 1829 } |
1829 | 1830 |
1830 // Test that usedtx=1 does not work with non Opus. | 1831 // Test that usedtx=1 does not work with non Opus. |
1831 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { | 1832 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { |
1832 EXPECT_TRUE(SetupSendStream()); | 1833 EXPECT_TRUE(SetupSendStream()); |
1833 cricket::AudioSendParameters parameters; | 1834 cricket::AudioSendParameters parameters; |
1834 parameters.codecs.push_back(kIsacCodec); | 1835 parameters.codecs.push_back(kIsacCodec); |
1835 parameters.codecs[0].params["usedtx"] = "1"; | 1836 parameters.codecs[0].params["usedtx"] = "1"; |
1836 SetSendParameters(parameters); | 1837 SetSendParameters(parameters); |
1837 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | 1838 EXPECT_FALSE(GetOpusDtx(kSsrc9)); |
1838 } | 1839 } |
1839 | 1840 |
1840 // Test that we can switch back and forth between Opus and ISAC with CN. | 1841 // Test that we can switch back and forth between Opus and ISAC with CN. |
1841 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { | 1842 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { |
1842 EXPECT_TRUE(SetupSendStream()); | 1843 EXPECT_TRUE(SetupSendStream()); |
1843 | 1844 |
1844 cricket::AudioSendParameters opus_parameters; | 1845 cricket::AudioSendParameters opus_parameters; |
1845 opus_parameters.codecs.push_back(kOpusCodec); | 1846 opus_parameters.codecs.push_back(kOpusCodec); |
1846 SetSendParameters(opus_parameters); | 1847 SetSendParameters(opus_parameters); |
1847 { | 1848 { |
1848 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1849 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1849 EXPECT_EQ(111, gcodec.pltype); | 1850 EXPECT_EQ(111, gcodec.pltype); |
1850 EXPECT_STREQ("opus", gcodec.plname); | 1851 EXPECT_STREQ("opus", gcodec.plname); |
1851 } | 1852 } |
1852 | 1853 |
1853 cricket::AudioSendParameters isac_parameters; | 1854 cricket::AudioSendParameters isac_parameters; |
1854 isac_parameters.codecs.push_back(kIsacCodec); | 1855 isac_parameters.codecs.push_back(kIsacCodec); |
1855 isac_parameters.codecs.push_back(kCn16000Codec); | 1856 isac_parameters.codecs.push_back(kCn16000Codec); |
1856 isac_parameters.codecs.push_back(kOpusCodec); | 1857 isac_parameters.codecs.push_back(kOpusCodec); |
1857 SetSendParameters(isac_parameters); | 1858 SetSendParameters(isac_parameters); |
1858 { | 1859 { |
1859 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1860 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1860 EXPECT_EQ(103, gcodec.pltype); | 1861 EXPECT_EQ(103, gcodec.pltype); |
1861 EXPECT_STREQ("ISAC", gcodec.plname); | 1862 EXPECT_STREQ("ISAC", gcodec.plname); |
1862 } | 1863 } |
1863 | 1864 |
1864 SetSendParameters(opus_parameters); | 1865 SetSendParameters(opus_parameters); |
1865 { | 1866 { |
1866 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1867 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1867 EXPECT_EQ(111, gcodec.pltype); | 1868 EXPECT_EQ(111, gcodec.pltype); |
1868 EXPECT_STREQ("opus", gcodec.plname); | 1869 EXPECT_STREQ("opus", gcodec.plname); |
1869 } | 1870 } |
1870 } | 1871 } |
1871 | 1872 |
1872 // Test that we handle various ways of specifying bitrate. | 1873 // Test that we handle various ways of specifying bitrate. |
1873 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { | 1874 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { |
1874 EXPECT_TRUE(SetupSendStream()); | 1875 EXPECT_TRUE(SetupSendStream()); |
1875 cricket::AudioSendParameters parameters; | 1876 cricket::AudioSendParameters parameters; |
1876 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 | 1877 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 |
1877 SetSendParameters(parameters); | 1878 SetSendParameters(parameters); |
1878 { | 1879 { |
1879 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1880 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1880 EXPECT_EQ(103, gcodec.pltype); | 1881 EXPECT_EQ(103, gcodec.pltype); |
1881 EXPECT_STREQ("ISAC", gcodec.plname); | 1882 EXPECT_STREQ("ISAC", gcodec.plname); |
1882 EXPECT_EQ(32000, gcodec.rate); | 1883 EXPECT_EQ(32000, gcodec.rate); |
1883 } | 1884 } |
1884 | 1885 |
1885 parameters.codecs[0].bitrate = 0; // bitrate == default | 1886 parameters.codecs[0].bitrate = 0; // bitrate == default |
1886 SetSendParameters(parameters); | 1887 SetSendParameters(parameters); |
1887 { | 1888 { |
1888 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1889 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1889 EXPECT_EQ(103, gcodec.pltype); | 1890 EXPECT_EQ(103, gcodec.pltype); |
1890 EXPECT_STREQ("ISAC", gcodec.plname); | 1891 EXPECT_STREQ("ISAC", gcodec.plname); |
1891 EXPECT_EQ(32000, gcodec.rate); | 1892 EXPECT_EQ(32000, gcodec.rate); |
1892 } | 1893 } |
1893 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 | 1894 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 |
1894 SetSendParameters(parameters); | 1895 SetSendParameters(parameters); |
1895 { | 1896 { |
1896 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1897 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1897 EXPECT_EQ(103, gcodec.pltype); | 1898 EXPECT_EQ(103, gcodec.pltype); |
1898 EXPECT_STREQ("ISAC", gcodec.plname); | 1899 EXPECT_STREQ("ISAC", gcodec.plname); |
1899 EXPECT_EQ(28000, gcodec.rate); | 1900 EXPECT_EQ(28000, gcodec.rate); |
1900 } | 1901 } |
1901 | 1902 |
1902 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 | 1903 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 |
1903 SetSendParameters(parameters); | 1904 SetSendParameters(parameters); |
1904 { | 1905 { |
1905 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1906 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1906 EXPECT_EQ(0, gcodec.pltype); | 1907 EXPECT_EQ(0, gcodec.pltype); |
1907 EXPECT_STREQ("PCMU", gcodec.plname); | 1908 EXPECT_STREQ("PCMU", gcodec.plname); |
1908 EXPECT_EQ(64000, gcodec.rate); | 1909 EXPECT_EQ(64000, gcodec.rate); |
1909 } | 1910 } |
1910 | 1911 |
1911 parameters.codecs[0].bitrate = 0; // bitrate == default | 1912 parameters.codecs[0].bitrate = 0; // bitrate == default |
1912 SetSendParameters(parameters); | 1913 SetSendParameters(parameters); |
1913 { | 1914 { |
1914 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1915 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1915 EXPECT_EQ(0, gcodec.pltype); | 1916 EXPECT_EQ(0, gcodec.pltype); |
1916 EXPECT_STREQ("PCMU", gcodec.plname); | 1917 EXPECT_STREQ("PCMU", gcodec.plname); |
1917 EXPECT_EQ(64000, gcodec.rate); | 1918 EXPECT_EQ(64000, gcodec.rate); |
1918 } | 1919 } |
1919 | 1920 |
1920 parameters.codecs[0] = kOpusCodec; | 1921 parameters.codecs[0] = kOpusCodec; |
1921 parameters.codecs[0].bitrate = 0; // bitrate == default | 1922 parameters.codecs[0].bitrate = 0; // bitrate == default |
1922 SetSendParameters(parameters); | 1923 SetSendParameters(parameters); |
1923 { | 1924 { |
1924 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1925 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1925 EXPECT_EQ(111, gcodec.pltype); | 1926 EXPECT_EQ(111, gcodec.pltype); |
1926 EXPECT_STREQ("opus", gcodec.plname); | 1927 EXPECT_STREQ("opus", gcodec.plname); |
1927 EXPECT_EQ(32000, gcodec.rate); | 1928 EXPECT_EQ(32000, gcodec.rate); |
1928 } | 1929 } |
1929 } | 1930 } |
1930 | 1931 |
1931 // Test that we could set packet size specified in kCodecParamPTime. | 1932 // Test that we could set packet size specified in kCodecParamPTime. |
1932 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { | 1933 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { |
1933 EXPECT_TRUE(SetupSendStream()); | 1934 EXPECT_TRUE(SetupSendStream()); |
1934 cricket::AudioSendParameters parameters; | 1935 cricket::AudioSendParameters parameters; |
1935 parameters.codecs.push_back(kOpusCodec); | 1936 parameters.codecs.push_back(kOpusCodec); |
1936 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1937 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1937 SetSendParameters(parameters); | 1938 SetSendParameters(parameters); |
1938 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. | 1939 EXPECT_EQ(1920, GetCodecPacSize(kSsrc9)); // Opus gets 40ms. |
1939 | 1940 |
1940 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. | 1941 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. |
1941 SetSendParameters(parameters); | 1942 SetSendParameters(parameters); |
1942 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. | 1943 EXPECT_EQ(480, GetCodecPacSize(kSsrc9)); // Opus gets 10ms. |
1943 | 1944 |
1944 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. | 1945 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. |
1945 SetSendParameters(parameters); | 1946 SetSendParameters(parameters); |
1946 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. | 1947 EXPECT_EQ(2880, GetCodecPacSize(kSsrc9)); // Opus gets 60ms. |
1947 | 1948 |
1948 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. | 1949 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. |
1949 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1950 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1950 SetSendParameters(parameters); | 1951 SetSendParameters(parameters); |
1951 EXPECT_EQ(480, GetCodecPacSize( | 1952 EXPECT_EQ(480, GetCodecPacSize( |
1952 kSsrc1)); // Isac gets 30ms as the next smallest value. | 1953 kSsrc9)); // Isac gets 30ms as the next smallest value. |
1953 | 1954 |
1954 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. | 1955 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. |
1955 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); | 1956 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); |
1956 SetSendParameters(parameters); | 1957 SetSendParameters(parameters); |
1957 EXPECT_EQ(640, GetCodecPacSize( | 1958 EXPECT_EQ(640, GetCodecPacSize( |
1958 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. | 1959 kSsrc9)); // G722 gets 40ms @16kHz as defined in VoE. |
1959 } | 1960 } |
1960 | 1961 |
1961 // Test that we fail if no codecs are specified. | 1962 // Test that we fail if no codecs are specified. |
1962 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { | 1963 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { |
1963 EXPECT_TRUE(SetupSendStream()); | 1964 EXPECT_TRUE(SetupSendStream()); |
1964 cricket::AudioSendParameters parameters; | 1965 cricket::AudioSendParameters parameters; |
1965 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1966 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1966 } | 1967 } |
1967 | 1968 |
1968 // Test that we can set send codecs even with telephone-event codec as the first | 1969 // Test that we can set send codecs even with telephone-event codec as the first |
1969 // one on the list. | 1970 // one on the list. |
1970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { | 1971 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
1971 EXPECT_TRUE(SetupSendStream()); | 1972 EXPECT_TRUE(SetupSendStream()); |
1972 cricket::AudioSendParameters parameters; | 1973 cricket::AudioSendParameters parameters; |
1973 parameters.codecs.push_back(kTelephoneEventCodec1); | 1974 parameters.codecs.push_back(kTelephoneEventCodec1); |
1974 parameters.codecs.push_back(kIsacCodec); | 1975 parameters.codecs.push_back(kIsacCodec); |
1975 parameters.codecs.push_back(kPcmuCodec); | 1976 parameters.codecs.push_back(kPcmuCodec); |
1976 parameters.codecs[0].id = 98; // DTMF | 1977 parameters.codecs[0].id = 98; // DTMF |
1977 parameters.codecs[1].id = 96; | 1978 parameters.codecs[1].id = 96; |
1978 SetSendParameters(parameters); | 1979 SetSendParameters(parameters); |
1979 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1980 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst; |
1980 EXPECT_EQ(96, gcodec.pltype); | 1981 EXPECT_EQ(96, gcodec.pltype); |
1981 EXPECT_STREQ("ISAC", gcodec.plname); | 1982 EXPECT_STREQ("ISAC", gcodec.plname); |
1982 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1983 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1983 } | 1984 } |
1984 | 1985 |
1985 // Test that payload type range is limited for telephone-event codec. | 1986 // Test that payload type range is limited for telephone-event codec. |
1986 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { | 1987 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
1987 EXPECT_TRUE(SetupSendStream()); | 1988 EXPECT_TRUE(SetupSendStream()); |
1988 cricket::AudioSendParameters parameters; | 1989 cricket::AudioSendParameters parameters; |
1989 parameters.codecs.push_back(kTelephoneEventCodec2); | 1990 parameters.codecs.push_back(kTelephoneEventCodec2); |
(...skipping 17 matching lines...) Expand all Loading... | |
2007 // one on the list. | 2008 // one on the list. |
2008 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { | 2009 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { |
2009 EXPECT_TRUE(SetupSendStream()); | 2010 EXPECT_TRUE(SetupSendStream()); |
2010 cricket::AudioSendParameters parameters; | 2011 cricket::AudioSendParameters parameters; |
2011 parameters.codecs.push_back(kCn16000Codec); | 2012 parameters.codecs.push_back(kCn16000Codec); |
2012 parameters.codecs.push_back(kIsacCodec); | 2013 parameters.codecs.push_back(kIsacCodec); |
2013 parameters.codecs.push_back(kPcmuCodec); | 2014 parameters.codecs.push_back(kPcmuCodec); |
2014 parameters.codecs[0].id = 98; // wideband CN | 2015 parameters.codecs[0].id = 98; // wideband CN |
2015 parameters.codecs[1].id = 96; | 2016 parameters.codecs[1].id = 96; |
2016 SetSendParameters(parameters); | 2017 SetSendParameters(parameters); |
2017 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2018 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2018 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2019 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2019 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2020 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2020 EXPECT_EQ(98, send_codec_spec.cng_payload_type); | 2021 EXPECT_EQ(98, send_codec_spec.cng_payload_type); |
2021 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2022 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2022 } | 2023 } |
2023 | 2024 |
2024 // Test that we set VAD and DTMF types correctly as caller. | 2025 // Test that we set VAD and DTMF types correctly as caller. |
2025 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { | 2026 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
2026 EXPECT_TRUE(SetupSendStream()); | 2027 EXPECT_TRUE(SetupSendStream()); |
2027 cricket::AudioSendParameters parameters; | 2028 cricket::AudioSendParameters parameters; |
2028 parameters.codecs.push_back(kIsacCodec); | 2029 parameters.codecs.push_back(kIsacCodec); |
2029 parameters.codecs.push_back(kPcmuCodec); | 2030 parameters.codecs.push_back(kPcmuCodec); |
2030 // TODO(juberti): cn 32000 | 2031 // TODO(juberti): cn 32000 |
2031 parameters.codecs.push_back(kCn16000Codec); | 2032 parameters.codecs.push_back(kCn16000Codec); |
2032 parameters.codecs.push_back(kCn8000Codec); | 2033 parameters.codecs.push_back(kCn8000Codec); |
2033 parameters.codecs.push_back(kTelephoneEventCodec1); | 2034 parameters.codecs.push_back(kTelephoneEventCodec1); |
2034 parameters.codecs[0].id = 96; | 2035 parameters.codecs[0].id = 96; |
2035 parameters.codecs[2].id = 97; // wideband CN | 2036 parameters.codecs[2].id = 97; // wideband CN |
2036 parameters.codecs[4].id = 98; // DTMF | 2037 parameters.codecs[4].id = 98; // DTMF |
2037 SetSendParameters(parameters); | 2038 SetSendParameters(parameters); |
2038 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2039 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2039 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2040 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2040 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2041 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2041 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2042 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2042 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2043 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2043 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2044 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2044 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2045 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2045 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2046 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2046 } | 2047 } |
2047 | 2048 |
2048 // Test that we set VAD and DTMF types correctly as callee. | 2049 // Test that we set VAD and DTMF types correctly as callee. |
2049 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 2050 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
2050 EXPECT_TRUE(SetupChannel()); | 2051 EXPECT_TRUE(SetupChannel()); |
2051 cricket::AudioSendParameters parameters; | 2052 cricket::AudioSendParameters parameters; |
2052 parameters.codecs.push_back(kIsacCodec); | 2053 parameters.codecs.push_back(kIsacCodec); |
2053 parameters.codecs.push_back(kPcmuCodec); | 2054 parameters.codecs.push_back(kPcmuCodec); |
2054 // TODO(juberti): cn 32000 | 2055 // TODO(juberti): cn 32000 |
2055 parameters.codecs.push_back(kCn16000Codec); | 2056 parameters.codecs.push_back(kCn16000Codec); |
2056 parameters.codecs.push_back(kCn8000Codec); | 2057 parameters.codecs.push_back(kCn8000Codec); |
2057 parameters.codecs.push_back(kTelephoneEventCodec2); | 2058 parameters.codecs.push_back(kTelephoneEventCodec2); |
2058 parameters.codecs[0].id = 96; | 2059 parameters.codecs[0].id = 96; |
2059 parameters.codecs[2].id = 97; // wideband CN | 2060 parameters.codecs[2].id = 97; // wideband CN |
2060 parameters.codecs[4].id = 98; // DTMF | 2061 parameters.codecs[4].id = 98; // DTMF |
2061 SetSendParameters(parameters); | 2062 SetSendParameters(parameters); |
2062 EXPECT_TRUE(channel_->AddSendStream( | 2063 EXPECT_TRUE(channel_->AddSendStream( |
2063 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2064 cricket::StreamParams::CreateLegacy(kSsrc9))); |
2064 | 2065 |
2065 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2066 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2066 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2067 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2067 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2068 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2068 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2069 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2069 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2070 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2070 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2071 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2071 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2072 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2072 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2073 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2073 } | 2074 } |
2074 | 2075 |
2075 // Test that we only apply VAD if we have a CN codec that matches the | 2076 // Test that we only apply VAD if we have a CN codec that matches the |
2076 // send codec clockrate. | 2077 // send codec clockrate. |
2077 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { | 2078 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { |
2078 EXPECT_TRUE(SetupSendStream()); | 2079 EXPECT_TRUE(SetupSendStream()); |
2079 cricket::AudioSendParameters parameters; | 2080 cricket::AudioSendParameters parameters; |
2080 // Set ISAC(16K) and CN(16K). VAD should be activated. | 2081 // Set ISAC(16K) and CN(16K). VAD should be activated. |
2081 parameters.codecs.push_back(kIsacCodec); | 2082 parameters.codecs.push_back(kIsacCodec); |
2082 parameters.codecs.push_back(kCn16000Codec); | 2083 parameters.codecs.push_back(kCn16000Codec); |
2083 parameters.codecs[1].id = 97; | 2084 parameters.codecs[1].id = 97; |
2084 SetSendParameters(parameters); | 2085 SetSendParameters(parameters); |
2085 { | 2086 { |
2086 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2087 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2087 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2088 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2088 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2089 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2089 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2090 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2090 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2091 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2091 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2092 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2092 } | 2093 } |
2093 // Set PCMU(8K) and CN(16K). VAD should not be activated. | 2094 // Set PCMU(8K) and CN(16K). VAD should not be activated. |
2094 parameters.codecs[0] = kPcmuCodec; | 2095 parameters.codecs[0] = kPcmuCodec; |
2095 SetSendParameters(parameters); | 2096 SetSendParameters(parameters); |
2096 { | 2097 { |
2097 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2098 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2098 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 2099 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); |
2099 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2100 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2100 } | 2101 } |
2101 // Set PCMU(8K) and CN(8K). VAD should be activated. | 2102 // Set PCMU(8K) and CN(8K). VAD should be activated. |
2102 parameters.codecs[1] = kCn8000Codec; | 2103 parameters.codecs[1] = kCn8000Codec; |
2103 SetSendParameters(parameters); | 2104 SetSendParameters(parameters); |
2104 { | 2105 { |
2105 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2106 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2106 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 2107 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); |
2107 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2108 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2108 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2109 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2109 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 2110 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
2110 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 2111 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); |
2111 } | 2112 } |
2112 // Set ISAC(16K) and CN(8K). VAD should not be activated. | 2113 // Set ISAC(16K) and CN(8K). VAD should not be activated. |
2113 parameters.codecs[0] = kIsacCodec; | 2114 parameters.codecs[0] = kIsacCodec; |
2114 SetSendParameters(parameters); | 2115 SetSendParameters(parameters); |
2115 { | 2116 { |
2116 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2117 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2117 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2118 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2118 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2119 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2119 } | 2120 } |
2120 } | 2121 } |
2121 | 2122 |
2122 // Test that we perform case-insensitive matching of codec names. | 2123 // Test that we perform case-insensitive matching of codec names. |
2123 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { | 2124 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
2124 EXPECT_TRUE(SetupSendStream()); | 2125 EXPECT_TRUE(SetupSendStream()); |
2125 cricket::AudioSendParameters parameters; | 2126 cricket::AudioSendParameters parameters; |
2126 parameters.codecs.push_back(kIsacCodec); | 2127 parameters.codecs.push_back(kIsacCodec); |
2127 parameters.codecs.push_back(kPcmuCodec); | 2128 parameters.codecs.push_back(kPcmuCodec); |
2128 parameters.codecs.push_back(kCn16000Codec); | 2129 parameters.codecs.push_back(kCn16000Codec); |
2129 parameters.codecs.push_back(kCn8000Codec); | 2130 parameters.codecs.push_back(kCn8000Codec); |
2130 parameters.codecs.push_back(kTelephoneEventCodec1); | 2131 parameters.codecs.push_back(kTelephoneEventCodec1); |
2131 parameters.codecs[0].name = "iSaC"; | 2132 parameters.codecs[0].name = "iSaC"; |
2132 parameters.codecs[0].id = 96; | 2133 parameters.codecs[0].id = 96; |
2133 parameters.codecs[2].id = 97; // wideband CN | 2134 parameters.codecs[2].id = 97; // wideband CN |
2134 parameters.codecs[4].id = 98; // DTMF | 2135 parameters.codecs[4].id = 98; // DTMF |
2135 SetSendParameters(parameters); | 2136 SetSendParameters(parameters); |
2136 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2137 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec; |
2137 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2138 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2138 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2139 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2139 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2140 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2140 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2141 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2141 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2142 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2142 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2143 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2143 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2144 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2144 } | 2145 } |
2145 | 2146 |
2146 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { | 2147 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2179 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) { | 2180 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) { |
2180 TestSetRecvRtpHeaderExtensions( | 2181 TestSetRecvRtpHeaderExtensions( |
2181 webrtc::RtpExtension::kTransportSequenceNumberUri); | 2182 webrtc::RtpExtension::kTransportSequenceNumberUri); |
2182 } | 2183 } |
2183 | 2184 |
2184 // Test that we can create a channel and start sending on it. | 2185 // Test that we can create a channel and start sending on it. |
2185 TEST_F(WebRtcVoiceEngineTestFake, Send) { | 2186 TEST_F(WebRtcVoiceEngineTestFake, Send) { |
2186 EXPECT_TRUE(SetupSendStream()); | 2187 EXPECT_TRUE(SetupSendStream()); |
2187 SetSendParameters(send_parameters_); | 2188 SetSendParameters(send_parameters_); |
2188 SetSend(true); | 2189 SetSend(true); |
2189 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2190 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2190 SetSend(false); | 2191 SetSend(false); |
2191 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2192 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2192 } | 2193 } |
2193 | 2194 |
2194 // Test that a channel will send if and only if it has a source and is enabled | 2195 // Test that a channel will send if and only if it has a source and is enabled |
2195 // for sending. | 2196 // for sending. |
2196 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { | 2197 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { |
2197 EXPECT_TRUE(SetupSendStream()); | 2198 EXPECT_TRUE(SetupSendStream()); |
2198 SetSendParameters(send_parameters_); | 2199 SetSendParameters(send_parameters_); |
2199 SetAudioSend(kSsrc1, true, nullptr); | 2200 SetAudioSend(kSsrc9, true, nullptr); |
2200 SetSend(true); | 2201 SetSend(true); |
2201 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2202 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2202 SetAudioSend(kSsrc1, true, &fake_source_); | 2203 SetAudioSend(kSsrc9, true, &fake_source_); |
2203 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2204 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2204 SetAudioSend(kSsrc1, true, nullptr); | 2205 SetAudioSend(kSsrc9, true, nullptr); |
2205 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2206 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2206 } | 2207 } |
2207 | 2208 |
2208 // Test that a channel is muted/unmuted. | 2209 // Test that a channel is muted/unmuted. |
2209 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) { | 2210 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) { |
2210 EXPECT_TRUE(SetupSendStream()); | 2211 EXPECT_TRUE(SetupSendStream()); |
2211 SetSendParameters(send_parameters_); | 2212 SetSendParameters(send_parameters_); |
2212 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); | 2213 EXPECT_FALSE(GetSendStream(kSsrc9).muted()); |
2213 SetAudioSend(kSsrc1, true, nullptr); | 2214 SetAudioSend(kSsrc9, true, nullptr); |
2214 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); | 2215 EXPECT_FALSE(GetSendStream(kSsrc9).muted()); |
2215 SetAudioSend(kSsrc1, false, nullptr); | 2216 SetAudioSend(kSsrc9, false, nullptr); |
2216 EXPECT_TRUE(GetSendStream(kSsrc1).muted()); | 2217 EXPECT_TRUE(GetSendStream(kSsrc9).muted()); |
2217 } | 2218 } |
2218 | 2219 |
2219 // Test that SetSendParameters() does not alter a stream's send state. | 2220 // Test that SetSendParameters() does not alter a stream's send state. |
2220 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { | 2221 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { |
2221 EXPECT_TRUE(SetupSendStream()); | 2222 EXPECT_TRUE(SetupSendStream()); |
2222 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2223 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2223 | 2224 |
2224 // Turn on sending. | 2225 // Turn on sending. |
2225 SetSend(true); | 2226 SetSend(true); |
2226 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2227 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2227 | 2228 |
2228 // Changing RTP header extensions will recreate the AudioSendStream. | 2229 // Changing RTP header extensions will recreate the AudioSendStream. |
2229 send_parameters_.extensions.push_back( | 2230 send_parameters_.extensions.push_back( |
2230 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); | 2231 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); |
2231 SetSendParameters(send_parameters_); | 2232 SetSendParameters(send_parameters_); |
2232 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2233 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2233 | 2234 |
2234 // Turn off sending. | 2235 // Turn off sending. |
2235 SetSend(false); | 2236 SetSend(false); |
2236 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2237 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2237 | 2238 |
2238 // Changing RTP header extensions will recreate the AudioSendStream. | 2239 // Changing RTP header extensions will recreate the AudioSendStream. |
2239 send_parameters_.extensions.clear(); | 2240 send_parameters_.extensions.clear(); |
2240 SetSendParameters(send_parameters_); | 2241 SetSendParameters(send_parameters_); |
2241 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2242 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2242 } | 2243 } |
2243 | 2244 |
2244 // Test that we can create a channel and start playing out on it. | 2245 // Test that we can create a channel and start playing out on it. |
2245 TEST_F(WebRtcVoiceEngineTestFake, Playout) { | 2246 TEST_F(WebRtcVoiceEngineTestFake, Playout) { |
2246 EXPECT_TRUE(SetupRecvStream()); | 2247 EXPECT_TRUE(SetupRecvStream()); |
2247 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2248 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2248 channel_->SetPlayout(true); | 2249 channel_->SetPlayout(true); |
2249 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 2250 EXPECT_TRUE(GetRecvStream(kSsrc9).started()); |
2250 channel_->SetPlayout(false); | 2251 channel_->SetPlayout(false); |
2251 EXPECT_FALSE(GetRecvStream(kSsrc1).started()); | 2252 EXPECT_FALSE(GetRecvStream(kSsrc9).started()); |
2252 } | 2253 } |
2253 | 2254 |
2254 // Test that we can add and remove send streams. | 2255 // Test that we can add and remove send streams. |
2255 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { | 2256 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { |
2256 SetupForMultiSendStream(); | 2257 SetupForMultiSendStream(); |
2257 | 2258 |
2258 // Set the global state for sending. | 2259 // Set the global state for sending. |
2259 SetSend(true); | 2260 SetSend(true); |
2260 | 2261 |
2261 for (uint32_t ssrc : kSsrcs4) { | 2262 for (uint32_t ssrc : kSsrcs4) { |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2410 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { | 2411 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { |
2411 EXPECT_TRUE(SetupSendStream()); | 2412 EXPECT_TRUE(SetupSendStream()); |
2412 | 2413 |
2413 // Start playout without a receive stream. | 2414 // Start playout without a receive stream. |
2414 SetSendParameters(send_parameters_); | 2415 SetSendParameters(send_parameters_); |
2415 channel_->SetPlayout(true); | 2416 channel_->SetPlayout(true); |
2416 | 2417 |
2417 // Adding another stream should enable playout on the new stream only. | 2418 // Adding another stream should enable playout on the new stream only. |
2418 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2419 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
2419 SetSend(true); | 2420 SetSend(true); |
2420 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2421 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2421 | 2422 |
2422 // Make sure only the new stream is played out. | 2423 // Make sure only the new stream is played out. |
2423 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2424 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); |
2424 | 2425 |
2425 // Adding yet another stream should have stream 2 and 3 enabled for playout. | 2426 // Adding yet another stream should have stream 2 and 3 enabled for playout. |
2426 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 2427 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
2427 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2428 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); |
2428 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); | 2429 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); |
2429 | 2430 |
2430 // Stop sending. | 2431 // Stop sending. |
2431 SetSend(false); | 2432 SetSend(false); |
2432 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2433 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2433 | 2434 |
2434 // Stop playout. | 2435 // Stop playout. |
2435 channel_->SetPlayout(false); | 2436 channel_->SetPlayout(false); |
2436 EXPECT_FALSE(GetRecvStream(kSsrc2).started()); | 2437 EXPECT_FALSE(GetRecvStream(kSsrc2).started()); |
2437 EXPECT_FALSE(GetRecvStream(kSsrc3).started()); | 2438 EXPECT_FALSE(GetRecvStream(kSsrc3).started()); |
2438 | 2439 |
2439 // Restart playout and make sure recv streams are played out. | 2440 // Restart playout and make sure recv streams are played out. |
2440 channel_->SetPlayout(true); | 2441 channel_->SetPlayout(true); |
2441 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2442 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); |
2442 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); | 2443 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); |
2443 | 2444 |
2444 // Now remove the recv streams. | 2445 // Now remove the recv streams. |
2445 EXPECT_TRUE(channel_->RemoveRecvStream(3)); | 2446 EXPECT_TRUE(channel_->RemoveRecvStream(3)); |
2446 EXPECT_TRUE(channel_->RemoveRecvStream(2)); | 2447 EXPECT_TRUE(channel_->RemoveRecvStream(2)); |
2447 } | 2448 } |
2448 | 2449 |
2449 // Test that we can create a channel configured for Codian bridges, | 2450 // Test that we can create a channel configured for Codian bridges, |
2450 // and start sending on it. | 2451 // and start sending on it. |
2451 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { | 2452 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { |
2452 EXPECT_TRUE(SetupSendStream()); | 2453 EXPECT_TRUE(SetupSendStream()); |
2453 cricket::AudioOptions options_adjust_agc; | 2454 cricket::AudioOptions options_adjust_agc; |
2454 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10); | 2455 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10); |
2455 webrtc::AgcConfig agc_config; | 2456 webrtc::AgcConfig agc_config; |
2456 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | 2457 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); |
2457 EXPECT_EQ(0, agc_config.targetLeveldBOv); | 2458 EXPECT_EQ(0, agc_config.targetLeveldBOv); |
2458 send_parameters_.options = options_adjust_agc; | 2459 send_parameters_.options = options_adjust_agc; |
2459 SetSendParameters(send_parameters_); | 2460 SetSendParameters(send_parameters_); |
2460 SetSend(true); | 2461 SetSend(true); |
2461 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2462 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending()); |
2462 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | 2463 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); |
2463 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated | 2464 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated |
2464 SetSend(false); | 2465 SetSend(false); |
2465 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2466 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending()); |
2466 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | 2467 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); |
2467 } | 2468 } |
2468 | 2469 |
2469 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { | 2470 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { |
2470 EXPECT_TRUE(SetupSendStream()); | 2471 EXPECT_TRUE(SetupSendStream()); |
2471 EXPECT_CALL(adm_, | 2472 EXPECT_CALL(adm_, |
2472 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 2473 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
2473 webrtc::AgcConfig agc_config; | 2474 webrtc::AgcConfig agc_config; |
2474 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); | 2475 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); |
2475 EXPECT_EQ(0, agc_config.targetLeveldBOv); | 2476 EXPECT_EQ(0, agc_config.targetLeveldBOv); |
(...skipping 26 matching lines...) Expand all Loading... | |
2502 SetSendParameters(send_parameters_); | 2503 SetSendParameters(send_parameters_); |
2503 } | 2504 } |
2504 | 2505 |
2505 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) { | 2506 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) { |
2506 EXPECT_TRUE(SetupSendStream()); | 2507 EXPECT_TRUE(SetupSendStream()); |
2507 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2508 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2508 send_parameters_.options.audio_network_adaptor_config = | 2509 send_parameters_.options.audio_network_adaptor_config = |
2509 rtc::Optional<std::string>("1234"); | 2510 rtc::Optional<std::string>("1234"); |
2510 SetSendParameters(send_parameters_); | 2511 SetSendParameters(send_parameters_); |
2511 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2512 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2512 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2513 GetAudioNetworkAdaptorConfig(kSsrc9)); |
2513 } | 2514 } |
2514 | 2515 |
2515 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { | 2516 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { |
2516 EXPECT_TRUE(SetupSendStream()); | 2517 EXPECT_TRUE(SetupSendStream()); |
2517 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2518 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2518 send_parameters_.options.audio_network_adaptor_config = | 2519 send_parameters_.options.audio_network_adaptor_config = |
2519 rtc::Optional<std::string>("1234"); | 2520 rtc::Optional<std::string>("1234"); |
2520 SetSendParameters(send_parameters_); | 2521 SetSendParameters(send_parameters_); |
2521 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2522 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2522 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2523 GetAudioNetworkAdaptorConfig(kSsrc9)); |
2523 const int initial_num = call_.GetNumCreatedSendStreams(); | 2524 const int initial_num = call_.GetNumCreatedSendStreams(); |
2524 cricket::AudioOptions options; | 2525 cricket::AudioOptions options; |
2525 options.audio_network_adaptor = rtc::Optional<bool>(false); | 2526 options.audio_network_adaptor = rtc::Optional<bool>(false); |
2526 SetAudioSend(kSsrc1, true, nullptr, &options); | 2527 SetAudioSend(kSsrc9, true, nullptr, &options); |
2527 // AudioSendStream expected to be recreated. | 2528 // AudioSendStream expected to be recreated. |
2528 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 2529 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
2529 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrc1)); | 2530 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrc9)); |
2530 } | 2531 } |
2531 | 2532 |
2532 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { | 2533 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { |
2533 EXPECT_TRUE(SetupSendStream()); | 2534 EXPECT_TRUE(SetupSendStream()); |
2534 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2535 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2535 send_parameters_.options.audio_network_adaptor_config = | 2536 send_parameters_.options.audio_network_adaptor_config = |
2536 rtc::Optional<std::string>("1234"); | 2537 rtc::Optional<std::string>("1234"); |
2537 SetSendParameters(send_parameters_); | 2538 SetSendParameters(send_parameters_); |
2538 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2539 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2539 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2540 GetAudioNetworkAdaptorConfig(kSsrc9)); |
2540 const int initial_num = call_.GetNumCreatedSendStreams(); | 2541 const int initial_num = call_.GetNumCreatedSendStreams(); |
2541 cricket::AudioOptions options; | 2542 cricket::AudioOptions options; |
2542 options.audio_network_adaptor = rtc::Optional<bool>(); | 2543 options.audio_network_adaptor = rtc::Optional<bool>(); |
2543 // Unvalued |options.audio_network_adaptor|.should not reset audio network | 2544 // Unvalued |options.audio_network_adaptor|.should not reset audio network |
2544 // adaptor. | 2545 // adaptor. |
2545 SetAudioSend(kSsrc1, true, nullptr, &options); | 2546 SetAudioSend(kSsrc9, true, nullptr, &options); |
2546 // AudioSendStream not expected to be recreated. | 2547 // AudioSendStream not expected to be recreated. |
2547 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); | 2548 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); |
2548 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2549 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2549 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2550 GetAudioNetworkAdaptorConfig(kSsrc9)); |
2550 } | 2551 } |
2551 | 2552 |
2552 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest | 2553 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest |
2553 : public WebRtcVoiceEngineTestFake { | 2554 : public WebRtcVoiceEngineTestFake { |
2554 public: | 2555 public: |
2555 WebRtcVoiceEngineWithSendSideBweWithOverheadTest() | 2556 WebRtcVoiceEngineWithSendSideBweWithOverheadTest() |
2556 : WebRtcVoiceEngineTestFake( | 2557 : WebRtcVoiceEngineTestFake( |
2557 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/" | 2558 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/" |
2558 "Enabled/") {} | 2559 "Enabled/") {} |
2559 }; | 2560 }; |
2560 | 2561 |
2561 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) { | 2562 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) { |
2562 EXPECT_TRUE(SetupSendStream()); | 2563 EXPECT_TRUE(SetupSendStream()); |
2563 cricket::AudioSendParameters parameters; | 2564 cricket::AudioSendParameters parameters; |
2564 parameters.codecs.push_back(kOpusCodec); | 2565 parameters.codecs.push_back(kOpusCodec); |
2565 SetSendParameters(parameters); | 2566 SetSendParameters(parameters); |
2566 const int initial_num = call_.GetNumCreatedSendStreams(); | 2567 const int initial_num = call_.GetNumCreatedSendStreams(); |
2567 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); | 2568 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); |
2568 | 2569 |
2569 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) | 2570 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) |
2570 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; | 2571 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; |
2571 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; | 2572 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; |
2572 constexpr int kMinOverheadBps = | 2573 constexpr int kMinOverheadBps = |
2573 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; | 2574 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; |
2574 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10; | 2575 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10; |
2575 | 2576 |
2576 constexpr int kOpusMinBitrateBps = 6000; | 2577 constexpr int kOpusMinBitrateBps = 6000; |
2577 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps, | 2578 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps, |
2578 GetSendStreamConfig(kSsrc1).min_bitrate_bps); | 2579 GetSendStreamConfig(kSsrc9).min_bitrate_bps); |
2579 constexpr int kOpusBitrateFbBps = 32000; | 2580 constexpr int kOpusBitrateFbBps = 32000; |
2580 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps, | 2581 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps, |
2581 GetSendStreamConfig(kSsrc1).max_bitrate_bps); | 2582 GetSendStreamConfig(kSsrc9).max_bitrate_bps); |
2582 | 2583 |
2583 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2584 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2584 parameters.options.audio_network_adaptor_config = | 2585 parameters.options.audio_network_adaptor_config = |
2585 rtc::Optional<std::string>("1234"); | 2586 rtc::Optional<std::string>("1234"); |
2586 SetSendParameters(parameters); | 2587 SetSendParameters(parameters); |
2587 | 2588 |
2588 constexpr int kMinOverheadWithAnaBps = | 2589 constexpr int kMinOverheadWithAnaBps = |
2589 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; | 2590 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; |
2590 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20; | 2591 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20; |
2591 | 2592 |
2592 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps, | 2593 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps, |
2593 GetSendStreamConfig(kSsrc1).min_bitrate_bps); | 2594 GetSendStreamConfig(kSsrc9).min_bitrate_bps); |
2594 | 2595 |
2595 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps, | 2596 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps, |
2596 GetSendStreamConfig(kSsrc1).max_bitrate_bps); | 2597 GetSendStreamConfig(kSsrc9).max_bitrate_bps); |
2597 } | 2598 } |
2598 | 2599 |
2599 // Test that we can set the outgoing SSRC properly. | 2600 // Test that we can set the outgoing SSRC properly. |
2600 // SSRC is set in SetupSendStream() by calling AddSendStream. | 2601 // SSRC is set in SetupSendStream() by calling AddSendStream. |
2601 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { | 2602 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { |
2602 EXPECT_TRUE(SetupSendStream()); | 2603 EXPECT_TRUE(SetupSendStream()); |
2603 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2604 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9)); |
2604 } | 2605 } |
2605 | 2606 |
2606 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { | 2607 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { |
2607 // Setup. We need send codec to be set to get all stats. | 2608 // Setup. We need send codec to be set to get all stats. |
2608 EXPECT_TRUE(SetupSendStream()); | 2609 EXPECT_TRUE(SetupSendStream()); |
2609 // SetupSendStream adds a send stream with kSsrc1, so the receive | 2610 // SetupSendStream adds a send stream with kSsrc9, so the receive |
2610 // stream has to use a different SSRC. | 2611 // stream has to use a different SSRC. |
2611 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2612 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
2612 SetSendParameters(send_parameters_); | 2613 SetSendParameters(send_parameters_); |
2613 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2614 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2614 SetAudioSendStreamStats(); | 2615 SetAudioSendStreamStats(); |
2615 | 2616 |
2616 // Check stats for the added streams. | 2617 // Check stats for the added streams. |
2617 { | 2618 { |
2618 cricket::VoiceMediaInfo info; | 2619 cricket::VoiceMediaInfo info; |
2619 EXPECT_EQ(true, channel_->GetStats(&info)); | 2620 EXPECT_EQ(true, channel_->GetStats(&info)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2655 EXPECT_EQ(1u, info.receivers.size()); | 2656 EXPECT_EQ(1u, info.receivers.size()); |
2656 VerifyVoiceReceiverInfo(info.receivers[0]); | 2657 VerifyVoiceReceiverInfo(info.receivers[0]); |
2657 VerifyVoiceSendRecvCodecs(info); | 2658 VerifyVoiceSendRecvCodecs(info); |
2658 } | 2659 } |
2659 } | 2660 } |
2660 | 2661 |
2661 // Test that we can set the outgoing SSRC properly with multiple streams. | 2662 // Test that we can set the outgoing SSRC properly with multiple streams. |
2662 // SSRC is set in SetupSendStream() by calling AddSendStream. | 2663 // SSRC is set in SetupSendStream() by calling AddSendStream. |
2663 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { | 2664 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { |
2664 EXPECT_TRUE(SetupSendStream()); | 2665 EXPECT_TRUE(SetupSendStream()); |
2665 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2666 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9)); |
2666 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2667 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
2667 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 2668 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); |
2668 } | 2669 } |
2669 | 2670 |
2670 // Test that the local SSRC is the same on sending and receiving channels if the | 2671 // Test that the local SSRC is the same on sending and receiving channels if the |
2671 // receive channel is created before the send channel. | 2672 // receive channel is created before the send channel. |
2672 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { | 2673 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { |
2673 EXPECT_TRUE(SetupChannel()); | 2674 EXPECT_TRUE(SetupChannel()); |
2674 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2675 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
2675 EXPECT_TRUE(channel_->AddSendStream( | 2676 EXPECT_TRUE(channel_->AddSendStream( |
2676 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2677 cricket::StreamParams::CreateLegacy(kSsrc9))); |
2677 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2678 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9)); |
2678 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 2679 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); |
2679 } | 2680 } |
2680 | 2681 |
2681 // Test that we can properly receive packets. | 2682 // Test that we can properly receive packets. |
2682 TEST_F(WebRtcVoiceEngineTestFake, Recv) { | 2683 TEST_F(WebRtcVoiceEngineTestFake, Recv) { |
2683 EXPECT_TRUE(SetupChannel()); | 2684 EXPECT_TRUE(SetupChannel()); |
2684 EXPECT_TRUE(AddRecvStream(1)); | 2685 EXPECT_TRUE(AddRecvStream(1)); |
2685 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2686 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2686 | 2687 |
2687 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, | 2688 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, |
2688 sizeof(kPcmuFrame))); | 2689 sizeof(kPcmuFrame))); |
2689 } | 2690 } |
2690 | 2691 |
2691 // Test that we can properly receive packets on multiple streams. | 2692 // Test that we can properly receive packets on multiple streams. |
2692 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { | 2693 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { |
2693 EXPECT_TRUE(SetupChannel()); | 2694 EXPECT_TRUE(SetupChannel()); |
2694 const uint32_t ssrc1 = 1; | 2695 EXPECT_TRUE(AddRecvStream(kSsrc1)); |
2695 const uint32_t ssrc2 = 2; | 2696 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
2696 const uint32_t ssrc3 = 3; | 2697 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
2697 EXPECT_TRUE(AddRecvStream(ssrc1)); | |
2698 EXPECT_TRUE(AddRecvStream(ssrc2)); | |
2699 EXPECT_TRUE(AddRecvStream(ssrc3)); | |
2700 // Create packets with the right SSRCs. | 2698 // Create packets with the right SSRCs. |
2701 unsigned char packets[4][sizeof(kPcmuFrame)]; | 2699 unsigned char packets[4][sizeof(kPcmuFrame)]; |
2702 for (size_t i = 0; i < arraysize(packets); ++i) { | 2700 for (size_t i = 0; i < arraysize(packets); ++i) { |
2703 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); | 2701 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); |
2704 rtc::SetBE32(packets[i] + 8, static_cast<uint32_t>(i)); | 2702 rtc::SetBE32(packets[i] + 8, static_cast<uint32_t>(i)); |
Taylor Brandstetter
2017/02/17 10:34:46
This test puts the literal values 1, 2 and 3 in th
the sun
2017/02/17 11:22:47
Oh, well spotted. Reverted. Thanks!
| |
2705 } | 2703 } |
2706 | 2704 |
2707 const cricket::FakeAudioReceiveStream& s1 = GetRecvStream(ssrc1); | 2705 const cricket::FakeAudioReceiveStream& s1 = GetRecvStream(kSsrc1); |
2708 const cricket::FakeAudioReceiveStream& s2 = GetRecvStream(ssrc2); | 2706 const cricket::FakeAudioReceiveStream& s2 = GetRecvStream(kSsrc2); |
2709 const cricket::FakeAudioReceiveStream& s3 = GetRecvStream(ssrc3); | 2707 const cricket::FakeAudioReceiveStream& s3 = GetRecvStream(kSsrc3); |
2710 | 2708 |
2711 EXPECT_EQ(s1.received_packets(), 0); | 2709 EXPECT_EQ(s1.received_packets(), 0); |
2712 EXPECT_EQ(s2.received_packets(), 0); | 2710 EXPECT_EQ(s2.received_packets(), 0); |
2713 EXPECT_EQ(s3.received_packets(), 0); | 2711 EXPECT_EQ(s3.received_packets(), 0); |
2714 | 2712 |
2715 DeliverPacket(packets[0], sizeof(packets[0])); | 2713 DeliverPacket(packets[0], sizeof(packets[0])); |
2716 EXPECT_EQ(s1.received_packets(), 0); | 2714 EXPECT_EQ(s1.received_packets(), 0); |
2717 EXPECT_EQ(s2.received_packets(), 0); | 2715 EXPECT_EQ(s2.received_packets(), 0); |
2718 EXPECT_EQ(s3.received_packets(), 0); | 2716 EXPECT_EQ(s3.received_packets(), 0); |
2719 | 2717 |
2720 DeliverPacket(packets[1], sizeof(packets[1])); | 2718 DeliverPacket(packets[1], sizeof(packets[1])); |
2721 EXPECT_EQ(s1.received_packets(), 1); | 2719 EXPECT_EQ(s1.received_packets(), 1); |
2722 EXPECT_TRUE(s1.VerifyLastPacket(packets[1], sizeof(packets[1]))); | 2720 EXPECT_TRUE(s1.VerifyLastPacket(packets[1], sizeof(packets[1]))); |
2723 EXPECT_EQ(s2.received_packets(), 0); | 2721 EXPECT_EQ(s2.received_packets(), 0); |
2724 EXPECT_EQ(s3.received_packets(), 0); | 2722 EXPECT_EQ(s3.received_packets(), 0); |
2725 | 2723 |
2726 DeliverPacket(packets[2], sizeof(packets[2])); | 2724 DeliverPacket(packets[2], sizeof(packets[2])); |
2727 EXPECT_EQ(s1.received_packets(), 1); | 2725 EXPECT_EQ(s1.received_packets(), 1); |
2728 EXPECT_EQ(s2.received_packets(), 1); | 2726 EXPECT_EQ(s2.received_packets(), 1); |
2729 EXPECT_TRUE(s2.VerifyLastPacket(packets[2], sizeof(packets[2]))); | 2727 EXPECT_TRUE(s2.VerifyLastPacket(packets[2], sizeof(packets[2]))); |
2730 EXPECT_EQ(s3.received_packets(), 0); | 2728 EXPECT_EQ(s3.received_packets(), 0); |
2731 | 2729 |
2732 DeliverPacket(packets[3], sizeof(packets[3])); | 2730 DeliverPacket(packets[3], sizeof(packets[3])); |
2733 EXPECT_EQ(s1.received_packets(), 1); | 2731 EXPECT_EQ(s1.received_packets(), 1); |
2734 EXPECT_EQ(s2.received_packets(), 1); | 2732 EXPECT_EQ(s2.received_packets(), 1); |
2735 EXPECT_EQ(s3.received_packets(), 1); | 2733 EXPECT_EQ(s3.received_packets(), 1); |
2736 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3]))); | 2734 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3]))); |
2737 | 2735 |
2738 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc3)); | 2736 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc3)); |
2739 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc2)); | 2737 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); |
2740 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc1)); | 2738 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1)); |
2741 } | 2739 } |
2742 | 2740 |
2743 // Test that receiving on an unsignalled stream works (default channel will be | 2741 // Test that receiving on an unsignaled stream works (a stream is created). |
2744 // created). | 2742 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaled) { |
2745 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { | |
2746 EXPECT_TRUE(SetupChannel()); | 2743 EXPECT_TRUE(SetupChannel()); |
2747 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); | 2744 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); |
2748 | 2745 |
2749 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2746 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2750 | 2747 |
2751 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2748 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
2752 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, | 2749 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, |
2753 sizeof(kPcmuFrame))); | 2750 sizeof(kPcmuFrame))); |
2754 } | 2751 } |
2755 | 2752 |
2756 // Test that receiving on an unsignalled stream works (default channel will be | 2753 // Test that receiving N unsignaled stream works (streams will be created), and |
2757 // created), and that packets will be forwarded to the default channel | 2754 // that packets are forwarded to them all. |
2758 // regardless of their SSRCs. | 2755 TEST_F(WebRtcVoiceEngineTestFake, RecvMultipleUnsignaled) { |
2759 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) { | |
2760 EXPECT_TRUE(SetupChannel()); | 2756 EXPECT_TRUE(SetupChannel()); |
2761 unsigned char packet[sizeof(kPcmuFrame)]; | 2757 unsigned char packet[sizeof(kPcmuFrame)]; |
2762 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2758 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2763 | 2759 |
2764 // Note that ssrc = 0 is not supported. | 2760 constexpr uint32_t kMaxUnsignaledCount = 50; |
2765 uint32_t ssrc = 1; | 2761 |
2766 for (; ssrc < 10; ++ssrc) { | 2762 // Note that SSRC = 0 is not supported. |
2763 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { | |
2767 rtc::SetBE32(&packet[8], ssrc); | 2764 rtc::SetBE32(&packet[8], ssrc); |
2768 DeliverPacket(packet, sizeof(packet)); | 2765 DeliverPacket(packet, sizeof(packet)); |
2769 | 2766 |
2770 // Verify we only have one default stream. | 2767 // Verify we have one new stream for each loop iteration. |
2771 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2768 EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size()); |
2772 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); | 2769 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); |
2773 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); | 2770 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
2774 } | 2771 } |
2775 | 2772 |
2776 // Sending the same ssrc again should not create a new stream. | 2773 // Sending on the same SSRCs again should not create new streams. |
2777 --ssrc; | 2774 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { |
2775 rtc::SetBE32(&packet[8], ssrc); | |
2776 DeliverPacket(packet, sizeof(packet)); | |
2777 | |
2778 EXPECT_EQ(kMaxUnsignaledCount, call_.GetAudioReceiveStreams().size()); | |
2779 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); | |
2780 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); | |
2781 } | |
2782 | |
2783 // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced. | |
2784 constexpr uint32_t kAnotherSsrc = 667; | |
2785 rtc::SetBE32(&packet[8], kAnotherSsrc); | |
2778 DeliverPacket(packet, sizeof(packet)); | 2786 DeliverPacket(packet, sizeof(packet)); |
2779 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2787 |
2780 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); | 2788 const auto& streams = call_.GetAudioReceiveStreams(); |
2781 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); | 2789 EXPECT_EQ(kMaxUnsignaledCount, streams.size()); |
2790 size_t i = 0; | |
2791 for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledCount); ++ssrc, ++i) { | |
2792 EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc); | |
2793 EXPECT_EQ(2, streams[i]->received_packets()); | |
2794 } | |
2795 EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc); | |
2796 EXPECT_EQ(1, streams[i]->received_packets()); | |
2797 // Sanity check that we've checked all streams. | |
2798 EXPECT_EQ(kMaxUnsignaledCount, (i + 1)); | |
2782 } | 2799 } |
2783 | 2800 |
2784 // Test that a default channel is created even after a signalled stream has been | 2801 // Test that a default channel is created even after a signaled stream has been |
2785 // added, and that this stream will get any packets for unknown SSRCs. | 2802 // added, and that this stream will get any packets for unknown SSRCs. |
2786 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { | 2803 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignaled) { |
2787 EXPECT_TRUE(SetupChannel()); | 2804 EXPECT_TRUE(SetupChannel()); |
2788 unsigned char packet[sizeof(kPcmuFrame)]; | 2805 unsigned char packet[sizeof(kPcmuFrame)]; |
2789 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2806 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2790 | 2807 |
2791 // Add a known stream, send packet and verify we got it. | 2808 // Add a known stream, send packet and verify we got it. |
2792 const uint32_t signaled_ssrc = 1; | 2809 const uint32_t signaled_ssrc = 1; |
2793 rtc::SetBE32(&packet[8], signaled_ssrc); | 2810 rtc::SetBE32(&packet[8], signaled_ssrc); |
2794 EXPECT_TRUE(AddRecvStream(signaled_ssrc)); | 2811 EXPECT_TRUE(AddRecvStream(signaled_ssrc)); |
2795 DeliverPacket(packet, sizeof(packet)); | 2812 DeliverPacket(packet, sizeof(packet)); |
2796 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket( | 2813 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket( |
2797 packet, sizeof(packet))); | 2814 packet, sizeof(packet))); |
2815 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | |
2798 | 2816 |
2799 // Note that the first unknown SSRC cannot be 0, because we only support | 2817 // Note that the first unknown SSRC cannot be 0, because we only support |
2800 // creating receive streams for SSRC!=0. | 2818 // creating receive streams for SSRC!=0. |
2801 const uint32_t unsignaled_ssrc = 7011; | 2819 const uint32_t unsignaled_ssrc = 7011; |
2802 rtc::SetBE32(&packet[8], unsignaled_ssrc); | 2820 rtc::SetBE32(&packet[8], unsignaled_ssrc); |
2803 DeliverPacket(packet, sizeof(packet)); | 2821 DeliverPacket(packet, sizeof(packet)); |
2804 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket( | 2822 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket( |
2805 packet, sizeof(packet))); | 2823 packet, sizeof(packet))); |
2806 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); | 2824 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
2807 | 2825 |
(...skipping 29 matching lines...) Expand all Loading... | |
2837 } | 2855 } |
2838 | 2856 |
2839 // Test that after adding a recv stream, we do not decode more codecs than | 2857 // Test that after adding a recv stream, we do not decode more codecs than |
2840 // those previously passed into SetRecvCodecs. | 2858 // those previously passed into SetRecvCodecs. |
2841 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { | 2859 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { |
2842 EXPECT_TRUE(SetupSendStream()); | 2860 EXPECT_TRUE(SetupSendStream()); |
2843 cricket::AudioRecvParameters parameters; | 2861 cricket::AudioRecvParameters parameters; |
2844 parameters.codecs.push_back(kIsacCodec); | 2862 parameters.codecs.push_back(kIsacCodec); |
2845 parameters.codecs.push_back(kPcmuCodec); | 2863 parameters.codecs.push_back(kPcmuCodec); |
2846 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 2864 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2847 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 2865 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
2848 int channel_num2 = voe_.GetLastChannel(); | 2866 int channel_num2 = voe_.GetLastChannel(); |
2849 webrtc::CodecInst gcodec; | 2867 webrtc::CodecInst gcodec; |
2850 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus"); | 2868 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus"); |
2851 gcodec.plfreq = 48000; | 2869 gcodec.plfreq = 48000; |
2852 gcodec.channels = 2; | 2870 gcodec.channels = 2; |
2853 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); | 2871 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); |
2854 } | 2872 } |
2855 | 2873 |
2856 // Test that we properly clean up any streams that were added, even if | 2874 // Test that we properly clean up any streams that were added, even if |
2857 // not explicitly removed. | 2875 // not explicitly removed. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2890 TestInsertDtmf(0, true, kTelephoneEventCodec1); | 2908 TestInsertDtmf(0, true, kTelephoneEventCodec1); |
2891 } | 2909 } |
2892 | 2910 |
2893 // Test the InsertDtmf on default send stream as callee | 2911 // Test the InsertDtmf on default send stream as callee |
2894 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { | 2912 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { |
2895 TestInsertDtmf(0, false, kTelephoneEventCodec2); | 2913 TestInsertDtmf(0, false, kTelephoneEventCodec2); |
2896 } | 2914 } |
2897 | 2915 |
2898 // Test the InsertDtmf on specified send stream as caller. | 2916 // Test the InsertDtmf on specified send stream as caller. |
2899 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { | 2917 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { |
2900 TestInsertDtmf(kSsrc1, true, kTelephoneEventCodec2); | 2918 TestInsertDtmf(kSsrc9, true, kTelephoneEventCodec2); |
2901 } | 2919 } |
2902 | 2920 |
2903 // Test the InsertDtmf on specified send stream as callee. | 2921 // Test the InsertDtmf on specified send stream as callee. |
2904 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { | 2922 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { |
2905 TestInsertDtmf(kSsrc1, false, kTelephoneEventCodec1); | 2923 TestInsertDtmf(kSsrc9, false, kTelephoneEventCodec1); |
2906 } | 2924 } |
2907 | 2925 |
2908 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { | 2926 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { |
2909 EXPECT_TRUE(SetupSendStream()); | 2927 EXPECT_TRUE(SetupSendStream()); |
2910 EXPECT_CALL(adm_, | 2928 EXPECT_CALL(adm_, |
2911 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 2929 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); |
2912 EXPECT_CALL(adm_, | 2930 EXPECT_CALL(adm_, |
2913 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); | 2931 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); |
2914 EXPECT_CALL(adm_, | 2932 EXPECT_CALL(adm_, |
2915 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 2933 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3248 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); | 3266 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); |
3249 | 3267 |
3250 channel->SetInterface(nullptr); | 3268 channel->SetInterface(nullptr); |
3251 } | 3269 } |
3252 | 3270 |
3253 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { | 3271 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { |
3254 EXPECT_TRUE(SetupChannel()); | 3272 EXPECT_TRUE(SetupChannel()); |
3255 cricket::WebRtcVoiceMediaChannel* media_channel = | 3273 cricket::WebRtcVoiceMediaChannel* media_channel = |
3256 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3274 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3257 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); | 3275 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); |
3258 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 3276 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
3259 int channel_id = voe_.GetLastChannel(); | 3277 int channel_id = voe_.GetLastChannel(); |
3260 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc1)); | 3278 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc9)); |
3261 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); | 3279 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); |
3262 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 3280 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
3263 int channel_id2 = voe_.GetLastChannel(); | 3281 int channel_id2 = voe_.GetLastChannel(); |
3264 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); | 3282 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); |
3265 } | 3283 } |
3266 | 3284 |
3267 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { | 3285 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { |
3268 EXPECT_TRUE(SetupChannel()); | 3286 EXPECT_TRUE(SetupChannel()); |
3269 cricket::WebRtcVoiceMediaChannel* media_channel = | 3287 cricket::WebRtcVoiceMediaChannel* media_channel = |
3270 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3288 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3271 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); | 3289 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); |
3272 EXPECT_TRUE(channel_->AddSendStream( | 3290 EXPECT_TRUE(channel_->AddSendStream( |
3273 cricket::StreamParams::CreateLegacy(kSsrc1))); | 3291 cricket::StreamParams::CreateLegacy(kSsrc9))); |
3274 int channel_id = voe_.GetLastChannel(); | 3292 int channel_id = voe_.GetLastChannel(); |
3275 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc1)); | 3293 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc9)); |
3276 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); | 3294 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); |
3277 EXPECT_TRUE(channel_->AddSendStream( | 3295 EXPECT_TRUE(channel_->AddSendStream( |
3278 cricket::StreamParams::CreateLegacy(kSsrc2))); | 3296 cricket::StreamParams::CreateLegacy(kSsrc2))); |
3279 int channel_id2 = voe_.GetLastChannel(); | 3297 int channel_id2 = voe_.GetLastChannel(); |
3280 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); | 3298 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); |
3281 } | 3299 } |
3282 | 3300 |
3283 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { | 3301 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { |
3284 EXPECT_TRUE(SetupChannel()); | 3302 EXPECT_TRUE(SetupChannel()); |
3285 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); | 3303 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); |
3286 cricket::StreamParams stream; | 3304 cricket::StreamParams stream; |
3287 stream.ssrcs.push_back(kSsrc2); | 3305 stream.ssrcs.push_back(kSsrc2); |
3288 EXPECT_TRUE(channel_->AddRecvStream(stream)); | 3306 EXPECT_TRUE(channel_->AddRecvStream(stream)); |
3289 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc2).gain()); | 3307 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc2).gain()); |
3290 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); | 3308 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); |
3291 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain()); | 3309 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain()); |
3292 } | 3310 } |
3293 | 3311 |
3294 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { | 3312 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeUnsignaledRecvStream) { |
3295 EXPECT_TRUE(SetupChannel()); | 3313 EXPECT_TRUE(SetupChannel()); |
3314 | |
3315 // Spawn an unsignaled stream by sending a packet - gain should be 1. | |
3316 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | |
3317 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc1).gain()); | |
3318 | |
3319 // Should remember the volume "2" which will be set on new unsignaled streams, | |
3320 // and also set the gain to 2 on existing unsignaled streams. | |
3296 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); | 3321 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); |
3297 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3322 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc1).gain()); |
3298 EXPECT_DOUBLE_EQ(2, GetRecvStream(1).gain()); | 3323 |
3324 // Spawn an unsignaled stream by sending a packet - gain should be 2. | |
3325 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; | |
3326 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); | |
3327 rtc::SetBE32(&pcmuFrame2[8], kSsrc4); | |
3328 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); | |
3329 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc4).gain()); | |
3330 | |
3331 // Setting gain with SSRC=0 should affect all unsignaled streams. | |
3299 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); | 3332 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); |
3300 EXPECT_DOUBLE_EQ(3, GetRecvStream(1).gain()); | 3333 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); |
3301 EXPECT_TRUE(channel_->SetOutputVolume(1, 4)); | 3334 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc4).gain()); |
3302 EXPECT_DOUBLE_EQ(4, GetRecvStream(1).gain()); | 3335 |
3336 // Setting gain on an individual stream affects only that. | |
3337 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc4, 4)); | |
3338 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); | |
3339 EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrc4).gain()); | |
3303 } | 3340 } |
3304 | 3341 |
3305 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { | 3342 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { |
3306 const uint32_t kAudioSsrc = 123; | 3343 const uint32_t kAudioSsrc = 123; |
3307 const std::string kSyncLabel = "AvSyncLabel"; | 3344 const std::string kSyncLabel = "AvSyncLabel"; |
3308 | 3345 |
3309 EXPECT_TRUE(SetupSendStream()); | 3346 EXPECT_TRUE(SetupSendStream()); |
3310 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); | 3347 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); |
3311 sp.sync_label = kSyncLabel; | 3348 sp.sync_label = kSyncLabel; |
3312 // Creating two channels to make sure that sync label is set properly for both | 3349 // Creating two channels to make sure that sync label is set properly for both |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3403 EXPECT_EQ(1, s->received_packets()); | 3440 EXPECT_EQ(1, s->received_packets()); |
3404 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); | 3441 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); |
3405 EXPECT_EQ(2, s->received_packets()); | 3442 EXPECT_EQ(2, s->received_packets()); |
3406 } | 3443 } |
3407 | 3444 |
3408 // All receive channels should be associated with the first send channel, | 3445 // All receive channels should be associated with the first send channel, |
3409 // since they do not send RTCP SR. | 3446 // since they do not send RTCP SR. |
3410 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) { | 3447 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) { |
3411 EXPECT_TRUE(SetupSendStream()); | 3448 EXPECT_TRUE(SetupSendStream()); |
3412 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 3449 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
3413 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 3450 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); |
3414 EXPECT_TRUE(channel_->AddSendStream( | 3451 EXPECT_TRUE(channel_->AddSendStream( |
3415 cricket::StreamParams::CreateLegacy(kSsrc3))); | 3452 cricket::StreamParams::CreateLegacy(kSsrc3))); |
3416 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 3453 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); |
3417 EXPECT_TRUE(AddRecvStream(kSsrc4)); | 3454 EXPECT_TRUE(AddRecvStream(kSsrc4)); |
3418 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc4).rtp.local_ssrc); | 3455 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc4).rtp.local_ssrc); |
3419 } | 3456 } |
3420 | 3457 |
3421 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) { | 3458 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) { |
3422 EXPECT_TRUE(SetupRecvStream()); | 3459 EXPECT_TRUE(SetupRecvStream()); |
3423 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3460 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc); |
3424 EXPECT_TRUE(channel_->AddSendStream( | 3461 EXPECT_TRUE(channel_->AddSendStream( |
3425 cricket::StreamParams::CreateLegacy(kSsrc2))); | 3462 cricket::StreamParams::CreateLegacy(kSsrc2))); |
3426 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3463 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc); |
3427 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 3464 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
3428 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); | 3465 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); |
3429 EXPECT_TRUE(channel_->AddSendStream( | 3466 EXPECT_TRUE(channel_->AddSendStream( |
3430 cricket::StreamParams::CreateLegacy(kSsrc4))); | 3467 cricket::StreamParams::CreateLegacy(kSsrc4))); |
3431 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3468 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc); |
3432 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); | 3469 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); |
3433 } | 3470 } |
3434 | 3471 |
3435 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { | 3472 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { |
3436 EXPECT_TRUE(SetupChannel()); | 3473 EXPECT_TRUE(SetupChannel()); |
3437 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3474 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3438 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3475 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
3439 | 3476 |
3440 // Setting the sink before a recv stream exists should do nothing. | 3477 // Setting the sink before a recv stream exists should do nothing. |
3441 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); | 3478 channel_->SetRawAudioSink(kSsrc9, std::move(fake_sink_1)); |
3442 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 3479 EXPECT_TRUE(AddRecvStream(kSsrc9)); |
3443 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3480 EXPECT_EQ(nullptr, GetRecvStream(kSsrc9).sink()); |
3444 | 3481 |
3445 // Now try actually setting the sink. | 3482 // Now try actually setting the sink. |
3446 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); | 3483 channel_->SetRawAudioSink(kSsrc9, std::move(fake_sink_2)); |
3447 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); | 3484 EXPECT_NE(nullptr, GetRecvStream(kSsrc9).sink()); |
3448 | 3485 |
3449 // Now try resetting it. | 3486 // Now try resetting it. |
3450 channel_->SetRawAudioSink(kSsrc1, nullptr); | 3487 channel_->SetRawAudioSink(kSsrc9, nullptr); |
3451 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3488 EXPECT_EQ(nullptr, GetRecvStream(kSsrc9).sink()); |
3452 } | 3489 } |
3453 | 3490 |
3454 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { | 3491 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkUnsignaledRecvStream) { |
3455 EXPECT_TRUE(SetupChannel()); | 3492 EXPECT_TRUE(SetupChannel()); |
3456 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3493 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3457 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3494 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
3495 std::unique_ptr<FakeAudioSink> fake_sink_3(new FakeAudioSink()); | |
3496 std::unique_ptr<FakeAudioSink> fake_sink_4(new FakeAudioSink()); | |
3458 | 3497 |
3459 // Should be able to set a default sink even when no stream exists. | 3498 // Should be able to set a default sink even when no stream exists. |
3460 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); | 3499 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); |
3461 | 3500 |
3462 // Create default channel and ensure it's assigned the default sink. | 3501 // Spawn an unsignaled stream by sending a packet - it should be assigned the |
3502 // default sink. | |
3463 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3503 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3464 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3504 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3465 | 3505 |
3466 // Try resetting the default sink. | 3506 // Try resetting the default sink. |
3467 channel_->SetRawAudioSink(0, nullptr); | 3507 channel_->SetRawAudioSink(0, nullptr); |
3468 EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); | 3508 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
3469 | 3509 |
3470 // Try setting the default sink while the default stream exists. | 3510 // Try setting the default sink while the default stream exists. |
3471 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); | 3511 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); |
3472 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3512 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3473 | 3513 |
3474 // If we remove and add a default stream, it should get the same sink. | 3514 // If we remove and add a default stream, it should get the same sink. |
3475 EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); | 3515 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1)); |
3476 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3516 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3477 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3517 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3518 | |
3519 // Spawn another unsignaled stream - it should be assigned the default sink | |
3520 // and the previous unsignaled stream should lose it. | |
3521 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; | |
3522 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); | |
3523 rtc::SetBE32(&pcmuFrame2[8], kSsrc4); | |
3524 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); | |
3525 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | |
3526 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink()); | |
3527 | |
3528 // Reset the default sink - the second unsignaled stream should lose it. | |
3529 channel_->SetRawAudioSink(0, nullptr); | |
3530 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | |
3531 EXPECT_EQ(nullptr, GetRecvStream(kSsrc4).sink()); | |
3532 | |
3533 // Try setting the default sink while two streams exists. | |
3534 channel_->SetRawAudioSink(0, std::move(fake_sink_3)); | |
3535 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | |
3536 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink()); | |
3537 | |
3538 // Try setting the sink for the first unsignaled stream using its known SSRC. | |
3539 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_4)); | |
3540 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); | |
3541 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink()); | |
3542 EXPECT_NE(GetRecvStream(kSsrc1).sink(), GetRecvStream(kSsrc4).sink()); | |
3478 } | 3543 } |
3479 | 3544 |
3480 // Test that, just like the video channel, the voice channel communicates the | 3545 // Test that, just like the video channel, the voice channel communicates the |
3481 // network state to the call. | 3546 // network state to the call. |
3482 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { | 3547 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { |
3483 EXPECT_TRUE(SetupChannel()); | 3548 EXPECT_TRUE(SetupChannel()); |
3484 | 3549 |
3485 EXPECT_EQ(webrtc::kNetworkUp, | 3550 EXPECT_EQ(webrtc::kNetworkUp, |
3486 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3551 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3487 EXPECT_EQ(webrtc::kNetworkUp, | 3552 EXPECT_EQ(webrtc::kNetworkUp, |
3488 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3553 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3489 | 3554 |
3490 channel_->OnReadyToSend(false); | 3555 channel_->OnReadyToSend(false); |
3491 EXPECT_EQ(webrtc::kNetworkDown, | 3556 EXPECT_EQ(webrtc::kNetworkDown, |
3492 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3557 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3493 EXPECT_EQ(webrtc::kNetworkUp, | 3558 EXPECT_EQ(webrtc::kNetworkUp, |
3494 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3559 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3495 | 3560 |
3496 channel_->OnReadyToSend(true); | 3561 channel_->OnReadyToSend(true); |
3497 EXPECT_EQ(webrtc::kNetworkUp, | 3562 EXPECT_EQ(webrtc::kNetworkUp, |
3498 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3563 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3499 EXPECT_EQ(webrtc::kNetworkUp, | 3564 EXPECT_EQ(webrtc::kNetworkUp, |
3500 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3565 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3501 } | 3566 } |
3502 | 3567 |
3503 // Test that playout is still started after changing parameters | 3568 // Test that playout is still started after changing parameters |
3504 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) { | 3569 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) { |
3505 SetupRecvStream(); | 3570 SetupRecvStream(); |
3506 channel_->SetPlayout(true); | 3571 channel_->SetPlayout(true); |
3507 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 3572 EXPECT_TRUE(GetRecvStream(kSsrc9).started()); |
3508 | 3573 |
3509 // Changing RTP header extensions will recreate the AudioReceiveStream. | 3574 // Changing RTP header extensions will recreate the AudioReceiveStream. |
3510 cricket::AudioRecvParameters parameters; | 3575 cricket::AudioRecvParameters parameters; |
3511 parameters.extensions.push_back( | 3576 parameters.extensions.push_back( |
3512 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); | 3577 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); |
3513 channel_->SetRecvParameters(parameters); | 3578 channel_->SetRecvParameters(parameters); |
3514 | 3579 |
3515 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 3580 EXPECT_TRUE(GetRecvStream(kSsrc9).started()); |
3516 } | 3581 } |
3517 | 3582 |
3518 // Tests that the library initializes and shuts down properly. | 3583 // Tests that the library initializes and shuts down properly. |
3519 TEST(WebRtcVoiceEngineTest, StartupShutdown) { | 3584 TEST(WebRtcVoiceEngineTest, StartupShutdown) { |
3520 // If the VoiceEngine wants to gather available codecs early, that's fine but | 3585 // If the VoiceEngine wants to gather available codecs early, that's fine but |
3521 // we never want it to create a decoder at this stage. | 3586 // we never want it to create a decoder at this stage. |
3522 cricket::WebRtcVoiceEngine engine( | 3587 cricket::WebRtcVoiceEngine engine( |
3523 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); | 3588 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); |
3524 webrtc::RtcEventLogNullImpl event_log; | 3589 webrtc::RtcEventLogNullImpl event_log; |
3525 std::unique_ptr<webrtc::Call> call( | 3590 std::unique_ptr<webrtc::Call> call( |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3755 // Without this cast, the comparison turned unsigned and, thus, failed for -1. | 3820 // Without this cast, the comparison turned unsigned and, thus, failed for -1. |
3756 const int num_specs = static_cast<int>(specs.size()); | 3821 const int num_specs = static_cast<int>(specs.size()); |
3757 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); | 3822 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); |
3758 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); | 3823 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); |
3759 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); | 3824 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); |
3760 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); | 3825 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); |
3761 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); | 3826 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); |
3762 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); | 3827 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); |
3763 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); | 3828 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); |
3764 } | 3829 } |
OLD | NEW |