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 30 matching lines...) Expand all Loading... |
41 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); | 41 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); |
42 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); | 42 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
43 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); | 43 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
44 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); | 44 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
45 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); | 45 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
46 const cricket::AudioCodec | 46 const cricket::AudioCodec |
47 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); | 47 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
48 const cricket::AudioCodec | 48 const cricket::AudioCodec |
49 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); | 49 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
50 | 50 |
51 const uint32_t kSsrc1 = 0x99; | 51 const uint32_t kSsrc0 = 0; |
52 const uint32_t kSsrc2 = 2; | 52 const uint32_t kSsrc1 = 1; |
53 const uint32_t kSsrc3 = 3; | 53 const uint32_t kSsrcX = 0x99; |
54 const uint32_t kSsrc4 = 0x42; | 54 const uint32_t kSsrcY = 0x17; |
55 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; | 55 const uint32_t kSsrcZ = 0x42; |
| 56 const uint32_t kSsrcW = 0x02; |
| 57 const uint32_t kSsrcs4[] = { 11, 200, 30, 44 }; |
56 | 58 |
57 constexpr int kRtpHistoryMs = 5000; | 59 constexpr int kRtpHistoryMs = 5000; |
58 | 60 |
59 class FakeVoEWrapper : public cricket::VoEWrapper { | 61 class FakeVoEWrapper : public cricket::VoEWrapper { |
60 public: | 62 public: |
61 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) | 63 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) |
62 : cricket::VoEWrapper(engine, // base | 64 : cricket::VoEWrapper(engine, // base |
63 engine, // codec | 65 engine, // codec |
64 engine, // hw | 66 engine, // hw |
65 engine) { // volume | 67 engine) { // volume |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); | 163 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); |
162 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), | 164 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), |
163 cricket::AudioOptions()); | 165 cricket::AudioOptions()); |
164 return (channel_ != nullptr); | 166 return (channel_ != nullptr); |
165 } | 167 } |
166 | 168 |
167 bool SetupRecvStream() { | 169 bool SetupRecvStream() { |
168 if (!SetupChannel()) { | 170 if (!SetupChannel()) { |
169 return false; | 171 return false; |
170 } | 172 } |
171 return AddRecvStream(kSsrc1); | 173 return AddRecvStream(kSsrcX); |
172 } | 174 } |
173 | 175 |
174 bool SetupSendStream() { | 176 bool SetupSendStream() { |
175 if (!SetupChannel()) { | 177 if (!SetupChannel()) { |
176 return false; | 178 return false; |
177 } | 179 } |
178 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) { | 180 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcX))) { |
179 return false; | 181 return false; |
180 } | 182 } |
181 EXPECT_CALL(apm_, set_output_will_be_muted(false)); | 183 EXPECT_CALL(apm_, set_output_will_be_muted(false)); |
182 return channel_->SetAudioSend(kSsrc1, true, nullptr, &fake_source_); | 184 return channel_->SetAudioSend(kSsrcX, true, nullptr, &fake_source_); |
183 } | 185 } |
184 | 186 |
185 bool AddRecvStream(uint32_t ssrc) { | 187 bool AddRecvStream(uint32_t ssrc) { |
186 EXPECT_TRUE(channel_); | 188 EXPECT_TRUE(channel_); |
187 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc)); | 189 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc)); |
188 } | 190 } |
189 | 191 |
190 void SetupForMultiSendStream() { | 192 void SetupForMultiSendStream() { |
191 EXPECT_TRUE(SetupSendStream()); | 193 EXPECT_TRUE(SetupSendStream()); |
192 // Remove stream added in Setup. | 194 // Remove stream added in Setup. |
193 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 195 EXPECT_TRUE(call_.GetAudioSendStream(kSsrcX)); |
194 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc1)); | 196 EXPECT_TRUE(channel_->RemoveSendStream(kSsrcX)); |
195 // Verify the channel does not exist. | 197 // Verify the channel does not exist. |
196 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc1)); | 198 EXPECT_FALSE(call_.GetAudioSendStream(kSsrcX)); |
197 } | 199 } |
198 | 200 |
199 void DeliverPacket(const void* data, int len) { | 201 void DeliverPacket(const void* data, int len) { |
200 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len); | 202 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len); |
201 channel_->OnPacketReceived(&packet, rtc::PacketTime()); | 203 channel_->OnPacketReceived(&packet, rtc::PacketTime()); |
202 } | 204 } |
203 | 205 |
204 void TearDown() override { | 206 void TearDown() override { |
205 delete channel_; | 207 delete channel_; |
206 } | 208 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source)); | 257 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source)); |
256 } | 258 } |
257 | 259 |
258 void TestInsertDtmf(uint32_t ssrc, bool caller, | 260 void TestInsertDtmf(uint32_t ssrc, bool caller, |
259 const cricket::AudioCodec& codec) { | 261 const cricket::AudioCodec& codec) { |
260 EXPECT_TRUE(SetupChannel()); | 262 EXPECT_TRUE(SetupChannel()); |
261 if (caller) { | 263 if (caller) { |
262 // If this is a caller, local description will be applied and add the | 264 // If this is a caller, local description will be applied and add the |
263 // send stream. | 265 // send stream. |
264 EXPECT_TRUE(channel_->AddSendStream( | 266 EXPECT_TRUE(channel_->AddSendStream( |
265 cricket::StreamParams::CreateLegacy(kSsrc1))); | 267 cricket::StreamParams::CreateLegacy(kSsrcX))); |
266 } | 268 } |
267 | 269 |
268 // Test we can only InsertDtmf when the other side supports telephone-event. | 270 // Test we can only InsertDtmf when the other side supports telephone-event. |
269 SetSendParameters(send_parameters_); | 271 SetSendParameters(send_parameters_); |
270 SetSend(true); | 272 SetSend(true); |
271 EXPECT_FALSE(channel_->CanInsertDtmf()); | 273 EXPECT_FALSE(channel_->CanInsertDtmf()); |
272 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); | 274 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); |
273 send_parameters_.codecs.push_back(codec); | 275 send_parameters_.codecs.push_back(codec); |
274 SetSendParameters(send_parameters_); | 276 SetSendParameters(send_parameters_); |
275 EXPECT_TRUE(channel_->CanInsertDtmf()); | 277 EXPECT_TRUE(channel_->CanInsertDtmf()); |
276 | 278 |
277 if (!caller) { | 279 if (!caller) { |
278 // If this is callee, there's no active send channel yet. | 280 // If this is callee, there's no active send channel yet. |
279 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); | 281 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); |
280 EXPECT_TRUE(channel_->AddSendStream( | 282 EXPECT_TRUE(channel_->AddSendStream( |
281 cricket::StreamParams::CreateLegacy(kSsrc1))); | 283 cricket::StreamParams::CreateLegacy(kSsrcX))); |
282 } | 284 } |
283 | 285 |
284 // Check we fail if the ssrc is invalid. | 286 // Check we fail if the ssrc is invalid. |
285 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); | 287 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); |
286 | 288 |
287 // Test send. | 289 // Test send. |
288 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = | 290 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = |
289 GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 291 GetSendStream(kSsrcX).GetLatestTelephoneEvent(); |
290 EXPECT_EQ(-1, telephone_event.payload_type); | 292 EXPECT_EQ(-1, telephone_event.payload_type); |
291 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); | 293 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); |
292 telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 294 telephone_event = GetSendStream(kSsrcX).GetLatestTelephoneEvent(); |
293 EXPECT_EQ(codec.id, telephone_event.payload_type); | 295 EXPECT_EQ(codec.id, telephone_event.payload_type); |
294 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency); | 296 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency); |
295 EXPECT_EQ(2, telephone_event.event_code); | 297 EXPECT_EQ(2, telephone_event.event_code); |
296 EXPECT_EQ(123, telephone_event.duration_ms); | 298 EXPECT_EQ(123, telephone_event.duration_ms); |
297 } | 299 } |
298 | 300 |
299 // Test that send bandwidth is set correctly. | 301 // Test that send bandwidth is set correctly. |
300 // |codec| is the codec under test. | 302 // |codec| is the codec under test. |
301 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). | 303 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). |
302 // |expected_result| is the expected result from SetMaxSendBandwidth(). | 304 // |expected_result| is the expected result from SetMaxSendBandwidth(). |
303 // |expected_bitrate| is the expected audio bitrate afterward. | 305 // |expected_bitrate| is the expected audio bitrate afterward. |
304 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, | 306 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, |
305 int max_bitrate, | 307 int max_bitrate, |
306 bool expected_result, | 308 bool expected_result, |
307 int expected_bitrate) { | 309 int expected_bitrate) { |
308 cricket::AudioSendParameters parameters; | 310 cricket::AudioSendParameters parameters; |
309 parameters.codecs.push_back(codec); | 311 parameters.codecs.push_back(codec); |
310 parameters.max_bandwidth_bps = max_bitrate; | 312 parameters.max_bandwidth_bps = max_bitrate; |
311 if (expected_result) { | 313 if (expected_result) { |
312 SetSendParameters(parameters); | 314 SetSendParameters(parameters); |
313 } else { | 315 } else { |
314 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 316 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
315 } | 317 } |
316 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrc1)); | 318 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrcX)); |
317 } | 319 } |
318 | 320 |
319 // Sets the per-stream maximum bitrate limit for the specified SSRC. | 321 // Sets the per-stream maximum bitrate limit for the specified SSRC. |
320 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { | 322 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { |
321 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); | 323 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); |
322 EXPECT_EQ(1UL, parameters.encodings.size()); | 324 EXPECT_EQ(1UL, parameters.encodings.size()); |
323 | 325 |
324 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate); | 326 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate); |
325 return channel_->SetRtpSendParameters(ssrc, parameters); | 327 return channel_->SetRtpSendParameters(ssrc, parameters); |
326 } | 328 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { | 367 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { |
366 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; | 368 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; |
367 } | 369 } |
368 | 370 |
369 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, | 371 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, |
370 int global_max, | 372 int global_max, |
371 int stream_max, | 373 int stream_max, |
372 bool expected_result, | 374 bool expected_result, |
373 int expected_codec_bitrate) { | 375 int expected_codec_bitrate) { |
374 // Clear the bitrate limit from the previous test case. | 376 // Clear the bitrate limit from the previous test case. |
375 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc1, -1)); | 377 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcX, -1)); |
376 | 378 |
377 // Attempt to set the requested bitrate limits. | 379 // Attempt to set the requested bitrate limits. |
378 SetGlobalMaxBitrate(codec, global_max); | 380 SetGlobalMaxBitrate(codec, global_max); |
379 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc1, stream_max)); | 381 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrcX, stream_max)); |
380 | 382 |
381 // Verify that reading back the parameters gives results | 383 // Verify that reading back the parameters gives results |
382 // consistent with the Set() result. | 384 // consistent with the Set() result. |
383 webrtc::RtpParameters resulting_parameters = | 385 webrtc::RtpParameters resulting_parameters = |
384 channel_->GetRtpSendParameters(kSsrc1); | 386 channel_->GetRtpSendParameters(kSsrcX); |
385 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); | 387 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); |
386 EXPECT_EQ(expected_result ? stream_max : -1, | 388 EXPECT_EQ(expected_result ? stream_max : -1, |
387 resulting_parameters.encodings[0].max_bitrate_bps); | 389 resulting_parameters.encodings[0].max_bitrate_bps); |
388 | 390 |
389 // Verify that the codec settings have the expected bitrate. | 391 // Verify that the codec settings have the expected bitrate. |
390 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc1)); | 392 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrcX)); |
391 } | 393 } |
392 | 394 |
393 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, | 395 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, |
394 int expected_min_bitrate_bps, | 396 int expected_min_bitrate_bps, |
395 const char* start_bitrate_kbps, | 397 const char* start_bitrate_kbps, |
396 int expected_start_bitrate_bps, | 398 int expected_start_bitrate_bps, |
397 const char* max_bitrate_kbps, | 399 const char* max_bitrate_kbps, |
398 int expected_max_bitrate_bps) { | 400 int expected_max_bitrate_bps) { |
399 EXPECT_TRUE(SetupSendStream()); | 401 EXPECT_TRUE(SetupSendStream()); |
400 auto& codecs = send_parameters_.codecs; | 402 auto& codecs = send_parameters_.codecs; |
401 codecs.clear(); | 403 codecs.clear(); |
402 codecs.push_back(kOpusCodec); | 404 codecs.push_back(kOpusCodec); |
403 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps; | 405 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps; |
404 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps; | 406 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps; |
405 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps; | 407 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps; |
406 SetSendParameters(send_parameters_); | 408 SetSendParameters(send_parameters_); |
407 | 409 |
408 EXPECT_EQ(expected_min_bitrate_bps, | 410 EXPECT_EQ(expected_min_bitrate_bps, |
409 call_.GetConfig().bitrate_config.min_bitrate_bps); | 411 call_.GetConfig().bitrate_config.min_bitrate_bps); |
410 EXPECT_EQ(expected_start_bitrate_bps, | 412 EXPECT_EQ(expected_start_bitrate_bps, |
411 call_.GetConfig().bitrate_config.start_bitrate_bps); | 413 call_.GetConfig().bitrate_config.start_bitrate_bps); |
412 EXPECT_EQ(expected_max_bitrate_bps, | 414 EXPECT_EQ(expected_max_bitrate_bps, |
413 call_.GetConfig().bitrate_config.max_bitrate_bps); | 415 call_.GetConfig().bitrate_config.max_bitrate_bps); |
414 } | 416 } |
415 | 417 |
416 void TestSetSendRtpHeaderExtensions(const std::string& ext) { | 418 void TestSetSendRtpHeaderExtensions(const std::string& ext) { |
417 EXPECT_TRUE(SetupSendStream()); | 419 EXPECT_TRUE(SetupSendStream()); |
418 | 420 |
419 // Ensure extensions are off by default. | 421 // Ensure extensions are off by default. |
420 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 422 EXPECT_EQ(0u, GetSendStreamConfig(kSsrcX).rtp.extensions.size()); |
421 | 423 |
422 // Ensure unknown extensions won't cause an error. | 424 // Ensure unknown extensions won't cause an error. |
423 send_parameters_.extensions.push_back( | 425 send_parameters_.extensions.push_back( |
424 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); | 426 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); |
425 SetSendParameters(send_parameters_); | 427 SetSendParameters(send_parameters_); |
426 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 428 EXPECT_EQ(0u, GetSendStreamConfig(kSsrcX).rtp.extensions.size()); |
427 | 429 |
428 // Ensure extensions stay off with an empty list of headers. | 430 // Ensure extensions stay off with an empty list of headers. |
429 send_parameters_.extensions.clear(); | 431 send_parameters_.extensions.clear(); |
430 SetSendParameters(send_parameters_); | 432 SetSendParameters(send_parameters_); |
431 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 433 EXPECT_EQ(0u, GetSendStreamConfig(kSsrcX).rtp.extensions.size()); |
432 | 434 |
433 // Ensure extension is set properly. | 435 // Ensure extension is set properly. |
434 const int id = 1; | 436 const int id = 1; |
435 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); | 437 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); |
436 SetSendParameters(send_parameters_); | 438 SetSendParameters(send_parameters_); |
437 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 439 EXPECT_EQ(1u, GetSendStreamConfig(kSsrcX).rtp.extensions.size()); |
438 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc1).rtp.extensions[0].uri); | 440 EXPECT_EQ(ext, GetSendStreamConfig(kSsrcX).rtp.extensions[0].uri); |
439 EXPECT_EQ(id, GetSendStreamConfig(kSsrc1).rtp.extensions[0].id); | 441 EXPECT_EQ(id, GetSendStreamConfig(kSsrcX).rtp.extensions[0].id); |
440 | 442 |
441 // Ensure extension is set properly on new stream. | 443 // Ensure extension is set properly on new stream. |
442 EXPECT_TRUE(channel_->AddSendStream( | 444 EXPECT_TRUE(channel_->AddSendStream( |
443 cricket::StreamParams::CreateLegacy(kSsrc2))); | 445 cricket::StreamParams::CreateLegacy(kSsrcY))); |
444 EXPECT_NE(call_.GetAudioSendStream(kSsrc1), | 446 EXPECT_NE(call_.GetAudioSendStream(kSsrcX), |
445 call_.GetAudioSendStream(kSsrc2)); | 447 call_.GetAudioSendStream(kSsrcY)); |
446 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); | 448 EXPECT_EQ(1u, GetSendStreamConfig(kSsrcY).rtp.extensions.size()); |
447 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri); | 449 EXPECT_EQ(ext, GetSendStreamConfig(kSsrcY).rtp.extensions[0].uri); |
448 EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id); | 450 EXPECT_EQ(id, GetSendStreamConfig(kSsrcY).rtp.extensions[0].id); |
449 | 451 |
450 // Ensure all extensions go back off with an empty list. | 452 // Ensure all extensions go back off with an empty list. |
451 send_parameters_.codecs.push_back(kPcmuCodec); | 453 send_parameters_.codecs.push_back(kPcmuCodec); |
452 send_parameters_.extensions.clear(); | 454 send_parameters_.extensions.clear(); |
453 SetSendParameters(send_parameters_); | 455 SetSendParameters(send_parameters_); |
454 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); | 456 EXPECT_EQ(0u, GetSendStreamConfig(kSsrcX).rtp.extensions.size()); |
455 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); | 457 EXPECT_EQ(0u, GetSendStreamConfig(kSsrcY).rtp.extensions.size()); |
456 } | 458 } |
457 | 459 |
458 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { | 460 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { |
459 EXPECT_TRUE(SetupRecvStream()); | 461 EXPECT_TRUE(SetupRecvStream()); |
460 | 462 |
461 // Ensure extensions are off by default. | 463 // Ensure extensions are off by default. |
462 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 464 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrcX).rtp.extensions.size()); |
463 | 465 |
464 // Ensure unknown extensions won't cause an error. | 466 // Ensure unknown extensions won't cause an error. |
465 recv_parameters_.extensions.push_back( | 467 recv_parameters_.extensions.push_back( |
466 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); | 468 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); |
467 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 469 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
468 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 470 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrcX).rtp.extensions.size()); |
469 | 471 |
470 // Ensure extensions stay off with an empty list of headers. | 472 // Ensure extensions stay off with an empty list of headers. |
471 recv_parameters_.extensions.clear(); | 473 recv_parameters_.extensions.clear(); |
472 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 474 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
473 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 475 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrcX).rtp.extensions.size()); |
474 | 476 |
475 // Ensure extension is set properly. | 477 // Ensure extension is set properly. |
476 const int id = 2; | 478 const int id = 2; |
477 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); | 479 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); |
478 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 480 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
479 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 481 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrcX).rtp.extensions.size()); |
480 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].uri); | 482 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrcX).rtp.extensions[0].uri); |
481 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].id); | 483 EXPECT_EQ(id, GetRecvStreamConfig(kSsrcX).rtp.extensions[0].id); |
482 | 484 |
483 // Ensure extension is set properly on new stream. | 485 // Ensure extension is set properly on new stream. |
484 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 486 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
485 EXPECT_NE(call_.GetAudioReceiveStream(kSsrc1), | 487 EXPECT_NE(call_.GetAudioReceiveStream(kSsrcX), |
486 call_.GetAudioReceiveStream(kSsrc2)); | 488 call_.GetAudioReceiveStream(kSsrcY)); |
487 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); | 489 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrcY).rtp.extensions.size()); |
488 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri); | 490 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrcY).rtp.extensions[0].uri); |
489 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); | 491 EXPECT_EQ(id, GetRecvStreamConfig(kSsrcY).rtp.extensions[0].id); |
490 | 492 |
491 // Ensure all extensions go back off with an empty list. | 493 // Ensure all extensions go back off with an empty list. |
492 recv_parameters_.extensions.clear(); | 494 recv_parameters_.extensions.clear(); |
493 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 495 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
494 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 496 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrcX).rtp.extensions.size()); |
495 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); | 497 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrcY).rtp.extensions.size()); |
496 } | 498 } |
497 | 499 |
498 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { | 500 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { |
499 webrtc::AudioSendStream::Stats stats; | 501 webrtc::AudioSendStream::Stats stats; |
500 stats.local_ssrc = 12; | 502 stats.local_ssrc = 12; |
501 stats.bytes_sent = 345; | 503 stats.bytes_sent = 345; |
502 stats.packets_sent = 678; | 504 stats.packets_sent = 678; |
503 stats.packets_lost = 9012; | 505 stats.packets_lost = 9012; |
504 stats.fraction_lost = 34.56f; | 506 stats.fraction_lost = 34.56f; |
505 stats.codec_name = "codec_name_send"; | 507 stats.codec_name = "codec_name_send"; |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 | 659 |
658 // Tests that we can create and destroy a channel. | 660 // Tests that we can create and destroy a channel. |
659 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { | 661 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { |
660 EXPECT_TRUE(SetupChannel()); | 662 EXPECT_TRUE(SetupChannel()); |
661 } | 663 } |
662 | 664 |
663 // Test that we can add a send stream and that it has the correct defaults. | 665 // Test that we can add a send stream and that it has the correct defaults. |
664 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) { | 666 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) { |
665 EXPECT_TRUE(SetupChannel()); | 667 EXPECT_TRUE(SetupChannel()); |
666 EXPECT_TRUE( | 668 EXPECT_TRUE( |
667 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | 669 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcX))); |
668 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrc1); | 670 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrcX); |
669 EXPECT_EQ(kSsrc1, config.rtp.ssrc); | 671 EXPECT_EQ(kSsrcX, config.rtp.ssrc); |
670 EXPECT_EQ("", config.rtp.c_name); | 672 EXPECT_EQ("", config.rtp.c_name); |
671 EXPECT_EQ(0u, config.rtp.extensions.size()); | 673 EXPECT_EQ(0u, config.rtp.extensions.size()); |
672 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), | 674 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), |
673 config.send_transport); | 675 config.send_transport); |
674 } | 676 } |
675 | 677 |
676 // Test that we can add a receive stream and that it has the correct defaults. | 678 // Test that we can add a receive stream and that it has the correct defaults. |
677 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) { | 679 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) { |
678 EXPECT_TRUE(SetupChannel()); | 680 EXPECT_TRUE(SetupChannel()); |
679 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 681 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
680 const webrtc::AudioReceiveStream::Config& config = | 682 const webrtc::AudioReceiveStream::Config& config = |
681 GetRecvStreamConfig(kSsrc1); | 683 GetRecvStreamConfig(kSsrcX); |
682 EXPECT_EQ(kSsrc1, config.rtp.remote_ssrc); | 684 EXPECT_EQ(kSsrcX, config.rtp.remote_ssrc); |
683 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); | 685 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); |
684 EXPECT_FALSE(config.rtp.transport_cc); | 686 EXPECT_FALSE(config.rtp.transport_cc); |
685 EXPECT_EQ(0u, config.rtp.extensions.size()); | 687 EXPECT_EQ(0u, config.rtp.extensions.size()); |
686 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), | 688 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), |
687 config.rtcp_send_transport); | 689 config.rtcp_send_transport); |
688 EXPECT_EQ("", config.sync_group); | 690 EXPECT_EQ("", config.sync_group); |
689 } | 691 } |
690 | 692 |
691 // Tests that the list of supported codecs is created properly and ordered | 693 // Tests that the list of supported codecs is created properly and ordered |
692 // correctly (such that opus appears first). | 694 // correctly (such that opus appears first). |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 759 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
758 EXPECT_TRUE(SetupChannel()); | 760 EXPECT_TRUE(SetupChannel()); |
759 cricket::AudioRecvParameters parameters; | 761 cricket::AudioRecvParameters parameters; |
760 parameters.codecs.push_back(kIsacCodec); | 762 parameters.codecs.push_back(kIsacCodec); |
761 parameters.codecs.push_back(kPcmuCodec); | 763 parameters.codecs.push_back(kPcmuCodec); |
762 parameters.codecs.push_back(kTelephoneEventCodec1); | 764 parameters.codecs.push_back(kTelephoneEventCodec1); |
763 parameters.codecs.push_back(kTelephoneEventCodec2); | 765 parameters.codecs.push_back(kTelephoneEventCodec2); |
764 parameters.codecs[0].id = 106; // collide with existing CN 32k | 766 parameters.codecs[0].id = 106; // collide with existing CN 32k |
765 parameters.codecs[2].id = 126; | 767 parameters.codecs[2].id = 126; |
766 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 768 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
767 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 769 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
768 int channel_num = voe_.GetLastChannel(); | 770 int channel_num = voe_.GetLastChannel(); |
769 | 771 |
770 webrtc::CodecInst gcodec; | 772 webrtc::CodecInst gcodec; |
771 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 773 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
772 gcodec.plfreq = 16000; | 774 gcodec.plfreq = 16000; |
773 gcodec.channels = 1; | 775 gcodec.channels = 1; |
774 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 776 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
775 EXPECT_EQ(106, gcodec.pltype); | 777 EXPECT_EQ(106, gcodec.pltype); |
776 EXPECT_STREQ("ISAC", gcodec.plname); | 778 EXPECT_STREQ("ISAC", gcodec.plname); |
777 | 779 |
(...skipping 29 matching lines...) Expand all Loading... |
807 } | 809 } |
808 | 810 |
809 // Test that we can decode OPUS without stereo parameters. | 811 // Test that we can decode OPUS without stereo parameters. |
810 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { | 812 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { |
811 EXPECT_TRUE(SetupChannel()); | 813 EXPECT_TRUE(SetupChannel()); |
812 cricket::AudioRecvParameters parameters; | 814 cricket::AudioRecvParameters parameters; |
813 parameters.codecs.push_back(kIsacCodec); | 815 parameters.codecs.push_back(kIsacCodec); |
814 parameters.codecs.push_back(kPcmuCodec); | 816 parameters.codecs.push_back(kPcmuCodec); |
815 parameters.codecs.push_back(kOpusCodec); | 817 parameters.codecs.push_back(kOpusCodec); |
816 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 818 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
817 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 819 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
818 int channel_num = voe_.GetLastChannel(); | 820 int channel_num = voe_.GetLastChannel(); |
819 webrtc::CodecInst opus; | 821 webrtc::CodecInst opus; |
820 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 822 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
821 // Even without stereo parameters, recv codecs still specify channels = 2. | 823 // Even without stereo parameters, recv codecs still specify channels = 2. |
822 EXPECT_EQ(2, opus.channels); | 824 EXPECT_EQ(2, opus.channels); |
823 EXPECT_EQ(111, opus.pltype); | 825 EXPECT_EQ(111, opus.pltype); |
824 EXPECT_STREQ("opus", opus.plname); | 826 EXPECT_STREQ("opus", opus.plname); |
825 opus.pltype = 0; | 827 opus.pltype = 0; |
826 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); | 828 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); |
827 EXPECT_EQ(111, opus.pltype); | 829 EXPECT_EQ(111, opus.pltype); |
828 } | 830 } |
829 | 831 |
830 // Test that we can decode OPUS with stereo = 0. | 832 // Test that we can decode OPUS with stereo = 0. |
831 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { | 833 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { |
832 EXPECT_TRUE(SetupChannel()); | 834 EXPECT_TRUE(SetupChannel()); |
833 cricket::AudioRecvParameters parameters; | 835 cricket::AudioRecvParameters parameters; |
834 parameters.codecs.push_back(kIsacCodec); | 836 parameters.codecs.push_back(kIsacCodec); |
835 parameters.codecs.push_back(kPcmuCodec); | 837 parameters.codecs.push_back(kPcmuCodec); |
836 parameters.codecs.push_back(kOpusCodec); | 838 parameters.codecs.push_back(kOpusCodec); |
837 parameters.codecs[2].params["stereo"] = "0"; | 839 parameters.codecs[2].params["stereo"] = "0"; |
838 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 840 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
839 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 841 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
840 int channel_num2 = voe_.GetLastChannel(); | 842 int channel_num2 = voe_.GetLastChannel(); |
841 webrtc::CodecInst opus; | 843 webrtc::CodecInst opus; |
842 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 844 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
843 // Even when stereo is off, recv codecs still specify channels = 2. | 845 // Even when stereo is off, recv codecs still specify channels = 2. |
844 EXPECT_EQ(2, opus.channels); | 846 EXPECT_EQ(2, opus.channels); |
845 EXPECT_EQ(111, opus.pltype); | 847 EXPECT_EQ(111, opus.pltype); |
846 EXPECT_STREQ("opus", opus.plname); | 848 EXPECT_STREQ("opus", opus.plname); |
847 opus.pltype = 0; | 849 opus.pltype = 0; |
848 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 850 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
849 EXPECT_EQ(111, opus.pltype); | 851 EXPECT_EQ(111, opus.pltype); |
850 } | 852 } |
851 | 853 |
852 // Test that we can decode OPUS with stereo = 1. | 854 // Test that we can decode OPUS with stereo = 1. |
853 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { | 855 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { |
854 EXPECT_TRUE(SetupChannel()); | 856 EXPECT_TRUE(SetupChannel()); |
855 cricket::AudioRecvParameters parameters; | 857 cricket::AudioRecvParameters parameters; |
856 parameters.codecs.push_back(kIsacCodec); | 858 parameters.codecs.push_back(kIsacCodec); |
857 parameters.codecs.push_back(kPcmuCodec); | 859 parameters.codecs.push_back(kPcmuCodec); |
858 parameters.codecs.push_back(kOpusCodec); | 860 parameters.codecs.push_back(kOpusCodec); |
859 parameters.codecs[2].params["stereo"] = "1"; | 861 parameters.codecs[2].params["stereo"] = "1"; |
860 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 862 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
861 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 863 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
862 int channel_num2 = voe_.GetLastChannel(); | 864 int channel_num2 = voe_.GetLastChannel(); |
863 webrtc::CodecInst opus; | 865 webrtc::CodecInst opus; |
864 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 866 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
865 EXPECT_EQ(2, opus.channels); | 867 EXPECT_EQ(2, opus.channels); |
866 EXPECT_EQ(111, opus.pltype); | 868 EXPECT_EQ(111, opus.pltype); |
867 EXPECT_STREQ("opus", opus.plname); | 869 EXPECT_STREQ("opus", opus.plname); |
868 opus.pltype = 0; | 870 opus.pltype = 0; |
869 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 871 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
870 EXPECT_EQ(111, opus.pltype); | 872 EXPECT_EQ(111, opus.pltype); |
871 } | 873 } |
872 | 874 |
873 // Test that changes to recv codecs are applied to all streams. | 875 // Test that changes to recv codecs are applied to all streams. |
874 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { | 876 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
875 EXPECT_TRUE(SetupChannel()); | 877 EXPECT_TRUE(SetupChannel()); |
876 cricket::AudioRecvParameters parameters; | 878 cricket::AudioRecvParameters parameters; |
877 parameters.codecs.push_back(kIsacCodec); | 879 parameters.codecs.push_back(kIsacCodec); |
878 parameters.codecs.push_back(kPcmuCodec); | 880 parameters.codecs.push_back(kPcmuCodec); |
879 parameters.codecs.push_back(kTelephoneEventCodec1); | 881 parameters.codecs.push_back(kTelephoneEventCodec1); |
880 parameters.codecs.push_back(kTelephoneEventCodec2); | 882 parameters.codecs.push_back(kTelephoneEventCodec2); |
881 parameters.codecs[0].id = 106; // collide with existing CN 32k | 883 parameters.codecs[0].id = 106; // collide with existing CN 32k |
882 parameters.codecs[2].id = 126; | 884 parameters.codecs[2].id = 126; |
883 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 885 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
884 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 886 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
885 int channel_num2 = voe_.GetLastChannel(); | 887 int channel_num2 = voe_.GetLastChannel(); |
886 | 888 |
887 webrtc::CodecInst gcodec; | 889 webrtc::CodecInst gcodec; |
888 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 890 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
889 gcodec.plfreq = 16000; | 891 gcodec.plfreq = 16000; |
890 gcodec.channels = 1; | 892 gcodec.channels = 1; |
891 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); | 893 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
892 EXPECT_EQ(106, gcodec.pltype); | 894 EXPECT_EQ(106, gcodec.pltype); |
893 EXPECT_STREQ("ISAC", gcodec.plname); | 895 EXPECT_STREQ("ISAC", gcodec.plname); |
894 | 896 |
(...skipping 10 matching lines...) Expand all Loading... |
905 EXPECT_STREQ("telephone-event", gcodec.plname); | 907 EXPECT_STREQ("telephone-event", gcodec.plname); |
906 } | 908 } |
907 | 909 |
908 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { | 910 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { |
909 EXPECT_TRUE(SetupRecvStream()); | 911 EXPECT_TRUE(SetupRecvStream()); |
910 cricket::AudioRecvParameters parameters; | 912 cricket::AudioRecvParameters parameters; |
911 parameters.codecs.push_back(kIsacCodec); | 913 parameters.codecs.push_back(kIsacCodec); |
912 parameters.codecs[0].id = 106; // collide with existing CN 32k | 914 parameters.codecs[0].id = 106; // collide with existing CN 32k |
913 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 915 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
914 | 916 |
915 const auto& dm = GetRecvStreamConfig(kSsrc1).decoder_map; | 917 const auto& dm = GetRecvStreamConfig(kSsrcX).decoder_map; |
916 ASSERT_EQ(1, dm.count(106)); | 918 ASSERT_EQ(1, dm.count(106)); |
917 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106)); | 919 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106)); |
918 } | 920 } |
919 | 921 |
920 // Test that we can apply the same set of codecs again while playing. | 922 // Test that we can apply the same set of codecs again while playing. |
921 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { | 923 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { |
922 EXPECT_TRUE(SetupRecvStream()); | 924 EXPECT_TRUE(SetupRecvStream()); |
923 cricket::AudioRecvParameters parameters; | 925 cricket::AudioRecvParameters parameters; |
924 parameters.codecs.push_back(kIsacCodec); | 926 parameters.codecs.push_back(kIsacCodec); |
925 parameters.codecs.push_back(kCn16000Codec); | 927 parameters.codecs.push_back(kCn16000Codec); |
926 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 928 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
927 channel_->SetPlayout(true); | 929 channel_->SetPlayout(true); |
928 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 930 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
929 | 931 |
930 // Changing the payload type of a codec should fail. | 932 // Changing the payload type of a codec should fail. |
931 parameters.codecs[0].id = 127; | 933 parameters.codecs[0].id = 127; |
932 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); | 934 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
933 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 935 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); |
934 } | 936 } |
935 | 937 |
936 // Test that we can add a codec while playing. | 938 // Test that we can add a codec while playing. |
937 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { | 939 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { |
938 EXPECT_TRUE(SetupRecvStream()); | 940 EXPECT_TRUE(SetupRecvStream()); |
939 cricket::AudioRecvParameters parameters; | 941 cricket::AudioRecvParameters parameters; |
940 parameters.codecs.push_back(kIsacCodec); | 942 parameters.codecs.push_back(kIsacCodec); |
941 parameters.codecs.push_back(kCn16000Codec); | 943 parameters.codecs.push_back(kCn16000Codec); |
942 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 944 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
943 channel_->SetPlayout(true); | 945 channel_->SetPlayout(true); |
944 | 946 |
945 parameters.codecs.push_back(kOpusCodec); | 947 parameters.codecs.push_back(kOpusCodec); |
946 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 948 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
947 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 949 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); |
948 webrtc::CodecInst gcodec; | 950 webrtc::CodecInst gcodec; |
949 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec)); | 951 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec)); |
950 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); | 952 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); |
951 } | 953 } |
952 | 954 |
953 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { | 955 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { |
954 EXPECT_TRUE(SetupSendStream()); | 956 EXPECT_TRUE(SetupSendStream()); |
955 | 957 |
956 // Test that when autobw is enabled, bitrate is kept as the default | 958 // Test that when autobw is enabled, bitrate is kept as the default |
957 // value. autobw is enabled for the following tests because the target | 959 // value. autobw is enabled for the following tests because the target |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 | 1005 |
1004 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { | 1006 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { |
1005 EXPECT_TRUE(SetupChannel()); | 1007 EXPECT_TRUE(SetupChannel()); |
1006 const int kDesiredBitrate = 128000; | 1008 const int kDesiredBitrate = 128000; |
1007 cricket::AudioSendParameters parameters; | 1009 cricket::AudioSendParameters parameters; |
1008 parameters.codecs = engine_->send_codecs(); | 1010 parameters.codecs = engine_->send_codecs(); |
1009 parameters.max_bandwidth_bps = kDesiredBitrate; | 1011 parameters.max_bandwidth_bps = kDesiredBitrate; |
1010 SetSendParameters(parameters); | 1012 SetSendParameters(parameters); |
1011 | 1013 |
1012 EXPECT_TRUE(channel_->AddSendStream( | 1014 EXPECT_TRUE(channel_->AddSendStream( |
1013 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1015 cricket::StreamParams::CreateLegacy(kSsrcX))); |
1014 | 1016 |
1015 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrc1)); | 1017 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrcX)); |
1016 } | 1018 } |
1017 | 1019 |
1018 // Test that bitrate cannot be set for CBR codecs. | 1020 // Test that bitrate cannot be set for CBR codecs. |
1019 // Bitrate is ignored if it is higher than the fixed bitrate. | 1021 // Bitrate is ignored if it is higher than the fixed bitrate. |
1020 // Bitrate less then the fixed bitrate is an error. | 1022 // Bitrate less then the fixed bitrate is an error. |
1021 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { | 1023 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { |
1022 EXPECT_TRUE(SetupSendStream()); | 1024 EXPECT_TRUE(SetupSendStream()); |
1023 | 1025 |
1024 // PCMU, default bitrate == 64000. | 1026 // PCMU, default bitrate == 64000. |
1025 SetSendParameters(send_parameters_); | 1027 SetSendParameters(send_parameters_); |
1026 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1028 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); |
1027 | 1029 |
1028 send_parameters_.max_bandwidth_bps = 128000; | 1030 send_parameters_.max_bandwidth_bps = 128000; |
1029 SetSendParameters(send_parameters_); | 1031 SetSendParameters(send_parameters_); |
1030 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1032 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); |
1031 | 1033 |
1032 send_parameters_.max_bandwidth_bps = 128; | 1034 send_parameters_.max_bandwidth_bps = 128; |
1033 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 1035 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
1034 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1036 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); |
1035 } | 1037 } |
1036 | 1038 |
1037 // Test that the per-stream bitrate limit and the global | 1039 // Test that the per-stream bitrate limit and the global |
1038 // bitrate limit both apply. | 1040 // bitrate limit both apply. |
1039 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { | 1041 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { |
1040 EXPECT_TRUE(SetupSendStream()); | 1042 EXPECT_TRUE(SetupSendStream()); |
1041 | 1043 |
1042 // opus, default bitrate == 64000. | 1044 // opus, default bitrate == 64000. |
1043 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); | 1045 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); |
1044 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); | 1046 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); |
1045 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); | 1047 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); |
1046 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); | 1048 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); |
1047 | 1049 |
1048 // CBR codecs allow both maximums to exceed the bitrate. | 1050 // CBR codecs allow both maximums to exceed the bitrate. |
1049 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); | 1051 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); |
1050 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); | 1052 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); |
1051 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); | 1053 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); |
1052 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); | 1054 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); |
1053 | 1055 |
1054 // CBR codecs don't allow per stream maximums to be too low. | 1056 // CBR codecs don't allow per stream maximums to be too low. |
1055 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000); | 1057 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000); |
1056 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000); | 1058 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000); |
1057 } | 1059 } |
1058 | 1060 |
1059 // Test that an attempt to set RtpParameters for a stream that does not exist | 1061 // Test that an attempt to set RtpParameters for a stream that does not exist |
1060 // fails. | 1062 // fails. |
1061 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) { | 1063 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) { |
1062 EXPECT_TRUE(SetupChannel()); | 1064 EXPECT_TRUE(SetupChannel()); |
1063 webrtc::RtpParameters nonexistent_parameters = | 1065 webrtc::RtpParameters nonexistent_parameters = |
1064 channel_->GetRtpSendParameters(kSsrc1); | 1066 channel_->GetRtpSendParameters(kSsrcX); |
1065 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); | 1067 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); |
1066 | 1068 |
1067 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); | 1069 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); |
1068 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, nonexistent_parameters)); | 1070 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrcX, nonexistent_parameters)); |
1069 } | 1071 } |
1070 | 1072 |
1071 TEST_F(WebRtcVoiceEngineTestFake, | 1073 TEST_F(WebRtcVoiceEngineTestFake, |
1072 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) { | 1074 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) { |
1073 // This test verifies that setting RtpParameters succeeds only if | 1075 // This test verifies that setting RtpParameters succeeds only if |
1074 // the structure contains exactly one encoding. | 1076 // the structure contains exactly one encoding. |
1075 // TODO(skvlad): Update this test when we start supporting setting parameters | 1077 // TODO(skvlad): Update this test when we start supporting setting parameters |
1076 // for each encoding individually. | 1078 // for each encoding individually. |
1077 | 1079 |
1078 EXPECT_TRUE(SetupSendStream()); | 1080 EXPECT_TRUE(SetupSendStream()); |
1079 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1081 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrcX); |
1080 // Two or more encodings should result in failure. | 1082 // Two or more encodings should result in failure. |
1081 parameters.encodings.push_back(webrtc::RtpEncodingParameters()); | 1083 parameters.encodings.push_back(webrtc::RtpEncodingParameters()); |
1082 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1084 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrcX, parameters)); |
1083 // Zero encodings should also fail. | 1085 // Zero encodings should also fail. |
1084 parameters.encodings.clear(); | 1086 parameters.encodings.clear(); |
1085 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1087 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrcX, parameters)); |
1086 } | 1088 } |
1087 | 1089 |
1088 // Changing the SSRC through RtpParameters is not allowed. | 1090 // Changing the SSRC through RtpParameters is not allowed. |
1089 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) { | 1091 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) { |
1090 EXPECT_TRUE(SetupSendStream()); | 1092 EXPECT_TRUE(SetupSendStream()); |
1091 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1093 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrcX); |
1092 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef); | 1094 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef); |
1093 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1095 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrcX, parameters)); |
1094 } | 1096 } |
1095 | 1097 |
1096 // Test that a stream will not be sending if its encoding is made | 1098 // Test that a stream will not be sending if its encoding is made |
1097 // inactive through SetRtpSendParameters. | 1099 // inactive through SetRtpSendParameters. |
1098 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { | 1100 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { |
1099 EXPECT_TRUE(SetupSendStream()); | 1101 EXPECT_TRUE(SetupSendStream()); |
1100 SetSend(true); | 1102 SetSend(true); |
1101 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 1103 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
1102 // Get current parameters and change "active" to false. | 1104 // Get current parameters and change "active" to false. |
1103 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); | 1105 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrcX); |
1104 ASSERT_EQ(1u, parameters.encodings.size()); | 1106 ASSERT_EQ(1u, parameters.encodings.size()); |
1105 ASSERT_TRUE(parameters.encodings[0].active); | 1107 ASSERT_TRUE(parameters.encodings[0].active); |
1106 parameters.encodings[0].active = false; | 1108 parameters.encodings[0].active = false; |
1107 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1109 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrcX, parameters)); |
1108 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 1110 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
1109 | 1111 |
1110 // Now change it back to active and verify we resume sending. | 1112 // Now change it back to active and verify we resume sending. |
1111 parameters.encodings[0].active = true; | 1113 parameters.encodings[0].active = true; |
1112 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); | 1114 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrcX, parameters)); |
1113 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 1115 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
1114 } | 1116 } |
1115 | 1117 |
1116 // Test that SetRtpSendParameters configures the correct encoding channel for | 1118 // Test that SetRtpSendParameters configures the correct encoding channel for |
1117 // each SSRC. | 1119 // each SSRC. |
1118 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { | 1120 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { |
1119 SetupForMultiSendStream(); | 1121 SetupForMultiSendStream(); |
1120 // Create send streams. | 1122 // Create send streams. |
1121 for (uint32_t ssrc : kSsrcs4) { | 1123 for (uint32_t ssrc : kSsrcs4) { |
1122 EXPECT_TRUE( | 1124 EXPECT_TRUE( |
1123 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); | 1125 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); |
(...skipping 19 matching lines...) Expand all Loading... |
1143 } | 1145 } |
1144 | 1146 |
1145 // Test that GetRtpSendParameters returns the currently configured codecs. | 1147 // Test that GetRtpSendParameters returns the currently configured codecs. |
1146 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { | 1148 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { |
1147 EXPECT_TRUE(SetupSendStream()); | 1149 EXPECT_TRUE(SetupSendStream()); |
1148 cricket::AudioSendParameters parameters; | 1150 cricket::AudioSendParameters parameters; |
1149 parameters.codecs.push_back(kIsacCodec); | 1151 parameters.codecs.push_back(kIsacCodec); |
1150 parameters.codecs.push_back(kPcmuCodec); | 1152 parameters.codecs.push_back(kPcmuCodec); |
1151 SetSendParameters(parameters); | 1153 SetSendParameters(parameters); |
1152 | 1154 |
1153 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); | 1155 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrcX); |
1154 ASSERT_EQ(2u, rtp_parameters.codecs.size()); | 1156 ASSERT_EQ(2u, rtp_parameters.codecs.size()); |
1155 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); | 1157 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); |
1156 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); | 1158 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); |
1157 } | 1159 } |
1158 | 1160 |
1159 // Test that GetRtpSendParameters returns an SSRC. | 1161 // Test that GetRtpSendParameters returns an SSRC. |
1160 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) { | 1162 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) { |
1161 EXPECT_TRUE(SetupSendStream()); | 1163 EXPECT_TRUE(SetupSendStream()); |
1162 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); | 1164 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrcX); |
1163 ASSERT_EQ(1u, rtp_parameters.encodings.size()); | 1165 ASSERT_EQ(1u, rtp_parameters.encodings.size()); |
1164 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); | 1166 EXPECT_EQ(kSsrcX, rtp_parameters.encodings[0].ssrc); |
1165 } | 1167 } |
1166 | 1168 |
1167 // Test that if we set/get parameters multiple times, we get the same results. | 1169 // Test that if we set/get parameters multiple times, we get the same results. |
1168 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) { | 1170 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) { |
1169 EXPECT_TRUE(SetupSendStream()); | 1171 EXPECT_TRUE(SetupSendStream()); |
1170 cricket::AudioSendParameters parameters; | 1172 cricket::AudioSendParameters parameters; |
1171 parameters.codecs.push_back(kIsacCodec); | 1173 parameters.codecs.push_back(kIsacCodec); |
1172 parameters.codecs.push_back(kPcmuCodec); | 1174 parameters.codecs.push_back(kPcmuCodec); |
1173 SetSendParameters(parameters); | 1175 SetSendParameters(parameters); |
1174 | 1176 |
1175 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrc1); | 1177 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrcX); |
1176 | 1178 |
1177 // We should be able to set the params we just got. | 1179 // We should be able to set the params we just got. |
1178 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, initial_params)); | 1180 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrcX, initial_params)); |
1179 | 1181 |
1180 // ... And this shouldn't change the params returned by GetRtpSendParameters. | 1182 // ... And this shouldn't change the params returned by GetRtpSendParameters. |
1181 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrc1); | 1183 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrcX); |
1182 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrc1)); | 1184 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrcX)); |
1183 } | 1185 } |
1184 | 1186 |
1185 // Test that GetRtpReceiveParameters returns the currently configured codecs. | 1187 // Test that GetRtpReceiveParameters returns the currently configured codecs. |
1186 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) { | 1188 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) { |
1187 EXPECT_TRUE(SetupRecvStream()); | 1189 EXPECT_TRUE(SetupRecvStream()); |
1188 cricket::AudioRecvParameters parameters; | 1190 cricket::AudioRecvParameters parameters; |
1189 parameters.codecs.push_back(kIsacCodec); | 1191 parameters.codecs.push_back(kIsacCodec); |
1190 parameters.codecs.push_back(kPcmuCodec); | 1192 parameters.codecs.push_back(kPcmuCodec); |
1191 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1193 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1192 | 1194 |
1193 webrtc::RtpParameters rtp_parameters = | 1195 webrtc::RtpParameters rtp_parameters = |
1194 channel_->GetRtpReceiveParameters(kSsrc1); | 1196 channel_->GetRtpReceiveParameters(kSsrcX); |
1195 ASSERT_EQ(2u, rtp_parameters.codecs.size()); | 1197 ASSERT_EQ(2u, rtp_parameters.codecs.size()); |
1196 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); | 1198 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); |
1197 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); | 1199 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); |
1198 } | 1200 } |
1199 | 1201 |
1200 // Test that GetRtpReceiveParameters returns an SSRC. | 1202 // Test that GetRtpReceiveParameters returns an SSRC. |
1201 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) { | 1203 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) { |
1202 EXPECT_TRUE(SetupRecvStream()); | 1204 EXPECT_TRUE(SetupRecvStream()); |
1203 webrtc::RtpParameters rtp_parameters = | 1205 webrtc::RtpParameters rtp_parameters = |
1204 channel_->GetRtpReceiveParameters(kSsrc1); | 1206 channel_->GetRtpReceiveParameters(kSsrcX); |
1205 ASSERT_EQ(1u, rtp_parameters.encodings.size()); | 1207 ASSERT_EQ(1u, rtp_parameters.encodings.size()); |
1206 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); | 1208 EXPECT_EQ(kSsrcX, rtp_parameters.encodings[0].ssrc); |
1207 } | 1209 } |
1208 | 1210 |
1209 // Test that if we set/get parameters multiple times, we get the same results. | 1211 // Test that if we set/get parameters multiple times, we get the same results. |
1210 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) { | 1212 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) { |
1211 EXPECT_TRUE(SetupRecvStream()); | 1213 EXPECT_TRUE(SetupRecvStream()); |
1212 cricket::AudioRecvParameters parameters; | 1214 cricket::AudioRecvParameters parameters; |
1213 parameters.codecs.push_back(kIsacCodec); | 1215 parameters.codecs.push_back(kIsacCodec); |
1214 parameters.codecs.push_back(kPcmuCodec); | 1216 parameters.codecs.push_back(kPcmuCodec); |
1215 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1217 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1216 | 1218 |
1217 webrtc::RtpParameters initial_params = | 1219 webrtc::RtpParameters initial_params = |
1218 channel_->GetRtpReceiveParameters(kSsrc1); | 1220 channel_->GetRtpReceiveParameters(kSsrcX); |
1219 | 1221 |
1220 // We should be able to set the params we just got. | 1222 // We should be able to set the params we just got. |
1221 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrc1, initial_params)); | 1223 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrcX, initial_params)); |
1222 | 1224 |
1223 // ... And this shouldn't change the params returned by | 1225 // ... And this shouldn't change the params returned by |
1224 // GetRtpReceiveParameters. | 1226 // GetRtpReceiveParameters. |
1225 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrc1); | 1227 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrcX); |
1226 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrc1)); | 1228 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrcX)); |
1227 } | 1229 } |
1228 | 1230 |
1229 // Test that we apply codecs properly. | 1231 // Test that we apply codecs properly. |
1230 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { | 1232 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { |
1231 EXPECT_TRUE(SetupSendStream()); | 1233 EXPECT_TRUE(SetupSendStream()); |
1232 cricket::AudioSendParameters parameters; | 1234 cricket::AudioSendParameters parameters; |
1233 parameters.codecs.push_back(kIsacCodec); | 1235 parameters.codecs.push_back(kIsacCodec); |
1234 parameters.codecs.push_back(kPcmuCodec); | 1236 parameters.codecs.push_back(kPcmuCodec); |
1235 parameters.codecs.push_back(kCn8000Codec); | 1237 parameters.codecs.push_back(kCn8000Codec); |
1236 parameters.codecs[0].id = 96; | 1238 parameters.codecs[0].id = 96; |
1237 parameters.codecs[0].bitrate = 48000; | 1239 parameters.codecs[0].bitrate = 48000; |
1238 const int initial_num = call_.GetNumCreatedSendStreams(); | 1240 const int initial_num = call_.GetNumCreatedSendStreams(); |
1239 SetSendParameters(parameters); | 1241 SetSendParameters(parameters); |
1240 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1242 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1241 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1243 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
1242 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1244 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
1243 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); | 1245 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); |
1244 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1246 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
1245 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1247 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
1246 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1248 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
1247 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 1249 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); |
1248 EXPECT_FALSE(channel_->CanInsertDtmf()); | 1250 EXPECT_FALSE(channel_->CanInsertDtmf()); |
1249 } | 1251 } |
1250 | 1252 |
1251 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried | 1253 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried |
(...skipping 14 matching lines...) Expand all Loading... |
1266 SetSendParameters(parameters); | 1268 SetSendParameters(parameters); |
1267 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1269 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1268 } | 1270 } |
1269 | 1271 |
1270 // Verify that G722 is set with 16000 samples per second to WebRTC. | 1272 // Verify that G722 is set with 16000 samples per second to WebRTC. |
1271 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { | 1273 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { |
1272 EXPECT_TRUE(SetupSendStream()); | 1274 EXPECT_TRUE(SetupSendStream()); |
1273 cricket::AudioSendParameters parameters; | 1275 cricket::AudioSendParameters parameters; |
1274 parameters.codecs.push_back(kG722CodecSdp); | 1276 parameters.codecs.push_back(kG722CodecSdp); |
1275 SetSendParameters(parameters); | 1277 SetSendParameters(parameters); |
1276 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1278 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1277 EXPECT_STREQ("G722", gcodec.plname); | 1279 EXPECT_STREQ("G722", gcodec.plname); |
1278 EXPECT_EQ(1, gcodec.channels); | 1280 EXPECT_EQ(1, gcodec.channels); |
1279 EXPECT_EQ(16000, gcodec.plfreq); | 1281 EXPECT_EQ(16000, gcodec.plfreq); |
1280 } | 1282 } |
1281 | 1283 |
1282 // Test that if clockrate is not 48000 for opus, we fail. | 1284 // Test that if clockrate is not 48000 for opus, we fail. |
1283 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { | 1285 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { |
1284 EXPECT_TRUE(SetupSendStream()); | 1286 EXPECT_TRUE(SetupSendStream()); |
1285 cricket::AudioSendParameters parameters; | 1287 cricket::AudioSendParameters parameters; |
1286 parameters.codecs.push_back(kOpusCodec); | 1288 parameters.codecs.push_back(kOpusCodec); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1343 } | 1345 } |
1344 | 1346 |
1345 // Test that with bitrate=0 and no stereo, | 1347 // Test that with bitrate=0 and no stereo, |
1346 // channels and bitrate are 1 and 32000. | 1348 // channels and bitrate are 1 and 32000. |
1347 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { | 1349 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { |
1348 EXPECT_TRUE(SetupSendStream()); | 1350 EXPECT_TRUE(SetupSendStream()); |
1349 cricket::AudioSendParameters parameters; | 1351 cricket::AudioSendParameters parameters; |
1350 parameters.codecs.push_back(kOpusCodec); | 1352 parameters.codecs.push_back(kOpusCodec); |
1351 parameters.codecs[0].bitrate = 0; | 1353 parameters.codecs[0].bitrate = 0; |
1352 SetSendParameters(parameters); | 1354 SetSendParameters(parameters); |
1353 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1355 CheckSendCodec(kSsrcX, "opus", 1, 32000); |
1354 } | 1356 } |
1355 | 1357 |
1356 // Test that with bitrate=0 and stereo=0, | 1358 // Test that with bitrate=0 and stereo=0, |
1357 // channels and bitrate are 1 and 32000. | 1359 // channels and bitrate are 1 and 32000. |
1358 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { | 1360 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { |
1359 EXPECT_TRUE(SetupSendStream()); | 1361 EXPECT_TRUE(SetupSendStream()); |
1360 cricket::AudioSendParameters parameters; | 1362 cricket::AudioSendParameters parameters; |
1361 parameters.codecs.push_back(kOpusCodec); | 1363 parameters.codecs.push_back(kOpusCodec); |
1362 parameters.codecs[0].bitrate = 0; | 1364 parameters.codecs[0].bitrate = 0; |
1363 parameters.codecs[0].params["stereo"] = "0"; | 1365 parameters.codecs[0].params["stereo"] = "0"; |
1364 SetSendParameters(parameters); | 1366 SetSendParameters(parameters); |
1365 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1367 CheckSendCodec(kSsrcX, "opus", 1, 32000); |
1366 } | 1368 } |
1367 | 1369 |
1368 // Test that with bitrate=invalid and stereo=0, | 1370 // Test that with bitrate=invalid and stereo=0, |
1369 // channels and bitrate are 1 and 32000. | 1371 // channels and bitrate are 1 and 32000. |
1370 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { | 1372 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { |
1371 EXPECT_TRUE(SetupSendStream()); | 1373 EXPECT_TRUE(SetupSendStream()); |
1372 cricket::AudioSendParameters parameters; | 1374 cricket::AudioSendParameters parameters; |
1373 parameters.codecs.push_back(kOpusCodec); | 1375 parameters.codecs.push_back(kOpusCodec); |
1374 parameters.codecs[0].params["stereo"] = "0"; | 1376 parameters.codecs[0].params["stereo"] = "0"; |
1375 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1377 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1376 parameters.codecs[0].bitrate = 5999; | 1378 parameters.codecs[0].bitrate = 5999; |
1377 SetSendParameters(parameters); | 1379 SetSendParameters(parameters); |
1378 CheckSendCodec(kSsrc1, "opus", 1, 6000); | 1380 CheckSendCodec(kSsrcX, "opus", 1, 6000); |
1379 | 1381 |
1380 parameters.codecs[0].bitrate = 510001; | 1382 parameters.codecs[0].bitrate = 510001; |
1381 SetSendParameters(parameters); | 1383 SetSendParameters(parameters); |
1382 CheckSendCodec(kSsrc1, "opus", 1, 510000); | 1384 CheckSendCodec(kSsrcX, "opus", 1, 510000); |
1383 } | 1385 } |
1384 | 1386 |
1385 // Test that with bitrate=0 and stereo=1, | 1387 // Test that with bitrate=0 and stereo=1, |
1386 // channels and bitrate are 2 and 64000. | 1388 // channels and bitrate are 2 and 64000. |
1387 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { | 1389 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { |
1388 EXPECT_TRUE(SetupSendStream()); | 1390 EXPECT_TRUE(SetupSendStream()); |
1389 cricket::AudioSendParameters parameters; | 1391 cricket::AudioSendParameters parameters; |
1390 parameters.codecs.push_back(kOpusCodec); | 1392 parameters.codecs.push_back(kOpusCodec); |
1391 parameters.codecs[0].bitrate = 0; | 1393 parameters.codecs[0].bitrate = 0; |
1392 parameters.codecs[0].params["stereo"] = "1"; | 1394 parameters.codecs[0].params["stereo"] = "1"; |
1393 SetSendParameters(parameters); | 1395 SetSendParameters(parameters); |
1394 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1396 CheckSendCodec(kSsrcX, "opus", 2, 64000); |
1395 } | 1397 } |
1396 | 1398 |
1397 // Test that with bitrate=invalid and stereo=1, | 1399 // Test that with bitrate=invalid and stereo=1, |
1398 // channels and bitrate are 2 and 64000. | 1400 // channels and bitrate are 2 and 64000. |
1399 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { | 1401 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { |
1400 EXPECT_TRUE(SetupSendStream()); | 1402 EXPECT_TRUE(SetupSendStream()); |
1401 cricket::AudioSendParameters parameters; | 1403 cricket::AudioSendParameters parameters; |
1402 parameters.codecs.push_back(kOpusCodec); | 1404 parameters.codecs.push_back(kOpusCodec); |
1403 parameters.codecs[0].params["stereo"] = "1"; | 1405 parameters.codecs[0].params["stereo"] = "1"; |
1404 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1406 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1405 parameters.codecs[0].bitrate = 5999; | 1407 parameters.codecs[0].bitrate = 5999; |
1406 SetSendParameters(parameters); | 1408 SetSendParameters(parameters); |
1407 CheckSendCodec(kSsrc1, "opus", 2, 6000); | 1409 CheckSendCodec(kSsrcX, "opus", 2, 6000); |
1408 | 1410 |
1409 parameters.codecs[0].bitrate = 510001; | 1411 parameters.codecs[0].bitrate = 510001; |
1410 SetSendParameters(parameters); | 1412 SetSendParameters(parameters); |
1411 CheckSendCodec(kSsrc1, "opus", 2, 510000); | 1413 CheckSendCodec(kSsrcX, "opus", 2, 510000); |
1412 } | 1414 } |
1413 | 1415 |
1414 // Test that with bitrate=N and stereo unset, | 1416 // Test that with bitrate=N and stereo unset, |
1415 // channels and bitrate are 1 and N. | 1417 // channels and bitrate are 1 and N. |
1416 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { | 1418 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { |
1417 EXPECT_TRUE(SetupSendStream()); | 1419 EXPECT_TRUE(SetupSendStream()); |
1418 cricket::AudioSendParameters parameters; | 1420 cricket::AudioSendParameters parameters; |
1419 parameters.codecs.push_back(kOpusCodec); | 1421 parameters.codecs.push_back(kOpusCodec); |
1420 parameters.codecs[0].bitrate = 96000; | 1422 parameters.codecs[0].bitrate = 96000; |
1421 SetSendParameters(parameters); | 1423 SetSendParameters(parameters); |
1422 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1424 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1423 EXPECT_EQ(111, gcodec.pltype); | 1425 EXPECT_EQ(111, gcodec.pltype); |
1424 EXPECT_EQ(96000, gcodec.rate); | 1426 EXPECT_EQ(96000, gcodec.rate); |
1425 EXPECT_STREQ("opus", gcodec.plname); | 1427 EXPECT_STREQ("opus", gcodec.plname); |
1426 EXPECT_EQ(1, gcodec.channels); | 1428 EXPECT_EQ(1, gcodec.channels); |
1427 EXPECT_EQ(48000, gcodec.plfreq); | 1429 EXPECT_EQ(48000, gcodec.plfreq); |
1428 } | 1430 } |
1429 | 1431 |
1430 // Test that with bitrate=N and stereo=0, | 1432 // Test that with bitrate=N and stereo=0, |
1431 // channels and bitrate are 1 and N. | 1433 // channels and bitrate are 1 and N. |
1432 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { | 1434 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { |
1433 EXPECT_TRUE(SetupSendStream()); | 1435 EXPECT_TRUE(SetupSendStream()); |
1434 cricket::AudioSendParameters parameters; | 1436 cricket::AudioSendParameters parameters; |
1435 parameters.codecs.push_back(kOpusCodec); | 1437 parameters.codecs.push_back(kOpusCodec); |
1436 parameters.codecs[0].bitrate = 30000; | 1438 parameters.codecs[0].bitrate = 30000; |
1437 parameters.codecs[0].params["stereo"] = "0"; | 1439 parameters.codecs[0].params["stereo"] = "0"; |
1438 SetSendParameters(parameters); | 1440 SetSendParameters(parameters); |
1439 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1441 CheckSendCodec(kSsrcX, "opus", 1, 30000); |
1440 } | 1442 } |
1441 | 1443 |
1442 // Test that with bitrate=N and without any parameters, | 1444 // Test that with bitrate=N and without any parameters, |
1443 // channels and bitrate are 1 and N. | 1445 // channels and bitrate are 1 and N. |
1444 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { | 1446 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { |
1445 EXPECT_TRUE(SetupSendStream()); | 1447 EXPECT_TRUE(SetupSendStream()); |
1446 cricket::AudioSendParameters parameters; | 1448 cricket::AudioSendParameters parameters; |
1447 parameters.codecs.push_back(kOpusCodec); | 1449 parameters.codecs.push_back(kOpusCodec); |
1448 parameters.codecs[0].bitrate = 30000; | 1450 parameters.codecs[0].bitrate = 30000; |
1449 SetSendParameters(parameters); | 1451 SetSendParameters(parameters); |
1450 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1452 CheckSendCodec(kSsrcX, "opus", 1, 30000); |
1451 } | 1453 } |
1452 | 1454 |
1453 // Test that with bitrate=N and stereo=1, | 1455 // Test that with bitrate=N and stereo=1, |
1454 // channels and bitrate are 2 and N. | 1456 // channels and bitrate are 2 and N. |
1455 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { | 1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { |
1456 EXPECT_TRUE(SetupSendStream()); | 1458 EXPECT_TRUE(SetupSendStream()); |
1457 cricket::AudioSendParameters parameters; | 1459 cricket::AudioSendParameters parameters; |
1458 parameters.codecs.push_back(kOpusCodec); | 1460 parameters.codecs.push_back(kOpusCodec); |
1459 parameters.codecs[0].bitrate = 30000; | 1461 parameters.codecs[0].bitrate = 30000; |
1460 parameters.codecs[0].params["stereo"] = "1"; | 1462 parameters.codecs[0].params["stereo"] = "1"; |
1461 SetSendParameters(parameters); | 1463 SetSendParameters(parameters); |
1462 CheckSendCodec(kSsrc1, "opus", 2, 30000); | 1464 CheckSendCodec(kSsrcX, "opus", 2, 30000); |
1463 } | 1465 } |
1464 | 1466 |
1465 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. | 1467 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. |
1466 // Also test that the "maxaveragebitrate" can't be set to values outside the | 1468 // Also test that the "maxaveragebitrate" can't be set to values outside the |
1467 // range of 6000 and 510000 | 1469 // range of 6000 and 510000 |
1468 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { | 1470 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { |
1469 EXPECT_TRUE(SetupSendStream()); | 1471 EXPECT_TRUE(SetupSendStream()); |
1470 cricket::AudioSendParameters parameters; | 1472 cricket::AudioSendParameters parameters; |
1471 parameters.codecs.push_back(kOpusCodec); | 1473 parameters.codecs.push_back(kOpusCodec); |
1472 parameters.codecs[0].bitrate = 30000; | 1474 parameters.codecs[0].bitrate = 30000; |
1473 // Ignore if less than 6000. | 1475 // Ignore if less than 6000. |
1474 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; | 1476 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; |
1475 SetSendParameters(parameters); | 1477 SetSendParameters(parameters); |
1476 EXPECT_EQ(6000, GetCodecBitrate(kSsrc1)); | 1478 EXPECT_EQ(6000, GetCodecBitrate(kSsrcX)); |
1477 | 1479 |
1478 // Ignore if larger than 510000. | 1480 // Ignore if larger than 510000. |
1479 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; | 1481 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; |
1480 SetSendParameters(parameters); | 1482 SetSendParameters(parameters); |
1481 EXPECT_EQ(510000, GetCodecBitrate(kSsrc1)); | 1483 EXPECT_EQ(510000, GetCodecBitrate(kSsrcX)); |
1482 | 1484 |
1483 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; | 1485 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; |
1484 SetSendParameters(parameters); | 1486 SetSendParameters(parameters); |
1485 EXPECT_EQ(200000, GetCodecBitrate(kSsrc1)); | 1487 EXPECT_EQ(200000, GetCodecBitrate(kSsrcX)); |
1486 } | 1488 } |
1487 | 1489 |
1488 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { | 1490 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { |
1489 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1491 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
1490 200000); | 1492 200000); |
1491 } | 1493 } |
1492 | 1494 |
1493 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { | 1495 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { |
1494 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 1496 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
1495 } | 1497 } |
(...skipping 21 matching lines...) Expand all Loading... |
1517 } | 1519 } |
1518 | 1520 |
1519 // Test that we can enable NACK with opus as caller. | 1521 // Test that we can enable NACK with opus as caller. |
1520 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { | 1522 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { |
1521 EXPECT_TRUE(SetupSendStream()); | 1523 EXPECT_TRUE(SetupSendStream()); |
1522 cricket::AudioSendParameters parameters; | 1524 cricket::AudioSendParameters parameters; |
1523 parameters.codecs.push_back(kOpusCodec); | 1525 parameters.codecs.push_back(kOpusCodec); |
1524 parameters.codecs[0].AddFeedbackParam( | 1526 parameters.codecs[0].AddFeedbackParam( |
1525 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1527 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1526 cricket::kParamValueEmpty)); | 1528 cricket::kParamValueEmpty)); |
1527 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1529 EXPECT_EQ(0, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1528 SetSendParameters(parameters); | 1530 SetSendParameters(parameters); |
1529 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1531 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1530 } | 1532 } |
1531 | 1533 |
1532 // Test that we can enable NACK with opus as callee. | 1534 // Test that we can enable NACK with opus as callee. |
1533 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { | 1535 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { |
1534 EXPECT_TRUE(SetupRecvStream()); | 1536 EXPECT_TRUE(SetupRecvStream()); |
1535 cricket::AudioSendParameters parameters; | 1537 cricket::AudioSendParameters parameters; |
1536 parameters.codecs.push_back(kOpusCodec); | 1538 parameters.codecs.push_back(kOpusCodec); |
1537 parameters.codecs[0].AddFeedbackParam( | 1539 parameters.codecs[0].AddFeedbackParam( |
1538 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1540 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1539 cricket::kParamValueEmpty)); | 1541 cricket::kParamValueEmpty)); |
1540 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1542 EXPECT_EQ(0, GetRecvStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1541 SetSendParameters(parameters); | 1543 SetSendParameters(parameters); |
1542 // NACK should be enabled even with no send stream. | 1544 // NACK should be enabled even with no send stream. |
1543 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1545 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1544 | 1546 |
1545 EXPECT_TRUE(channel_->AddSendStream( | 1547 EXPECT_TRUE(channel_->AddSendStream( |
1546 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1548 cricket::StreamParams::CreateLegacy(kSsrcX))); |
1547 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1549 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1548 } | 1550 } |
1549 | 1551 |
1550 // Test that we can enable NACK on receive streams. | 1552 // Test that we can enable NACK on receive streams. |
1551 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { | 1553 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { |
1552 EXPECT_TRUE(SetupSendStream()); | 1554 EXPECT_TRUE(SetupSendStream()); |
1553 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1555 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
1554 cricket::AudioSendParameters parameters; | 1556 cricket::AudioSendParameters parameters; |
1555 parameters.codecs.push_back(kOpusCodec); | 1557 parameters.codecs.push_back(kOpusCodec); |
1556 parameters.codecs[0].AddFeedbackParam( | 1558 parameters.codecs[0].AddFeedbackParam( |
1557 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1559 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1558 cricket::kParamValueEmpty)); | 1560 cricket::kParamValueEmpty)); |
1559 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1561 EXPECT_EQ(0, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1560 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1562 EXPECT_EQ(0, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); |
1561 SetSendParameters(parameters); | 1563 SetSendParameters(parameters); |
1562 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1564 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1563 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1565 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); |
1564 } | 1566 } |
1565 | 1567 |
1566 // Test that we can disable NACK. | 1568 // Test that we can disable NACK. |
1567 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { | 1569 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { |
1568 EXPECT_TRUE(SetupSendStream()); | 1570 EXPECT_TRUE(SetupSendStream()); |
1569 cricket::AudioSendParameters parameters; | 1571 cricket::AudioSendParameters parameters; |
1570 parameters.codecs.push_back(kOpusCodec); | 1572 parameters.codecs.push_back(kOpusCodec); |
1571 parameters.codecs[0].AddFeedbackParam( | 1573 parameters.codecs[0].AddFeedbackParam( |
1572 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1574 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1573 cricket::kParamValueEmpty)); | 1575 cricket::kParamValueEmpty)); |
1574 SetSendParameters(parameters); | 1576 SetSendParameters(parameters); |
1575 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1577 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1576 | 1578 |
1577 parameters.codecs.clear(); | 1579 parameters.codecs.clear(); |
1578 parameters.codecs.push_back(kOpusCodec); | 1580 parameters.codecs.push_back(kOpusCodec); |
1579 SetSendParameters(parameters); | 1581 SetSendParameters(parameters); |
1580 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1582 EXPECT_EQ(0, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1581 } | 1583 } |
1582 | 1584 |
1583 // Test that we can disable NACK on receive streams. | 1585 // Test that we can disable NACK on receive streams. |
1584 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { | 1586 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { |
1585 EXPECT_TRUE(SetupSendStream()); | 1587 EXPECT_TRUE(SetupSendStream()); |
1586 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1588 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
1587 cricket::AudioSendParameters parameters; | 1589 cricket::AudioSendParameters parameters; |
1588 parameters.codecs.push_back(kOpusCodec); | 1590 parameters.codecs.push_back(kOpusCodec); |
1589 parameters.codecs[0].AddFeedbackParam( | 1591 parameters.codecs[0].AddFeedbackParam( |
1590 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1592 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1591 cricket::kParamValueEmpty)); | 1593 cricket::kParamValueEmpty)); |
1592 SetSendParameters(parameters); | 1594 SetSendParameters(parameters); |
1593 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1595 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1594 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1596 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); |
1595 | 1597 |
1596 parameters.codecs.clear(); | 1598 parameters.codecs.clear(); |
1597 parameters.codecs.push_back(kOpusCodec); | 1599 parameters.codecs.push_back(kOpusCodec); |
1598 SetSendParameters(parameters); | 1600 SetSendParameters(parameters); |
1599 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1601 EXPECT_EQ(0, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1600 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1602 EXPECT_EQ(0, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); |
1601 } | 1603 } |
1602 | 1604 |
1603 // Test that NACK is enabled on a new receive stream. | 1605 // Test that NACK is enabled on a new receive stream. |
1604 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { | 1606 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { |
1605 EXPECT_TRUE(SetupSendStream()); | 1607 EXPECT_TRUE(SetupSendStream()); |
1606 cricket::AudioSendParameters parameters; | 1608 cricket::AudioSendParameters parameters; |
1607 parameters.codecs.push_back(kIsacCodec); | 1609 parameters.codecs.push_back(kIsacCodec); |
1608 parameters.codecs.push_back(kCn16000Codec); | 1610 parameters.codecs.push_back(kCn16000Codec); |
1609 parameters.codecs[0].AddFeedbackParam( | 1611 parameters.codecs[0].AddFeedbackParam( |
1610 cricket::FeedbackParam(cricket::kRtcpFbParamNack, | 1612 cricket::FeedbackParam(cricket::kRtcpFbParamNack, |
1611 cricket::kParamValueEmpty)); | 1613 cricket::kParamValueEmpty)); |
1612 SetSendParameters(parameters); | 1614 SetSendParameters(parameters); |
1613 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1615 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); |
1614 | 1616 |
1615 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1617 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
1616 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1618 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); |
1617 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 1619 EXPECT_TRUE(AddRecvStream(kSsrcZ)); |
1618 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); | 1620 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcZ).rtp.nack.rtp_history_ms); |
1619 } | 1621 } |
1620 | 1622 |
1621 // Test that without useinbandfec, Opus FEC is off. | 1623 // Test that without useinbandfec, Opus FEC is off. |
1622 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { | 1624 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { |
1623 EXPECT_TRUE(SetupSendStream()); | 1625 EXPECT_TRUE(SetupSendStream()); |
1624 cricket::AudioSendParameters parameters; | 1626 cricket::AudioSendParameters parameters; |
1625 parameters.codecs.push_back(kOpusCodec); | 1627 parameters.codecs.push_back(kOpusCodec); |
1626 SetSendParameters(parameters); | 1628 SetSendParameters(parameters); |
1627 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1629 EXPECT_FALSE(GetCodecFec(kSsrcX)); |
1628 } | 1630 } |
1629 | 1631 |
1630 // Test that with useinbandfec=0, Opus FEC is off. | 1632 // Test that with useinbandfec=0, Opus FEC is off. |
1631 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { | 1633 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { |
1632 EXPECT_TRUE(SetupSendStream()); | 1634 EXPECT_TRUE(SetupSendStream()); |
1633 cricket::AudioSendParameters parameters; | 1635 cricket::AudioSendParameters parameters; |
1634 parameters.codecs.push_back(kOpusCodec); | 1636 parameters.codecs.push_back(kOpusCodec); |
1635 parameters.codecs[0].bitrate = 0; | 1637 parameters.codecs[0].bitrate = 0; |
1636 parameters.codecs[0].params["useinbandfec"] = "0"; | 1638 parameters.codecs[0].params["useinbandfec"] = "0"; |
1637 SetSendParameters(parameters); | 1639 SetSendParameters(parameters); |
1638 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1640 CheckSendCodec(kSsrcX, "opus", 1, 32000); |
1639 } | 1641 } |
1640 | 1642 |
1641 // Test that with useinbandfec=1, Opus FEC is on. | 1643 // Test that with useinbandfec=1, Opus FEC is on. |
1642 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { | 1644 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { |
1643 EXPECT_TRUE(SetupSendStream()); | 1645 EXPECT_TRUE(SetupSendStream()); |
1644 cricket::AudioSendParameters parameters; | 1646 cricket::AudioSendParameters parameters; |
1645 parameters.codecs.push_back(kOpusCodec); | 1647 parameters.codecs.push_back(kOpusCodec); |
1646 parameters.codecs[0].bitrate = 0; | 1648 parameters.codecs[0].bitrate = 0; |
1647 parameters.codecs[0].params["useinbandfec"] = "1"; | 1649 parameters.codecs[0].params["useinbandfec"] = "1"; |
1648 SetSendParameters(parameters); | 1650 SetSendParameters(parameters); |
1649 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1651 EXPECT_TRUE(GetCodecFec(kSsrcX)); |
1650 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1652 CheckSendCodec(kSsrcX, "opus", 1, 32000); |
1651 } | 1653 } |
1652 | 1654 |
1653 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. | 1655 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. |
1654 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { | 1656 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { |
1655 EXPECT_TRUE(SetupSendStream()); | 1657 EXPECT_TRUE(SetupSendStream()); |
1656 cricket::AudioSendParameters parameters; | 1658 cricket::AudioSendParameters parameters; |
1657 parameters.codecs.push_back(kOpusCodec); | 1659 parameters.codecs.push_back(kOpusCodec); |
1658 parameters.codecs[0].bitrate = 0; | 1660 parameters.codecs[0].bitrate = 0; |
1659 parameters.codecs[0].params["stereo"] = "1"; | 1661 parameters.codecs[0].params["stereo"] = "1"; |
1660 parameters.codecs[0].params["useinbandfec"] = "1"; | 1662 parameters.codecs[0].params["useinbandfec"] = "1"; |
1661 SetSendParameters(parameters); | 1663 SetSendParameters(parameters); |
1662 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1664 EXPECT_TRUE(GetCodecFec(kSsrcX)); |
1663 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1665 CheckSendCodec(kSsrcX, "opus", 2, 64000); |
1664 } | 1666 } |
1665 | 1667 |
1666 // Test that with non-Opus, codec FEC is off. | 1668 // Test that with non-Opus, codec FEC is off. |
1667 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { | 1669 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { |
1668 EXPECT_TRUE(SetupSendStream()); | 1670 EXPECT_TRUE(SetupSendStream()); |
1669 cricket::AudioSendParameters parameters; | 1671 cricket::AudioSendParameters parameters; |
1670 parameters.codecs.push_back(kIsacCodec); | 1672 parameters.codecs.push_back(kIsacCodec); |
1671 SetSendParameters(parameters); | 1673 SetSendParameters(parameters); |
1672 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1674 EXPECT_FALSE(GetCodecFec(kSsrcX)); |
1673 } | 1675 } |
1674 | 1676 |
1675 // Test the with non-Opus, even if useinbandfec=1, FEC is off. | 1677 // Test the with non-Opus, even if useinbandfec=1, FEC is off. |
1676 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { | 1678 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { |
1677 EXPECT_TRUE(SetupSendStream()); | 1679 EXPECT_TRUE(SetupSendStream()); |
1678 cricket::AudioSendParameters parameters; | 1680 cricket::AudioSendParameters parameters; |
1679 parameters.codecs.push_back(kIsacCodec); | 1681 parameters.codecs.push_back(kIsacCodec); |
1680 parameters.codecs[0].params["useinbandfec"] = "1"; | 1682 parameters.codecs[0].params["useinbandfec"] = "1"; |
1681 SetSendParameters(parameters); | 1683 SetSendParameters(parameters); |
1682 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1684 EXPECT_FALSE(GetCodecFec(kSsrcX)); |
1683 } | 1685 } |
1684 | 1686 |
1685 // Test that Opus FEC status can be changed. | 1687 // Test that Opus FEC status can be changed. |
1686 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { | 1688 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { |
1687 EXPECT_TRUE(SetupSendStream()); | 1689 EXPECT_TRUE(SetupSendStream()); |
1688 cricket::AudioSendParameters parameters; | 1690 cricket::AudioSendParameters parameters; |
1689 parameters.codecs.push_back(kOpusCodec); | 1691 parameters.codecs.push_back(kOpusCodec); |
1690 SetSendParameters(parameters); | 1692 SetSendParameters(parameters); |
1691 EXPECT_FALSE(GetCodecFec(kSsrc1)); | 1693 EXPECT_FALSE(GetCodecFec(kSsrcX)); |
1692 | 1694 |
1693 parameters.codecs[0].params["useinbandfec"] = "1"; | 1695 parameters.codecs[0].params["useinbandfec"] = "1"; |
1694 SetSendParameters(parameters); | 1696 SetSendParameters(parameters); |
1695 EXPECT_TRUE(GetCodecFec(kSsrc1)); | 1697 EXPECT_TRUE(GetCodecFec(kSsrcX)); |
1696 } | 1698 } |
1697 | 1699 |
1698 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | 1700 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
1699 EXPECT_TRUE(SetupChannel()); | 1701 EXPECT_TRUE(SetupChannel()); |
1700 cricket::AudioSendParameters send_parameters; | 1702 cricket::AudioSendParameters send_parameters; |
1701 send_parameters.codecs.push_back(kOpusCodec); | 1703 send_parameters.codecs.push_back(kOpusCodec); |
1702 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | 1704 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
1703 SetSendParameters(send_parameters); | 1705 SetSendParameters(send_parameters); |
1704 | 1706 |
1705 cricket::AudioRecvParameters recv_parameters; | 1707 cricket::AudioRecvParameters recv_parameters; |
1706 recv_parameters.codecs.push_back(kIsacCodec); | 1708 recv_parameters.codecs.push_back(kIsacCodec); |
1707 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | 1709 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
1708 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 1710 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
1709 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1711 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr); |
1710 EXPECT_FALSE( | 1712 EXPECT_FALSE( |
1711 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1713 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc); |
1712 | 1714 |
1713 send_parameters.codecs = engine_->send_codecs(); | 1715 send_parameters.codecs = engine_->send_codecs(); |
1714 SetSendParameters(send_parameters); | 1716 SetSendParameters(send_parameters); |
1715 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1717 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr); |
1716 EXPECT_TRUE( | 1718 EXPECT_TRUE( |
1717 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1719 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc); |
1718 } | 1720 } |
1719 | 1721 |
1720 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | 1722 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. |
1721 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | 1723 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { |
1722 EXPECT_TRUE(SetupSendStream()); | 1724 EXPECT_TRUE(SetupSendStream()); |
1723 cricket::AudioSendParameters parameters; | 1725 cricket::AudioSendParameters parameters; |
1724 parameters.codecs.push_back(kOpusCodec); | 1726 parameters.codecs.push_back(kOpusCodec); |
1725 parameters.codecs[0].bitrate = 0; | 1727 parameters.codecs[0].bitrate = 0; |
1726 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1728 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1727 SetSendParameters(parameters); | 1729 SetSendParameters(parameters); |
1728 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | 1730 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcX)); |
1729 EXPECT_EQ(12000, GetCodecBitrate(kSsrc1)); | 1731 EXPECT_EQ(12000, GetCodecBitrate(kSsrcX)); |
1730 | 1732 |
1731 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1733 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1732 SetSendParameters(parameters); | 1734 SetSendParameters(parameters); |
1733 EXPECT_EQ(24000, GetCodecBitrate(kSsrc1)); | 1735 EXPECT_EQ(24000, GetCodecBitrate(kSsrcX)); |
1734 } | 1736 } |
1735 | 1737 |
1736 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. | 1738 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. |
1737 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { | 1739 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { |
1738 EXPECT_TRUE(SetupSendStream()); | 1740 EXPECT_TRUE(SetupSendStream()); |
1739 cricket::AudioSendParameters parameters; | 1741 cricket::AudioSendParameters parameters; |
1740 parameters.codecs.push_back(kOpusCodec); | 1742 parameters.codecs.push_back(kOpusCodec); |
1741 parameters.codecs[0].bitrate = 0; | 1743 parameters.codecs[0].bitrate = 0; |
1742 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); | 1744 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); |
1743 SetSendParameters(parameters); | 1745 SetSendParameters(parameters); |
1744 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc1)); | 1746 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrcX)); |
1745 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | 1747 EXPECT_EQ(20000, GetCodecBitrate(kSsrcX)); |
1746 | 1748 |
1747 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1749 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1748 SetSendParameters(parameters); | 1750 SetSendParameters(parameters); |
1749 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | 1751 EXPECT_EQ(40000, GetCodecBitrate(kSsrcX)); |
1750 } | 1752 } |
1751 | 1753 |
1752 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. | 1754 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. |
1753 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { | 1755 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { |
1754 EXPECT_TRUE(SetupSendStream()); | 1756 EXPECT_TRUE(SetupSendStream()); |
1755 cricket::AudioSendParameters parameters; | 1757 cricket::AudioSendParameters parameters; |
1756 parameters.codecs.push_back(kOpusCodec); | 1758 parameters.codecs.push_back(kOpusCodec); |
1757 parameters.codecs[0].bitrate = 0; | 1759 parameters.codecs[0].bitrate = 0; |
1758 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); | 1760 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); |
1759 SetSendParameters(parameters); | 1761 SetSendParameters(parameters); |
1760 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc1)); | 1762 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrcX)); |
1761 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | 1763 EXPECT_EQ(20000, GetCodecBitrate(kSsrcX)); |
1762 | 1764 |
1763 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1765 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1764 SetSendParameters(parameters); | 1766 SetSendParameters(parameters); |
1765 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | 1767 EXPECT_EQ(40000, GetCodecBitrate(kSsrcX)); |
1766 } | 1768 } |
1767 | 1769 |
1768 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. | 1770 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. |
1769 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { | 1771 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { |
1770 EXPECT_TRUE(SetupSendStream()); | 1772 EXPECT_TRUE(SetupSendStream()); |
1771 cricket::AudioSendParameters parameters; | 1773 cricket::AudioSendParameters parameters; |
1772 parameters.codecs.push_back(kOpusCodec); | 1774 parameters.codecs.push_back(kOpusCodec); |
1773 parameters.codecs[0].bitrate = 0; | 1775 parameters.codecs[0].bitrate = 0; |
1774 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); | 1776 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); |
1775 SetSendParameters(parameters); | 1777 SetSendParameters(parameters); |
1776 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc1)); | 1778 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrcX)); |
1777 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | 1779 EXPECT_EQ(32000, GetCodecBitrate(kSsrcX)); |
1778 | 1780 |
1779 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1781 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1780 SetSendParameters(parameters); | 1782 SetSendParameters(parameters); |
1781 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1783 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); |
1782 } | 1784 } |
1783 | 1785 |
1784 // Test 24000 < maxplaybackrate triggers Opus full band mode. | 1786 // Test 24000 < maxplaybackrate triggers Opus full band mode. |
1785 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { | 1787 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { |
1786 EXPECT_TRUE(SetupSendStream()); | 1788 EXPECT_TRUE(SetupSendStream()); |
1787 cricket::AudioSendParameters parameters; | 1789 cricket::AudioSendParameters parameters; |
1788 parameters.codecs.push_back(kOpusCodec); | 1790 parameters.codecs.push_back(kOpusCodec); |
1789 parameters.codecs[0].bitrate = 0; | 1791 parameters.codecs[0].bitrate = 0; |
1790 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); | 1792 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); |
1791 SetSendParameters(parameters); | 1793 SetSendParameters(parameters); |
1792 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc1)); | 1794 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrcX)); |
1793 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | 1795 EXPECT_EQ(32000, GetCodecBitrate(kSsrcX)); |
1794 | 1796 |
1795 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | 1797 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); |
1796 SetSendParameters(parameters); | 1798 SetSendParameters(parameters); |
1797 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 1799 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); |
1798 } | 1800 } |
1799 | 1801 |
1800 // Test Opus that without maxplaybackrate, default playback rate is used. | 1802 // Test Opus that without maxplaybackrate, default playback rate is used. |
1801 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { | 1803 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { |
1802 EXPECT_TRUE(SetupSendStream()); | 1804 EXPECT_TRUE(SetupSendStream()); |
1803 cricket::AudioSendParameters parameters; | 1805 cricket::AudioSendParameters parameters; |
1804 parameters.codecs.push_back(kOpusCodec); | 1806 parameters.codecs.push_back(kOpusCodec); |
1805 SetSendParameters(parameters); | 1807 SetSendParameters(parameters); |
1806 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | 1808 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrcX)); |
1807 } | 1809 } |
1808 | 1810 |
1809 // Test the with non-Opus, maxplaybackrate has no effect. | 1811 // Test the with non-Opus, maxplaybackrate has no effect. |
1810 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { | 1812 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { |
1811 EXPECT_TRUE(SetupSendStream()); | 1813 EXPECT_TRUE(SetupSendStream()); |
1812 cricket::AudioSendParameters parameters; | 1814 cricket::AudioSendParameters parameters; |
1813 parameters.codecs.push_back(kIsacCodec); | 1815 parameters.codecs.push_back(kIsacCodec); |
1814 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); | 1816 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); |
1815 SetSendParameters(parameters); | 1817 SetSendParameters(parameters); |
1816 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc1)); | 1818 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrcX)); |
1817 } | 1819 } |
1818 | 1820 |
1819 // Test maxplaybackrate can be set on two streams. | 1821 // Test maxplaybackrate can be set on two streams. |
1820 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { | 1822 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { |
1821 EXPECT_TRUE(SetupSendStream()); | 1823 EXPECT_TRUE(SetupSendStream()); |
1822 cricket::AudioSendParameters parameters; | 1824 cricket::AudioSendParameters parameters; |
1823 parameters.codecs.push_back(kOpusCodec); | 1825 parameters.codecs.push_back(kOpusCodec); |
1824 SetSendParameters(parameters); | 1826 SetSendParameters(parameters); |
1825 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | 1827 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrcX)); |
1826 | 1828 |
1827 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1829 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1828 SetSendParameters(parameters); | 1830 SetSendParameters(parameters); |
1829 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | 1831 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcX)); |
1830 | 1832 |
1831 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); | 1833 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcY)); |
1832 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); | 1834 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcY)); |
1833 } | 1835 } |
1834 | 1836 |
1835 // Test that with usedtx=0, Opus DTX is off. | 1837 // Test that with usedtx=0, Opus DTX is off. |
1836 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { | 1838 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { |
1837 EXPECT_TRUE(SetupSendStream()); | 1839 EXPECT_TRUE(SetupSendStream()); |
1838 cricket::AudioSendParameters parameters; | 1840 cricket::AudioSendParameters parameters; |
1839 parameters.codecs.push_back(kOpusCodec); | 1841 parameters.codecs.push_back(kOpusCodec); |
1840 parameters.codecs[0].params["usedtx"] = "0"; | 1842 parameters.codecs[0].params["usedtx"] = "0"; |
1841 SetSendParameters(parameters); | 1843 SetSendParameters(parameters); |
1842 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | 1844 EXPECT_FALSE(GetOpusDtx(kSsrcX)); |
1843 } | 1845 } |
1844 | 1846 |
1845 // Test that with usedtx=1, Opus DTX is on. | 1847 // Test that with usedtx=1, Opus DTX is on. |
1846 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { | 1848 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { |
1847 EXPECT_TRUE(SetupSendStream()); | 1849 EXPECT_TRUE(SetupSendStream()); |
1848 cricket::AudioSendParameters parameters; | 1850 cricket::AudioSendParameters parameters; |
1849 parameters.codecs.push_back(kOpusCodec); | 1851 parameters.codecs.push_back(kOpusCodec); |
1850 parameters.codecs[0].params["usedtx"] = "1"; | 1852 parameters.codecs[0].params["usedtx"] = "1"; |
1851 SetSendParameters(parameters); | 1853 SetSendParameters(parameters); |
1852 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | 1854 EXPECT_TRUE(GetOpusDtx(kSsrcX)); |
1853 } | 1855 } |
1854 | 1856 |
1855 // Test that usedtx=1 works with stereo Opus. | 1857 // Test that usedtx=1 works with stereo Opus. |
1856 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { | 1858 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { |
1857 EXPECT_TRUE(SetupSendStream()); | 1859 EXPECT_TRUE(SetupSendStream()); |
1858 cricket::AudioSendParameters parameters; | 1860 cricket::AudioSendParameters parameters; |
1859 parameters.codecs.push_back(kOpusCodec); | 1861 parameters.codecs.push_back(kOpusCodec); |
1860 parameters.codecs[0].params["usedtx"] = "1"; | 1862 parameters.codecs[0].params["usedtx"] = "1"; |
1861 parameters.codecs[0].params["stereo"] = "1"; | 1863 parameters.codecs[0].params["stereo"] = "1"; |
1862 SetSendParameters(parameters); | 1864 SetSendParameters(parameters); |
1863 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | 1865 EXPECT_TRUE(GetOpusDtx(kSsrcX)); |
1864 } | 1866 } |
1865 | 1867 |
1866 // Test that usedtx=1 does not work with non Opus. | 1868 // Test that usedtx=1 does not work with non Opus. |
1867 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { | 1869 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { |
1868 EXPECT_TRUE(SetupSendStream()); | 1870 EXPECT_TRUE(SetupSendStream()); |
1869 cricket::AudioSendParameters parameters; | 1871 cricket::AudioSendParameters parameters; |
1870 parameters.codecs.push_back(kIsacCodec); | 1872 parameters.codecs.push_back(kIsacCodec); |
1871 parameters.codecs[0].params["usedtx"] = "1"; | 1873 parameters.codecs[0].params["usedtx"] = "1"; |
1872 SetSendParameters(parameters); | 1874 SetSendParameters(parameters); |
1873 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | 1875 EXPECT_FALSE(GetOpusDtx(kSsrcX)); |
1874 } | 1876 } |
1875 | 1877 |
1876 // Test that we can switch back and forth between Opus and ISAC with CN. | 1878 // Test that we can switch back and forth between Opus and ISAC with CN. |
1877 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { | 1879 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { |
1878 EXPECT_TRUE(SetupSendStream()); | 1880 EXPECT_TRUE(SetupSendStream()); |
1879 | 1881 |
1880 cricket::AudioSendParameters opus_parameters; | 1882 cricket::AudioSendParameters opus_parameters; |
1881 opus_parameters.codecs.push_back(kOpusCodec); | 1883 opus_parameters.codecs.push_back(kOpusCodec); |
1882 SetSendParameters(opus_parameters); | 1884 SetSendParameters(opus_parameters); |
1883 { | 1885 { |
1884 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1886 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1885 EXPECT_EQ(111, gcodec.pltype); | 1887 EXPECT_EQ(111, gcodec.pltype); |
1886 EXPECT_STREQ("opus", gcodec.plname); | 1888 EXPECT_STREQ("opus", gcodec.plname); |
1887 } | 1889 } |
1888 | 1890 |
1889 cricket::AudioSendParameters isac_parameters; | 1891 cricket::AudioSendParameters isac_parameters; |
1890 isac_parameters.codecs.push_back(kIsacCodec); | 1892 isac_parameters.codecs.push_back(kIsacCodec); |
1891 isac_parameters.codecs.push_back(kCn16000Codec); | 1893 isac_parameters.codecs.push_back(kCn16000Codec); |
1892 isac_parameters.codecs.push_back(kOpusCodec); | 1894 isac_parameters.codecs.push_back(kOpusCodec); |
1893 SetSendParameters(isac_parameters); | 1895 SetSendParameters(isac_parameters); |
1894 { | 1896 { |
1895 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1897 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1896 EXPECT_EQ(103, gcodec.pltype); | 1898 EXPECT_EQ(103, gcodec.pltype); |
1897 EXPECT_STREQ("ISAC", gcodec.plname); | 1899 EXPECT_STREQ("ISAC", gcodec.plname); |
1898 } | 1900 } |
1899 | 1901 |
1900 SetSendParameters(opus_parameters); | 1902 SetSendParameters(opus_parameters); |
1901 { | 1903 { |
1902 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1904 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1903 EXPECT_EQ(111, gcodec.pltype); | 1905 EXPECT_EQ(111, gcodec.pltype); |
1904 EXPECT_STREQ("opus", gcodec.plname); | 1906 EXPECT_STREQ("opus", gcodec.plname); |
1905 } | 1907 } |
1906 } | 1908 } |
1907 | 1909 |
1908 // Test that we handle various ways of specifying bitrate. | 1910 // Test that we handle various ways of specifying bitrate. |
1909 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { | 1911 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { |
1910 EXPECT_TRUE(SetupSendStream()); | 1912 EXPECT_TRUE(SetupSendStream()); |
1911 cricket::AudioSendParameters parameters; | 1913 cricket::AudioSendParameters parameters; |
1912 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 | 1914 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 |
1913 SetSendParameters(parameters); | 1915 SetSendParameters(parameters); |
1914 { | 1916 { |
1915 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1917 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1916 EXPECT_EQ(103, gcodec.pltype); | 1918 EXPECT_EQ(103, gcodec.pltype); |
1917 EXPECT_STREQ("ISAC", gcodec.plname); | 1919 EXPECT_STREQ("ISAC", gcodec.plname); |
1918 EXPECT_EQ(32000, gcodec.rate); | 1920 EXPECT_EQ(32000, gcodec.rate); |
1919 } | 1921 } |
1920 | 1922 |
1921 parameters.codecs[0].bitrate = 0; // bitrate == default | 1923 parameters.codecs[0].bitrate = 0; // bitrate == default |
1922 SetSendParameters(parameters); | 1924 SetSendParameters(parameters); |
1923 { | 1925 { |
1924 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1926 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1925 EXPECT_EQ(103, gcodec.pltype); | 1927 EXPECT_EQ(103, gcodec.pltype); |
1926 EXPECT_STREQ("ISAC", gcodec.plname); | 1928 EXPECT_STREQ("ISAC", gcodec.plname); |
1927 EXPECT_EQ(32000, gcodec.rate); | 1929 EXPECT_EQ(32000, gcodec.rate); |
1928 } | 1930 } |
1929 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 | 1931 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 |
1930 SetSendParameters(parameters); | 1932 SetSendParameters(parameters); |
1931 { | 1933 { |
1932 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1934 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1933 EXPECT_EQ(103, gcodec.pltype); | 1935 EXPECT_EQ(103, gcodec.pltype); |
1934 EXPECT_STREQ("ISAC", gcodec.plname); | 1936 EXPECT_STREQ("ISAC", gcodec.plname); |
1935 EXPECT_EQ(28000, gcodec.rate); | 1937 EXPECT_EQ(28000, gcodec.rate); |
1936 } | 1938 } |
1937 | 1939 |
1938 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 | 1940 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 |
1939 SetSendParameters(parameters); | 1941 SetSendParameters(parameters); |
1940 { | 1942 { |
1941 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1943 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1942 EXPECT_EQ(0, gcodec.pltype); | 1944 EXPECT_EQ(0, gcodec.pltype); |
1943 EXPECT_STREQ("PCMU", gcodec.plname); | 1945 EXPECT_STREQ("PCMU", gcodec.plname); |
1944 EXPECT_EQ(64000, gcodec.rate); | 1946 EXPECT_EQ(64000, gcodec.rate); |
1945 } | 1947 } |
1946 | 1948 |
1947 parameters.codecs[0].bitrate = 0; // bitrate == default | 1949 parameters.codecs[0].bitrate = 0; // bitrate == default |
1948 SetSendParameters(parameters); | 1950 SetSendParameters(parameters); |
1949 { | 1951 { |
1950 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1952 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1951 EXPECT_EQ(0, gcodec.pltype); | 1953 EXPECT_EQ(0, gcodec.pltype); |
1952 EXPECT_STREQ("PCMU", gcodec.plname); | 1954 EXPECT_STREQ("PCMU", gcodec.plname); |
1953 EXPECT_EQ(64000, gcodec.rate); | 1955 EXPECT_EQ(64000, gcodec.rate); |
1954 } | 1956 } |
1955 | 1957 |
1956 parameters.codecs[0] = kOpusCodec; | 1958 parameters.codecs[0] = kOpusCodec; |
1957 parameters.codecs[0].bitrate = 0; // bitrate == default | 1959 parameters.codecs[0].bitrate = 0; // bitrate == default |
1958 SetSendParameters(parameters); | 1960 SetSendParameters(parameters); |
1959 { | 1961 { |
1960 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1962 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
1961 EXPECT_EQ(111, gcodec.pltype); | 1963 EXPECT_EQ(111, gcodec.pltype); |
1962 EXPECT_STREQ("opus", gcodec.plname); | 1964 EXPECT_STREQ("opus", gcodec.plname); |
1963 EXPECT_EQ(32000, gcodec.rate); | 1965 EXPECT_EQ(32000, gcodec.rate); |
1964 } | 1966 } |
1965 } | 1967 } |
1966 | 1968 |
1967 // Test that we could set packet size specified in kCodecParamPTime. | 1969 // Test that we could set packet size specified in kCodecParamPTime. |
1968 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { | 1970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { |
1969 EXPECT_TRUE(SetupSendStream()); | 1971 EXPECT_TRUE(SetupSendStream()); |
1970 cricket::AudioSendParameters parameters; | 1972 cricket::AudioSendParameters parameters; |
1971 parameters.codecs.push_back(kOpusCodec); | 1973 parameters.codecs.push_back(kOpusCodec); |
1972 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1974 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1973 SetSendParameters(parameters); | 1975 SetSendParameters(parameters); |
1974 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. | 1976 EXPECT_EQ(1920, GetCodecPacSize(kSsrcX)); // Opus gets 40ms. |
1975 | 1977 |
1976 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. | 1978 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. |
1977 SetSendParameters(parameters); | 1979 SetSendParameters(parameters); |
1978 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. | 1980 EXPECT_EQ(480, GetCodecPacSize(kSsrcX)); // Opus gets 10ms. |
1979 | 1981 |
1980 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. | 1982 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. |
1981 SetSendParameters(parameters); | 1983 SetSendParameters(parameters); |
1982 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. | 1984 EXPECT_EQ(2880, GetCodecPacSize(kSsrcX)); // Opus gets 60ms. |
1983 | 1985 |
1984 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. | 1986 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. |
1985 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1987 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1986 SetSendParameters(parameters); | 1988 SetSendParameters(parameters); |
1987 EXPECT_EQ(480, GetCodecPacSize( | 1989 EXPECT_EQ(480, GetCodecPacSize( |
1988 kSsrc1)); // Isac gets 30ms as the next smallest value. | 1990 kSsrcX)); // Isac gets 30ms as the next smallest value. |
1989 | 1991 |
1990 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. | 1992 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. |
1991 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); | 1993 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); |
1992 SetSendParameters(parameters); | 1994 SetSendParameters(parameters); |
1993 EXPECT_EQ(640, GetCodecPacSize( | 1995 EXPECT_EQ(640, GetCodecPacSize( |
1994 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. | 1996 kSsrcX)); // G722 gets 40ms @16kHz as defined in VoE. |
1995 } | 1997 } |
1996 | 1998 |
1997 // Test that we fail if no codecs are specified. | 1999 // Test that we fail if no codecs are specified. |
1998 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { | 2000 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { |
1999 EXPECT_TRUE(SetupSendStream()); | 2001 EXPECT_TRUE(SetupSendStream()); |
2000 cricket::AudioSendParameters parameters; | 2002 cricket::AudioSendParameters parameters; |
2001 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 2003 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
2002 } | 2004 } |
2003 | 2005 |
2004 // Test that we can set send codecs even with telephone-event codec as the first | 2006 // Test that we can set send codecs even with telephone-event codec as the first |
2005 // one on the list. | 2007 // one on the list. |
2006 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { | 2008 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
2007 EXPECT_TRUE(SetupSendStream()); | 2009 EXPECT_TRUE(SetupSendStream()); |
2008 cricket::AudioSendParameters parameters; | 2010 cricket::AudioSendParameters parameters; |
2009 parameters.codecs.push_back(kTelephoneEventCodec1); | 2011 parameters.codecs.push_back(kTelephoneEventCodec1); |
2010 parameters.codecs.push_back(kIsacCodec); | 2012 parameters.codecs.push_back(kIsacCodec); |
2011 parameters.codecs.push_back(kPcmuCodec); | 2013 parameters.codecs.push_back(kPcmuCodec); |
2012 parameters.codecs[0].id = 98; // DTMF | 2014 parameters.codecs[0].id = 98; // DTMF |
2013 parameters.codecs[1].id = 96; | 2015 parameters.codecs[1].id = 96; |
2014 SetSendParameters(parameters); | 2016 SetSendParameters(parameters); |
2015 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 2017 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; |
2016 EXPECT_EQ(96, gcodec.pltype); | 2018 EXPECT_EQ(96, gcodec.pltype); |
2017 EXPECT_STREQ("ISAC", gcodec.plname); | 2019 EXPECT_STREQ("ISAC", gcodec.plname); |
2018 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2020 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2019 } | 2021 } |
2020 | 2022 |
2021 // Test that payload type range is limited for telephone-event codec. | 2023 // Test that payload type range is limited for telephone-event codec. |
2022 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { | 2024 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
2023 EXPECT_TRUE(SetupSendStream()); | 2025 EXPECT_TRUE(SetupSendStream()); |
2024 cricket::AudioSendParameters parameters; | 2026 cricket::AudioSendParameters parameters; |
2025 parameters.codecs.push_back(kTelephoneEventCodec2); | 2027 parameters.codecs.push_back(kTelephoneEventCodec2); |
(...skipping 17 matching lines...) Expand all Loading... |
2043 // one on the list. | 2045 // one on the list. |
2044 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { | 2046 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { |
2045 EXPECT_TRUE(SetupSendStream()); | 2047 EXPECT_TRUE(SetupSendStream()); |
2046 cricket::AudioSendParameters parameters; | 2048 cricket::AudioSendParameters parameters; |
2047 parameters.codecs.push_back(kCn16000Codec); | 2049 parameters.codecs.push_back(kCn16000Codec); |
2048 parameters.codecs.push_back(kIsacCodec); | 2050 parameters.codecs.push_back(kIsacCodec); |
2049 parameters.codecs.push_back(kPcmuCodec); | 2051 parameters.codecs.push_back(kPcmuCodec); |
2050 parameters.codecs[0].id = 98; // wideband CN | 2052 parameters.codecs[0].id = 98; // wideband CN |
2051 parameters.codecs[1].id = 96; | 2053 parameters.codecs[1].id = 96; |
2052 SetSendParameters(parameters); | 2054 SetSendParameters(parameters); |
2053 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2055 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2054 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2056 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2055 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2057 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2056 EXPECT_EQ(98, send_codec_spec.cng_payload_type); | 2058 EXPECT_EQ(98, send_codec_spec.cng_payload_type); |
2057 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2059 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2058 } | 2060 } |
2059 | 2061 |
2060 // Test that we set VAD and DTMF types correctly as caller. | 2062 // Test that we set VAD and DTMF types correctly as caller. |
2061 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { | 2063 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
2062 EXPECT_TRUE(SetupSendStream()); | 2064 EXPECT_TRUE(SetupSendStream()); |
2063 cricket::AudioSendParameters parameters; | 2065 cricket::AudioSendParameters parameters; |
2064 parameters.codecs.push_back(kIsacCodec); | 2066 parameters.codecs.push_back(kIsacCodec); |
2065 parameters.codecs.push_back(kPcmuCodec); | 2067 parameters.codecs.push_back(kPcmuCodec); |
2066 // TODO(juberti): cn 32000 | 2068 // TODO(juberti): cn 32000 |
2067 parameters.codecs.push_back(kCn16000Codec); | 2069 parameters.codecs.push_back(kCn16000Codec); |
2068 parameters.codecs.push_back(kCn8000Codec); | 2070 parameters.codecs.push_back(kCn8000Codec); |
2069 parameters.codecs.push_back(kTelephoneEventCodec1); | 2071 parameters.codecs.push_back(kTelephoneEventCodec1); |
2070 parameters.codecs[0].id = 96; | 2072 parameters.codecs[0].id = 96; |
2071 parameters.codecs[2].id = 97; // wideband CN | 2073 parameters.codecs[2].id = 97; // wideband CN |
2072 parameters.codecs[4].id = 98; // DTMF | 2074 parameters.codecs[4].id = 98; // DTMF |
2073 SetSendParameters(parameters); | 2075 SetSendParameters(parameters); |
2074 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2076 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2075 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2077 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2076 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2078 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2077 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2079 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2078 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2080 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2079 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2081 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2080 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2082 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2081 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2083 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2082 } | 2084 } |
2083 | 2085 |
2084 // Test that we set VAD and DTMF types correctly as callee. | 2086 // Test that we set VAD and DTMF types correctly as callee. |
2085 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 2087 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
2086 EXPECT_TRUE(SetupChannel()); | 2088 EXPECT_TRUE(SetupChannel()); |
2087 cricket::AudioSendParameters parameters; | 2089 cricket::AudioSendParameters parameters; |
2088 parameters.codecs.push_back(kIsacCodec); | 2090 parameters.codecs.push_back(kIsacCodec); |
2089 parameters.codecs.push_back(kPcmuCodec); | 2091 parameters.codecs.push_back(kPcmuCodec); |
2090 // TODO(juberti): cn 32000 | 2092 // TODO(juberti): cn 32000 |
2091 parameters.codecs.push_back(kCn16000Codec); | 2093 parameters.codecs.push_back(kCn16000Codec); |
2092 parameters.codecs.push_back(kCn8000Codec); | 2094 parameters.codecs.push_back(kCn8000Codec); |
2093 parameters.codecs.push_back(kTelephoneEventCodec2); | 2095 parameters.codecs.push_back(kTelephoneEventCodec2); |
2094 parameters.codecs[0].id = 96; | 2096 parameters.codecs[0].id = 96; |
2095 parameters.codecs[2].id = 97; // wideband CN | 2097 parameters.codecs[2].id = 97; // wideband CN |
2096 parameters.codecs[4].id = 98; // DTMF | 2098 parameters.codecs[4].id = 98; // DTMF |
2097 SetSendParameters(parameters); | 2099 SetSendParameters(parameters); |
2098 EXPECT_TRUE(channel_->AddSendStream( | 2100 EXPECT_TRUE(channel_->AddSendStream( |
2099 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2101 cricket::StreamParams::CreateLegacy(kSsrcX))); |
2100 | 2102 |
2101 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2103 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2102 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2104 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2103 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2105 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2104 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2106 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2105 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2107 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2106 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2108 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2107 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2109 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2108 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2110 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2109 } | 2111 } |
2110 | 2112 |
2111 // Test that we only apply VAD if we have a CN codec that matches the | 2113 // Test that we only apply VAD if we have a CN codec that matches the |
2112 // send codec clockrate. | 2114 // send codec clockrate. |
2113 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { | 2115 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { |
2114 EXPECT_TRUE(SetupSendStream()); | 2116 EXPECT_TRUE(SetupSendStream()); |
2115 cricket::AudioSendParameters parameters; | 2117 cricket::AudioSendParameters parameters; |
2116 // Set ISAC(16K) and CN(16K). VAD should be activated. | 2118 // Set ISAC(16K) and CN(16K). VAD should be activated. |
2117 parameters.codecs.push_back(kIsacCodec); | 2119 parameters.codecs.push_back(kIsacCodec); |
2118 parameters.codecs.push_back(kCn16000Codec); | 2120 parameters.codecs.push_back(kCn16000Codec); |
2119 parameters.codecs[1].id = 97; | 2121 parameters.codecs[1].id = 97; |
2120 SetSendParameters(parameters); | 2122 SetSendParameters(parameters); |
2121 { | 2123 { |
2122 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2124 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2123 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2125 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2124 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2126 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2125 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2127 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2126 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2128 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2127 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2129 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2128 } | 2130 } |
2129 // Set PCMU(8K) and CN(16K). VAD should not be activated. | 2131 // Set PCMU(8K) and CN(16K). VAD should not be activated. |
2130 parameters.codecs[0] = kPcmuCodec; | 2132 parameters.codecs[0] = kPcmuCodec; |
2131 SetSendParameters(parameters); | 2133 SetSendParameters(parameters); |
2132 { | 2134 { |
2133 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2135 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2134 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 2136 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); |
2135 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2137 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2136 } | 2138 } |
2137 // Set PCMU(8K) and CN(8K). VAD should be activated. | 2139 // Set PCMU(8K) and CN(8K). VAD should be activated. |
2138 parameters.codecs[1] = kCn8000Codec; | 2140 parameters.codecs[1] = kCn8000Codec; |
2139 SetSendParameters(parameters); | 2141 SetSendParameters(parameters); |
2140 { | 2142 { |
2141 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2143 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2142 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 2144 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); |
2143 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2145 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2144 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2146 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2145 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 2147 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
2146 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 2148 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); |
2147 } | 2149 } |
2148 // Set ISAC(16K) and CN(8K). VAD should not be activated. | 2150 // Set ISAC(16K) and CN(8K). VAD should not be activated. |
2149 parameters.codecs[0] = kIsacCodec; | 2151 parameters.codecs[0] = kIsacCodec; |
2150 SetSendParameters(parameters); | 2152 SetSendParameters(parameters); |
2151 { | 2153 { |
2152 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2154 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2153 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2155 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2154 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2156 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2155 } | 2157 } |
2156 } | 2158 } |
2157 | 2159 |
2158 // Test that we perform case-insensitive matching of codec names. | 2160 // Test that we perform case-insensitive matching of codec names. |
2159 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { | 2161 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
2160 EXPECT_TRUE(SetupSendStream()); | 2162 EXPECT_TRUE(SetupSendStream()); |
2161 cricket::AudioSendParameters parameters; | 2163 cricket::AudioSendParameters parameters; |
2162 parameters.codecs.push_back(kIsacCodec); | 2164 parameters.codecs.push_back(kIsacCodec); |
2163 parameters.codecs.push_back(kPcmuCodec); | 2165 parameters.codecs.push_back(kPcmuCodec); |
2164 parameters.codecs.push_back(kCn16000Codec); | 2166 parameters.codecs.push_back(kCn16000Codec); |
2165 parameters.codecs.push_back(kCn8000Codec); | 2167 parameters.codecs.push_back(kCn8000Codec); |
2166 parameters.codecs.push_back(kTelephoneEventCodec1); | 2168 parameters.codecs.push_back(kTelephoneEventCodec1); |
2167 parameters.codecs[0].name = "iSaC"; | 2169 parameters.codecs[0].name = "iSaC"; |
2168 parameters.codecs[0].id = 96; | 2170 parameters.codecs[0].id = 96; |
2169 parameters.codecs[2].id = 97; // wideband CN | 2171 parameters.codecs[2].id = 97; // wideband CN |
2170 parameters.codecs[4].id = 98; // DTMF | 2172 parameters.codecs[4].id = 98; // DTMF |
2171 SetSendParameters(parameters); | 2173 SetSendParameters(parameters); |
2172 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2174 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; |
2173 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2175 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2174 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2176 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2175 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2177 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2176 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2178 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
2177 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 2179 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2178 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 2180 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2179 EXPECT_TRUE(channel_->CanInsertDtmf()); | 2181 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2180 } | 2182 } |
2181 | 2183 |
2182 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { | 2184 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2215 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) { | 2217 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) { |
2216 TestSetRecvRtpHeaderExtensions( | 2218 TestSetRecvRtpHeaderExtensions( |
2217 webrtc::RtpExtension::kTransportSequenceNumberUri); | 2219 webrtc::RtpExtension::kTransportSequenceNumberUri); |
2218 } | 2220 } |
2219 | 2221 |
2220 // Test that we can create a channel and start sending on it. | 2222 // Test that we can create a channel and start sending on it. |
2221 TEST_F(WebRtcVoiceEngineTestFake, Send) { | 2223 TEST_F(WebRtcVoiceEngineTestFake, Send) { |
2222 EXPECT_TRUE(SetupSendStream()); | 2224 EXPECT_TRUE(SetupSendStream()); |
2223 SetSendParameters(send_parameters_); | 2225 SetSendParameters(send_parameters_); |
2224 SetSend(true); | 2226 SetSend(true); |
2225 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2227 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2226 SetSend(false); | 2228 SetSend(false); |
2227 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2229 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2228 } | 2230 } |
2229 | 2231 |
2230 // Test that a channel will send if and only if it has a source and is enabled | 2232 // Test that a channel will send if and only if it has a source and is enabled |
2231 // for sending. | 2233 // for sending. |
2232 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { | 2234 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { |
2233 EXPECT_TRUE(SetupSendStream()); | 2235 EXPECT_TRUE(SetupSendStream()); |
2234 SetSendParameters(send_parameters_); | 2236 SetSendParameters(send_parameters_); |
2235 SetAudioSend(kSsrc1, true, nullptr); | 2237 SetAudioSend(kSsrcX, true, nullptr); |
2236 SetSend(true); | 2238 SetSend(true); |
2237 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2239 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2238 SetAudioSend(kSsrc1, true, &fake_source_); | 2240 SetAudioSend(kSsrcX, true, &fake_source_); |
2239 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2241 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2240 SetAudioSend(kSsrc1, true, nullptr); | 2242 SetAudioSend(kSsrcX, true, nullptr); |
2241 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2243 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2242 } | 2244 } |
2243 | 2245 |
2244 // Test that a channel is muted/unmuted. | 2246 // Test that a channel is muted/unmuted. |
2245 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) { | 2247 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) { |
2246 EXPECT_TRUE(SetupSendStream()); | 2248 EXPECT_TRUE(SetupSendStream()); |
2247 SetSendParameters(send_parameters_); | 2249 SetSendParameters(send_parameters_); |
2248 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); | 2250 EXPECT_FALSE(GetSendStream(kSsrcX).muted()); |
2249 SetAudioSend(kSsrc1, true, nullptr); | 2251 SetAudioSend(kSsrcX, true, nullptr); |
2250 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); | 2252 EXPECT_FALSE(GetSendStream(kSsrcX).muted()); |
2251 SetAudioSend(kSsrc1, false, nullptr); | 2253 SetAudioSend(kSsrcX, false, nullptr); |
2252 EXPECT_TRUE(GetSendStream(kSsrc1).muted()); | 2254 EXPECT_TRUE(GetSendStream(kSsrcX).muted()); |
2253 } | 2255 } |
2254 | 2256 |
2255 // Test that SetSendParameters() does not alter a stream's send state. | 2257 // Test that SetSendParameters() does not alter a stream's send state. |
2256 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { | 2258 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { |
2257 EXPECT_TRUE(SetupSendStream()); | 2259 EXPECT_TRUE(SetupSendStream()); |
2258 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2260 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2259 | 2261 |
2260 // Turn on sending. | 2262 // Turn on sending. |
2261 SetSend(true); | 2263 SetSend(true); |
2262 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2264 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2263 | 2265 |
2264 // Changing RTP header extensions will recreate the AudioSendStream. | 2266 // Changing RTP header extensions will recreate the AudioSendStream. |
2265 send_parameters_.extensions.push_back( | 2267 send_parameters_.extensions.push_back( |
2266 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); | 2268 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); |
2267 SetSendParameters(send_parameters_); | 2269 SetSendParameters(send_parameters_); |
2268 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2270 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2269 | 2271 |
2270 // Turn off sending. | 2272 // Turn off sending. |
2271 SetSend(false); | 2273 SetSend(false); |
2272 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2274 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2273 | 2275 |
2274 // Changing RTP header extensions will recreate the AudioSendStream. | 2276 // Changing RTP header extensions will recreate the AudioSendStream. |
2275 send_parameters_.extensions.clear(); | 2277 send_parameters_.extensions.clear(); |
2276 SetSendParameters(send_parameters_); | 2278 SetSendParameters(send_parameters_); |
2277 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2279 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2278 } | 2280 } |
2279 | 2281 |
2280 // Test that we can create a channel and start playing out on it. | 2282 // Test that we can create a channel and start playing out on it. |
2281 TEST_F(WebRtcVoiceEngineTestFake, Playout) { | 2283 TEST_F(WebRtcVoiceEngineTestFake, Playout) { |
2282 EXPECT_TRUE(SetupRecvStream()); | 2284 EXPECT_TRUE(SetupRecvStream()); |
2283 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2285 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2284 channel_->SetPlayout(true); | 2286 channel_->SetPlayout(true); |
2285 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 2287 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); |
2286 channel_->SetPlayout(false); | 2288 channel_->SetPlayout(false); |
2287 EXPECT_FALSE(GetRecvStream(kSsrc1).started()); | 2289 EXPECT_FALSE(GetRecvStream(kSsrcX).started()); |
2288 } | 2290 } |
2289 | 2291 |
2290 // Test that we can add and remove send streams. | 2292 // Test that we can add and remove send streams. |
2291 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { | 2293 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { |
2292 SetupForMultiSendStream(); | 2294 SetupForMultiSendStream(); |
2293 | 2295 |
2294 // Set the global state for sending. | 2296 // Set the global state for sending. |
2295 SetSend(true); | 2297 SetSend(true); |
2296 | 2298 |
2297 for (uint32_t ssrc : kSsrcs4) { | 2299 for (uint32_t ssrc : kSsrcs4) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2387 SetupForMultiSendStream(); | 2389 SetupForMultiSendStream(); |
2388 | 2390 |
2389 // Create send streams. | 2391 // Create send streams. |
2390 for (uint32_t ssrc : kSsrcs4) { | 2392 for (uint32_t ssrc : kSsrcs4) { |
2391 EXPECT_TRUE(channel_->AddSendStream( | 2393 EXPECT_TRUE(channel_->AddSendStream( |
2392 cricket::StreamParams::CreateLegacy(ssrc))); | 2394 cricket::StreamParams::CreateLegacy(ssrc))); |
2393 } | 2395 } |
2394 | 2396 |
2395 // Create a receive stream to check that none of the send streams end up in | 2397 // Create a receive stream to check that none of the send streams end up in |
2396 // the receive stream stats. | 2398 // the receive stream stats. |
2397 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2399 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
2398 | 2400 |
2399 // We need send codec to be set to get all stats. | 2401 // We need send codec to be set to get all stats. |
2400 SetSendParameters(send_parameters_); | 2402 SetSendParameters(send_parameters_); |
2401 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2403 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2402 SetAudioSendStreamStats(); | 2404 SetAudioSendStreamStats(); |
2403 | 2405 |
2404 // Check stats for the added streams. | 2406 // Check stats for the added streams. |
2405 { | 2407 { |
2406 cricket::VoiceMediaInfo info; | 2408 cricket::VoiceMediaInfo info; |
2407 EXPECT_EQ(true, channel_->GetStats(&info)); | 2409 EXPECT_EQ(true, channel_->GetStats(&info)); |
2408 | 2410 |
2409 // We have added 4 send streams. We should see empty stats for all. | 2411 // We have added 4 send streams. We should see empty stats for all. |
2410 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); | 2412 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); |
2411 for (const auto& sender : info.senders) { | 2413 for (const auto& sender : info.senders) { |
2412 VerifyVoiceSenderInfo(sender, false); | 2414 VerifyVoiceSenderInfo(sender, false); |
2413 } | 2415 } |
2414 VerifyVoiceSendRecvCodecs(info); | 2416 VerifyVoiceSendRecvCodecs(info); |
2415 | 2417 |
2416 // We have added one receive stream. We should see empty stats. | 2418 // We have added one receive stream. We should see empty stats. |
2417 EXPECT_EQ(info.receivers.size(), 1u); | 2419 EXPECT_EQ(info.receivers.size(), 1u); |
2418 EXPECT_EQ(info.receivers[0].ssrc(), 0); | 2420 EXPECT_EQ(info.receivers[0].ssrc(), 0); |
2419 } | 2421 } |
2420 | 2422 |
2421 // Remove the kSsrc2 stream. No receiver stats. | 2423 // Remove the kSsrcY stream. No receiver stats. |
2422 { | 2424 { |
2423 cricket::VoiceMediaInfo info; | 2425 cricket::VoiceMediaInfo info; |
2424 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); | 2426 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrcY)); |
2425 EXPECT_EQ(true, channel_->GetStats(&info)); | 2427 EXPECT_EQ(true, channel_->GetStats(&info)); |
2426 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); | 2428 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); |
2427 EXPECT_EQ(0u, info.receivers.size()); | 2429 EXPECT_EQ(0u, info.receivers.size()); |
2428 } | 2430 } |
2429 | 2431 |
2430 // Deliver a new packet - a default receive stream should be created and we | 2432 // Deliver a new packet - a default receive stream should be created and we |
2431 // should see stats again. | 2433 // should see stats again. |
2432 { | 2434 { |
2433 cricket::VoiceMediaInfo info; | 2435 cricket::VoiceMediaInfo info; |
2434 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2436 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2435 SetAudioReceiveStreamStats(); | 2437 SetAudioReceiveStreamStats(); |
2436 EXPECT_EQ(true, channel_->GetStats(&info)); | 2438 EXPECT_EQ(true, channel_->GetStats(&info)); |
2437 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); | 2439 EXPECT_EQ(static_cast<size_t>(arraysize(kSsrcs4)), info.senders.size()); |
2438 EXPECT_EQ(1u, info.receivers.size()); | 2440 EXPECT_EQ(1u, info.receivers.size()); |
2439 VerifyVoiceReceiverInfo(info.receivers[0]); | 2441 VerifyVoiceReceiverInfo(info.receivers[0]); |
2440 VerifyVoiceSendRecvCodecs(info); | 2442 VerifyVoiceSendRecvCodecs(info); |
2441 } | 2443 } |
2442 } | 2444 } |
2443 | 2445 |
2444 // Test that we can add and remove receive streams, and do proper send/playout. | 2446 // Test that we can add and remove receive streams, and do proper send/playout. |
2445 // We can receive on multiple streams while sending one stream. | 2447 // We can receive on multiple streams while sending one stream. |
2446 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { | 2448 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { |
2447 EXPECT_TRUE(SetupSendStream()); | 2449 EXPECT_TRUE(SetupSendStream()); |
2448 | 2450 |
2449 // Start playout without a receive stream. | 2451 // Start playout without a receive stream. |
2450 SetSendParameters(send_parameters_); | 2452 SetSendParameters(send_parameters_); |
2451 channel_->SetPlayout(true); | 2453 channel_->SetPlayout(true); |
2452 | 2454 |
2453 // Adding another stream should enable playout on the new stream only. | 2455 // Adding another stream should enable playout on the new stream only. |
2454 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2456 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
2455 SetSend(true); | 2457 SetSend(true); |
2456 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2458 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2457 | 2459 |
2458 // Make sure only the new stream is played out. | 2460 // Make sure only the new stream is played out. |
2459 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2461 EXPECT_TRUE(GetRecvStream(kSsrcY).started()); |
2460 | 2462 |
2461 // Adding yet another stream should have stream 2 and 3 enabled for playout. | 2463 // Adding yet another stream should have stream 2 and 3 enabled for playout. |
2462 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 2464 EXPECT_TRUE(AddRecvStream(kSsrcZ)); |
2463 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2465 EXPECT_TRUE(GetRecvStream(kSsrcY).started()); |
2464 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); | 2466 EXPECT_TRUE(GetRecvStream(kSsrcZ).started()); |
2465 | 2467 |
2466 // Stop sending. | 2468 // Stop sending. |
2467 SetSend(false); | 2469 SetSend(false); |
2468 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2470 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2469 | 2471 |
2470 // Stop playout. | 2472 // Stop playout. |
2471 channel_->SetPlayout(false); | 2473 channel_->SetPlayout(false); |
2472 EXPECT_FALSE(GetRecvStream(kSsrc2).started()); | 2474 EXPECT_FALSE(GetRecvStream(kSsrcY).started()); |
2473 EXPECT_FALSE(GetRecvStream(kSsrc3).started()); | 2475 EXPECT_FALSE(GetRecvStream(kSsrcZ).started()); |
2474 | 2476 |
2475 // Restart playout and make sure recv streams are played out. | 2477 // Restart playout and make sure recv streams are played out. |
2476 channel_->SetPlayout(true); | 2478 channel_->SetPlayout(true); |
2477 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); | 2479 EXPECT_TRUE(GetRecvStream(kSsrcY).started()); |
2478 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); | 2480 EXPECT_TRUE(GetRecvStream(kSsrcZ).started()); |
2479 | 2481 |
2480 // Now remove the recv streams. | 2482 // Now remove the recv streams. |
2481 EXPECT_TRUE(channel_->RemoveRecvStream(3)); | 2483 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrcZ)); |
2482 EXPECT_TRUE(channel_->RemoveRecvStream(2)); | 2484 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrcY)); |
2483 } | 2485 } |
2484 | 2486 |
2485 // Test that we can create a channel configured for Codian bridges, | 2487 // Test that we can create a channel configured for Codian bridges, |
2486 // and start sending on it. | 2488 // and start sending on it. |
2487 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { | 2489 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { |
2488 EXPECT_TRUE(SetupSendStream()); | 2490 EXPECT_TRUE(SetupSendStream()); |
2489 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10); | 2491 send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10); |
2490 EXPECT_CALL(apm_gc_, | 2492 EXPECT_CALL(apm_gc_, |
2491 set_target_level_dbfs(11)).Times(2).WillRepeatedly(Return(0)); | 2493 set_target_level_dbfs(11)).Times(2).WillRepeatedly(Return(0)); |
2492 SetSendParameters(send_parameters_); | 2494 SetSendParameters(send_parameters_); |
2493 SetSend(true); | 2495 SetSend(true); |
2494 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); | 2496 EXPECT_TRUE(GetSendStream(kSsrcX).IsSending()); |
2495 SetSend(false); | 2497 SetSend(false); |
2496 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); | 2498 EXPECT_FALSE(GetSendStream(kSsrcX).IsSending()); |
2497 } | 2499 } |
2498 | 2500 |
2499 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { | 2501 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { |
2500 EXPECT_TRUE(SetupSendStream()); | 2502 EXPECT_TRUE(SetupSendStream()); |
2501 EXPECT_CALL(adm_, | 2503 EXPECT_CALL(adm_, |
2502 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 2504 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
2503 EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0)); | 2505 EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0)); |
2504 EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillOnce(Return(0)); | 2506 EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillOnce(Return(0)); |
2505 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3); | 2507 send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3); |
2506 send_parameters_.options.tx_agc_digital_compression_gain = | 2508 send_parameters_.options.tx_agc_digital_compression_gain = |
(...skipping 22 matching lines...) Expand all Loading... |
2529 SetSendParameters(send_parameters_); | 2531 SetSendParameters(send_parameters_); |
2530 } | 2532 } |
2531 | 2533 |
2532 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) { | 2534 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) { |
2533 EXPECT_TRUE(SetupSendStream()); | 2535 EXPECT_TRUE(SetupSendStream()); |
2534 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2536 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2535 send_parameters_.options.audio_network_adaptor_config = | 2537 send_parameters_.options.audio_network_adaptor_config = |
2536 rtc::Optional<std::string>("1234"); | 2538 rtc::Optional<std::string>("1234"); |
2537 SetSendParameters(send_parameters_); | 2539 SetSendParameters(send_parameters_); |
2538 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2540 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2539 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2541 GetAudioNetworkAdaptorConfig(kSsrcX)); |
2540 } | 2542 } |
2541 | 2543 |
2542 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { | 2544 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { |
2543 EXPECT_TRUE(SetupSendStream()); | 2545 EXPECT_TRUE(SetupSendStream()); |
2544 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2546 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2545 send_parameters_.options.audio_network_adaptor_config = | 2547 send_parameters_.options.audio_network_adaptor_config = |
2546 rtc::Optional<std::string>("1234"); | 2548 rtc::Optional<std::string>("1234"); |
2547 SetSendParameters(send_parameters_); | 2549 SetSendParameters(send_parameters_); |
2548 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2550 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2549 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2551 GetAudioNetworkAdaptorConfig(kSsrcX)); |
2550 const int initial_num = call_.GetNumCreatedSendStreams(); | 2552 const int initial_num = call_.GetNumCreatedSendStreams(); |
2551 cricket::AudioOptions options; | 2553 cricket::AudioOptions options; |
2552 options.audio_network_adaptor = rtc::Optional<bool>(false); | 2554 options.audio_network_adaptor = rtc::Optional<bool>(false); |
2553 SetAudioSend(kSsrc1, true, nullptr, &options); | 2555 SetAudioSend(kSsrcX, true, nullptr, &options); |
2554 // AudioSendStream expected to be recreated. | 2556 // AudioSendStream expected to be recreated. |
2555 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 2557 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
2556 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrc1)); | 2558 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrcX)); |
2557 } | 2559 } |
2558 | 2560 |
2559 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { | 2561 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { |
2560 EXPECT_TRUE(SetupSendStream()); | 2562 EXPECT_TRUE(SetupSendStream()); |
2561 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2563 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2562 send_parameters_.options.audio_network_adaptor_config = | 2564 send_parameters_.options.audio_network_adaptor_config = |
2563 rtc::Optional<std::string>("1234"); | 2565 rtc::Optional<std::string>("1234"); |
2564 SetSendParameters(send_parameters_); | 2566 SetSendParameters(send_parameters_); |
2565 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2567 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2566 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2568 GetAudioNetworkAdaptorConfig(kSsrcX)); |
2567 const int initial_num = call_.GetNumCreatedSendStreams(); | 2569 const int initial_num = call_.GetNumCreatedSendStreams(); |
2568 cricket::AudioOptions options; | 2570 cricket::AudioOptions options; |
2569 options.audio_network_adaptor = rtc::Optional<bool>(); | 2571 options.audio_network_adaptor = rtc::Optional<bool>(); |
2570 // Unvalued |options.audio_network_adaptor|.should not reset audio network | 2572 // Unvalued |options.audio_network_adaptor|.should not reset audio network |
2571 // adaptor. | 2573 // adaptor. |
2572 SetAudioSend(kSsrc1, true, nullptr, &options); | 2574 SetAudioSend(kSsrcX, true, nullptr, &options); |
2573 // AudioSendStream not expected to be recreated. | 2575 // AudioSendStream not expected to be recreated. |
2574 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); | 2576 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); |
2575 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, | 2577 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, |
2576 GetAudioNetworkAdaptorConfig(kSsrc1)); | 2578 GetAudioNetworkAdaptorConfig(kSsrcX)); |
2577 } | 2579 } |
2578 | 2580 |
2579 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest | 2581 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest |
2580 : public WebRtcVoiceEngineTestFake { | 2582 : public WebRtcVoiceEngineTestFake { |
2581 public: | 2583 public: |
2582 WebRtcVoiceEngineWithSendSideBweWithOverheadTest() | 2584 WebRtcVoiceEngineWithSendSideBweWithOverheadTest() |
2583 : WebRtcVoiceEngineTestFake( | 2585 : WebRtcVoiceEngineTestFake( |
2584 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/" | 2586 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/" |
2585 "Enabled/") {} | 2587 "Enabled/") {} |
2586 }; | 2588 }; |
2587 | 2589 |
2588 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) { | 2590 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) { |
2589 EXPECT_TRUE(SetupSendStream()); | 2591 EXPECT_TRUE(SetupSendStream()); |
2590 cricket::AudioSendParameters parameters; | 2592 cricket::AudioSendParameters parameters; |
2591 parameters.codecs.push_back(kOpusCodec); | 2593 parameters.codecs.push_back(kOpusCodec); |
2592 SetSendParameters(parameters); | 2594 SetSendParameters(parameters); |
2593 const int initial_num = call_.GetNumCreatedSendStreams(); | 2595 const int initial_num = call_.GetNumCreatedSendStreams(); |
2594 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); | 2596 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); |
2595 | 2597 |
2596 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) | 2598 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) |
2597 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; | 2599 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; |
2598 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; | 2600 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; |
2599 constexpr int kMinOverheadBps = | 2601 constexpr int kMinOverheadBps = |
2600 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; | 2602 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; |
2601 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10; | 2603 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10; |
2602 | 2604 |
2603 constexpr int kOpusMinBitrateBps = 6000; | 2605 constexpr int kOpusMinBitrateBps = 6000; |
2604 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps, | 2606 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps, |
2605 GetSendStreamConfig(kSsrc1).min_bitrate_bps); | 2607 GetSendStreamConfig(kSsrcX).min_bitrate_bps); |
2606 constexpr int kOpusBitrateFbBps = 32000; | 2608 constexpr int kOpusBitrateFbBps = 32000; |
2607 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps, | 2609 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps, |
2608 GetSendStreamConfig(kSsrc1).max_bitrate_bps); | 2610 GetSendStreamConfig(kSsrcX).max_bitrate_bps); |
2609 | 2611 |
2610 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true); | 2612 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true); |
2611 parameters.options.audio_network_adaptor_config = | 2613 parameters.options.audio_network_adaptor_config = |
2612 rtc::Optional<std::string>("1234"); | 2614 rtc::Optional<std::string>("1234"); |
2613 SetSendParameters(parameters); | 2615 SetSendParameters(parameters); |
2614 | 2616 |
2615 constexpr int kMinOverheadWithAnaBps = | 2617 constexpr int kMinOverheadWithAnaBps = |
2616 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; | 2618 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; |
2617 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20; | 2619 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20; |
2618 | 2620 |
2619 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps, | 2621 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps, |
2620 GetSendStreamConfig(kSsrc1).min_bitrate_bps); | 2622 GetSendStreamConfig(kSsrcX).min_bitrate_bps); |
2621 | 2623 |
2622 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps, | 2624 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps, |
2623 GetSendStreamConfig(kSsrc1).max_bitrate_bps); | 2625 GetSendStreamConfig(kSsrcX).max_bitrate_bps); |
2624 } | 2626 } |
2625 | 2627 |
2626 // Test that we can set the outgoing SSRC properly. | 2628 // Test that we can set the outgoing SSRC properly. |
2627 // SSRC is set in SetupSendStream() by calling AddSendStream. | 2629 // SSRC is set in SetupSendStream() by calling AddSendStream. |
2628 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { | 2630 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { |
2629 EXPECT_TRUE(SetupSendStream()); | 2631 EXPECT_TRUE(SetupSendStream()); |
2630 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2632 EXPECT_TRUE(call_.GetAudioSendStream(kSsrcX)); |
2631 } | 2633 } |
2632 | 2634 |
2633 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { | 2635 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { |
2634 // Setup. We need send codec to be set to get all stats. | 2636 // Setup. We need send codec to be set to get all stats. |
2635 EXPECT_TRUE(SetupSendStream()); | 2637 EXPECT_TRUE(SetupSendStream()); |
2636 // SetupSendStream adds a send stream with kSsrc1, so the receive | 2638 // SetupSendStream adds a send stream with kSsrcX, so the receive |
2637 // stream has to use a different SSRC. | 2639 // stream has to use a different SSRC. |
2638 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2640 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
2639 SetSendParameters(send_parameters_); | 2641 SetSendParameters(send_parameters_); |
2640 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2642 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2641 SetAudioSendStreamStats(); | 2643 SetAudioSendStreamStats(); |
2642 | 2644 |
2643 // Check stats for the added streams. | 2645 // Check stats for the added streams. |
2644 { | 2646 { |
2645 cricket::VoiceMediaInfo info; | 2647 cricket::VoiceMediaInfo info; |
2646 EXPECT_EQ(true, channel_->GetStats(&info)); | 2648 EXPECT_EQ(true, channel_->GetStats(&info)); |
2647 | 2649 |
2648 // We have added one send stream. We should see the stats we've set. | 2650 // We have added one send stream. We should see the stats we've set. |
2649 EXPECT_EQ(1u, info.senders.size()); | 2651 EXPECT_EQ(1u, info.senders.size()); |
2650 VerifyVoiceSenderInfo(info.senders[0], false); | 2652 VerifyVoiceSenderInfo(info.senders[0], false); |
2651 // We have added one receive stream. We should see empty stats. | 2653 // We have added one receive stream. We should see empty stats. |
2652 EXPECT_EQ(info.receivers.size(), 1u); | 2654 EXPECT_EQ(info.receivers.size(), 1u); |
2653 EXPECT_EQ(info.receivers[0].ssrc(), 0); | 2655 EXPECT_EQ(info.receivers[0].ssrc(), 0); |
2654 } | 2656 } |
2655 | 2657 |
2656 // Start sending - this affects some reported stats. | 2658 // Start sending - this affects some reported stats. |
2657 { | 2659 { |
2658 cricket::VoiceMediaInfo info; | 2660 cricket::VoiceMediaInfo info; |
2659 SetSend(true); | 2661 SetSend(true); |
2660 EXPECT_EQ(true, channel_->GetStats(&info)); | 2662 EXPECT_EQ(true, channel_->GetStats(&info)); |
2661 VerifyVoiceSenderInfo(info.senders[0], true); | 2663 VerifyVoiceSenderInfo(info.senders[0], true); |
2662 VerifyVoiceSendRecvCodecs(info); | 2664 VerifyVoiceSendRecvCodecs(info); |
2663 } | 2665 } |
2664 | 2666 |
2665 // Remove the kSsrc2 stream. No receiver stats. | 2667 // Remove the kSsrcY stream. No receiver stats. |
2666 { | 2668 { |
2667 cricket::VoiceMediaInfo info; | 2669 cricket::VoiceMediaInfo info; |
2668 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); | 2670 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrcY)); |
2669 EXPECT_EQ(true, channel_->GetStats(&info)); | 2671 EXPECT_EQ(true, channel_->GetStats(&info)); |
2670 EXPECT_EQ(1u, info.senders.size()); | 2672 EXPECT_EQ(1u, info.senders.size()); |
2671 EXPECT_EQ(0u, info.receivers.size()); | 2673 EXPECT_EQ(0u, info.receivers.size()); |
2672 } | 2674 } |
2673 | 2675 |
2674 // Deliver a new packet - a default receive stream should be created and we | 2676 // Deliver a new packet - a default receive stream should be created and we |
2675 // should see stats again. | 2677 // should see stats again. |
2676 { | 2678 { |
2677 cricket::VoiceMediaInfo info; | 2679 cricket::VoiceMediaInfo info; |
2678 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2680 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2679 SetAudioReceiveStreamStats(); | 2681 SetAudioReceiveStreamStats(); |
2680 EXPECT_EQ(true, channel_->GetStats(&info)); | 2682 EXPECT_EQ(true, channel_->GetStats(&info)); |
2681 EXPECT_EQ(1u, info.senders.size()); | 2683 EXPECT_EQ(1u, info.senders.size()); |
2682 EXPECT_EQ(1u, info.receivers.size()); | 2684 EXPECT_EQ(1u, info.receivers.size()); |
2683 VerifyVoiceReceiverInfo(info.receivers[0]); | 2685 VerifyVoiceReceiverInfo(info.receivers[0]); |
2684 VerifyVoiceSendRecvCodecs(info); | 2686 VerifyVoiceSendRecvCodecs(info); |
2685 } | 2687 } |
2686 } | 2688 } |
2687 | 2689 |
2688 // Test that we can set the outgoing SSRC properly with multiple streams. | 2690 // Test that we can set the outgoing SSRC properly with multiple streams. |
2689 // SSRC is set in SetupSendStream() by calling AddSendStream. | 2691 // SSRC is set in SetupSendStream() by calling AddSendStream. |
2690 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { | 2692 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { |
2691 EXPECT_TRUE(SetupSendStream()); | 2693 EXPECT_TRUE(SetupSendStream()); |
2692 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2694 EXPECT_TRUE(call_.GetAudioSendStream(kSsrcX)); |
2693 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2695 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
2694 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 2696 EXPECT_EQ(kSsrcX, GetRecvStreamConfig(kSsrcY).rtp.local_ssrc); |
2695 } | 2697 } |
2696 | 2698 |
2697 // Test that the local SSRC is the same on sending and receiving channels if the | 2699 // Test that the local SSRC is the same on sending and receiving channels if the |
2698 // receive channel is created before the send channel. | 2700 // receive channel is created before the send channel. |
2699 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { | 2701 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { |
2700 EXPECT_TRUE(SetupChannel()); | 2702 EXPECT_TRUE(SetupChannel()); |
2701 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 2703 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
2702 EXPECT_TRUE(channel_->AddSendStream( | 2704 EXPECT_TRUE(channel_->AddSendStream( |
2703 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2705 cricket::StreamParams::CreateLegacy(kSsrcX))); |
2704 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2706 EXPECT_TRUE(call_.GetAudioSendStream(kSsrcX)); |
2705 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 2707 EXPECT_EQ(kSsrcX, GetRecvStreamConfig(kSsrcY).rtp.local_ssrc); |
2706 } | 2708 } |
2707 | 2709 |
2708 // Test that we can properly receive packets. | 2710 // Test that we can properly receive packets. |
2709 TEST_F(WebRtcVoiceEngineTestFake, Recv) { | 2711 TEST_F(WebRtcVoiceEngineTestFake, Recv) { |
2710 EXPECT_TRUE(SetupChannel()); | 2712 EXPECT_TRUE(SetupChannel()); |
2711 EXPECT_TRUE(AddRecvStream(1)); | 2713 EXPECT_TRUE(AddRecvStream(1)); |
2712 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2714 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2713 | 2715 |
2714 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, | 2716 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, |
2715 sizeof(kPcmuFrame))); | 2717 sizeof(kPcmuFrame))); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2760 EXPECT_EQ(s1.received_packets(), 1); | 2762 EXPECT_EQ(s1.received_packets(), 1); |
2761 EXPECT_EQ(s2.received_packets(), 1); | 2763 EXPECT_EQ(s2.received_packets(), 1); |
2762 EXPECT_EQ(s3.received_packets(), 1); | 2764 EXPECT_EQ(s3.received_packets(), 1); |
2763 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3]))); | 2765 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3]))); |
2764 | 2766 |
2765 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc3)); | 2767 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc3)); |
2766 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc2)); | 2768 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc2)); |
2767 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc1)); | 2769 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc1)); |
2768 } | 2770 } |
2769 | 2771 |
2770 // Test that receiving on an unsignalled stream works (default channel will be | 2772 // Test that receiving on an unsignaled stream works (a stream is created). |
2771 // created). | 2773 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaled) { |
2772 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { | |
2773 EXPECT_TRUE(SetupChannel()); | 2774 EXPECT_TRUE(SetupChannel()); |
2774 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); | 2775 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); |
2775 | 2776 |
2776 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2777 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2777 | 2778 |
2778 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2779 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
2779 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, | 2780 EXPECT_TRUE(GetRecvStream(kSsrc1).VerifyLastPacket(kPcmuFrame, |
2780 sizeof(kPcmuFrame))); | 2781 sizeof(kPcmuFrame))); |
2781 } | 2782 } |
2782 | 2783 |
2783 // Test that receiving on an unsignalled stream works (default channel will be | 2784 // Test that receiving N unsignaled stream works (streams will be created), and |
2784 // created), and that packets will be forwarded to the default channel | 2785 // that packets are forwarded to them all. |
2785 // regardless of their SSRCs. | 2786 TEST_F(WebRtcVoiceEngineTestFake, RecvMultipleUnsignaled) { |
2786 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) { | |
2787 EXPECT_TRUE(SetupChannel()); | 2787 EXPECT_TRUE(SetupChannel()); |
2788 unsigned char packet[sizeof(kPcmuFrame)]; | 2788 unsigned char packet[sizeof(kPcmuFrame)]; |
2789 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2789 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2790 | 2790 |
2791 // Note that ssrc = 0 is not supported. | 2791 constexpr uint32_t kMaxUnsignaledCount = 50; |
2792 uint32_t ssrc = 1; | 2792 |
2793 for (; ssrc < 10; ++ssrc) { | 2793 // Note that SSRC = 0 is not supported. |
| 2794 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { |
2794 rtc::SetBE32(&packet[8], ssrc); | 2795 rtc::SetBE32(&packet[8], ssrc); |
2795 DeliverPacket(packet, sizeof(packet)); | 2796 DeliverPacket(packet, sizeof(packet)); |
2796 | 2797 |
2797 // Verify we only have one default stream. | 2798 // Verify we have one new stream for each loop iteration. |
2798 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2799 EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size()); |
2799 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); | 2800 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); |
2800 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); | 2801 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
2801 } | 2802 } |
2802 | 2803 |
2803 // Sending the same ssrc again should not create a new stream. | 2804 // Sending on the same SSRCs again should not create new streams. |
2804 --ssrc; | 2805 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) { |
| 2806 rtc::SetBE32(&packet[8], ssrc); |
| 2807 DeliverPacket(packet, sizeof(packet)); |
| 2808 |
| 2809 EXPECT_EQ(kMaxUnsignaledCount, call_.GetAudioReceiveStreams().size()); |
| 2810 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); |
| 2811 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); |
| 2812 } |
| 2813 |
| 2814 // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced. |
| 2815 constexpr uint32_t kAnotherSsrc = 667; |
| 2816 rtc::SetBE32(&packet[8], kAnotherSsrc); |
2805 DeliverPacket(packet, sizeof(packet)); | 2817 DeliverPacket(packet, sizeof(packet)); |
2806 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 2818 |
2807 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); | 2819 const auto& streams = call_.GetAudioReceiveStreams(); |
2808 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); | 2820 EXPECT_EQ(kMaxUnsignaledCount, streams.size()); |
| 2821 size_t i = 0; |
| 2822 for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledCount); ++ssrc, ++i) { |
| 2823 EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc); |
| 2824 EXPECT_EQ(2, streams[i]->received_packets()); |
| 2825 } |
| 2826 EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc); |
| 2827 EXPECT_EQ(1, streams[i]->received_packets()); |
| 2828 // Sanity check that we've checked all streams. |
| 2829 EXPECT_EQ(kMaxUnsignaledCount, (i + 1)); |
2809 } | 2830 } |
2810 | 2831 |
2811 // Test that a default channel is created even after a signalled stream has been | 2832 // Test that a default channel is created even after a signaled stream has been |
2812 // added, and that this stream will get any packets for unknown SSRCs. | 2833 // added, and that this stream will get any packets for unknown SSRCs. |
2813 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { | 2834 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignaled) { |
2814 EXPECT_TRUE(SetupChannel()); | 2835 EXPECT_TRUE(SetupChannel()); |
2815 unsigned char packet[sizeof(kPcmuFrame)]; | 2836 unsigned char packet[sizeof(kPcmuFrame)]; |
2816 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2837 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2817 | 2838 |
2818 // Add a known stream, send packet and verify we got it. | 2839 // Add a known stream, send packet and verify we got it. |
2819 const uint32_t signaled_ssrc = 1; | 2840 const uint32_t signaled_ssrc = 1; |
2820 rtc::SetBE32(&packet[8], signaled_ssrc); | 2841 rtc::SetBE32(&packet[8], signaled_ssrc); |
2821 EXPECT_TRUE(AddRecvStream(signaled_ssrc)); | 2842 EXPECT_TRUE(AddRecvStream(signaled_ssrc)); |
2822 DeliverPacket(packet, sizeof(packet)); | 2843 DeliverPacket(packet, sizeof(packet)); |
2823 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket( | 2844 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket( |
2824 packet, sizeof(packet))); | 2845 packet, sizeof(packet))); |
| 2846 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
2825 | 2847 |
2826 // Note that the first unknown SSRC cannot be 0, because we only support | 2848 // Note that the first unknown SSRC cannot be 0, because we only support |
2827 // creating receive streams for SSRC!=0. | 2849 // creating receive streams for SSRC!=0. |
2828 const uint32_t unsignaled_ssrc = 7011; | 2850 const uint32_t unsignaled_ssrc = 7011; |
2829 rtc::SetBE32(&packet[8], unsignaled_ssrc); | 2851 rtc::SetBE32(&packet[8], unsignaled_ssrc); |
2830 DeliverPacket(packet, sizeof(packet)); | 2852 DeliverPacket(packet, sizeof(packet)); |
2831 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket( | 2853 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket( |
2832 packet, sizeof(packet))); | 2854 packet, sizeof(packet))); |
2833 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); | 2855 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
2834 | 2856 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2908 } | 2930 } |
2909 | 2931 |
2910 // Test that after adding a recv stream, we do not decode more codecs than | 2932 // Test that after adding a recv stream, we do not decode more codecs than |
2911 // those previously passed into SetRecvCodecs. | 2933 // those previously passed into SetRecvCodecs. |
2912 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { | 2934 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { |
2913 EXPECT_TRUE(SetupSendStream()); | 2935 EXPECT_TRUE(SetupSendStream()); |
2914 cricket::AudioRecvParameters parameters; | 2936 cricket::AudioRecvParameters parameters; |
2915 parameters.codecs.push_back(kIsacCodec); | 2937 parameters.codecs.push_back(kIsacCodec); |
2916 parameters.codecs.push_back(kPcmuCodec); | 2938 parameters.codecs.push_back(kPcmuCodec); |
2917 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 2939 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2918 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 2940 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
2919 int channel_num2 = voe_.GetLastChannel(); | 2941 int channel_num2 = voe_.GetLastChannel(); |
2920 webrtc::CodecInst gcodec; | 2942 webrtc::CodecInst gcodec; |
2921 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus"); | 2943 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus"); |
2922 gcodec.plfreq = 48000; | 2944 gcodec.plfreq = 48000; |
2923 gcodec.channels = 2; | 2945 gcodec.channels = 2; |
2924 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); | 2946 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); |
2925 } | 2947 } |
2926 | 2948 |
2927 // Test that we properly clean up any streams that were added, even if | 2949 // Test that we properly clean up any streams that were added, even if |
2928 // not explicitly removed. | 2950 // not explicitly removed. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2961 TestInsertDtmf(0, true, kTelephoneEventCodec1); | 2983 TestInsertDtmf(0, true, kTelephoneEventCodec1); |
2962 } | 2984 } |
2963 | 2985 |
2964 // Test the InsertDtmf on default send stream as callee | 2986 // Test the InsertDtmf on default send stream as callee |
2965 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { | 2987 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { |
2966 TestInsertDtmf(0, false, kTelephoneEventCodec2); | 2988 TestInsertDtmf(0, false, kTelephoneEventCodec2); |
2967 } | 2989 } |
2968 | 2990 |
2969 // Test the InsertDtmf on specified send stream as caller. | 2991 // Test the InsertDtmf on specified send stream as caller. |
2970 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { | 2992 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { |
2971 TestInsertDtmf(kSsrc1, true, kTelephoneEventCodec2); | 2993 TestInsertDtmf(kSsrcX, true, kTelephoneEventCodec2); |
2972 } | 2994 } |
2973 | 2995 |
2974 // Test the InsertDtmf on specified send stream as callee. | 2996 // Test the InsertDtmf on specified send stream as callee. |
2975 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { | 2997 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { |
2976 TestInsertDtmf(kSsrc1, false, kTelephoneEventCodec1); | 2998 TestInsertDtmf(kSsrcX, false, kTelephoneEventCodec1); |
2977 } | 2999 } |
2978 | 3000 |
2979 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { | 3001 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { |
2980 EXPECT_TRUE(SetupSendStream()); | 3002 EXPECT_TRUE(SetupSendStream()); |
2981 EXPECT_CALL(adm_, | 3003 EXPECT_CALL(adm_, |
2982 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); | 3004 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); |
2983 EXPECT_CALL(adm_, | 3005 EXPECT_CALL(adm_, |
2984 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); | 3006 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); |
2985 EXPECT_CALL(adm_, | 3007 EXPECT_CALL(adm_, |
2986 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); | 3008 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3220 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); | 3242 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); |
3221 | 3243 |
3222 channel->SetInterface(nullptr); | 3244 channel->SetInterface(nullptr); |
3223 } | 3245 } |
3224 | 3246 |
3225 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { | 3247 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { |
3226 EXPECT_TRUE(SetupChannel()); | 3248 EXPECT_TRUE(SetupChannel()); |
3227 cricket::WebRtcVoiceMediaChannel* media_channel = | 3249 cricket::WebRtcVoiceMediaChannel* media_channel = |
3228 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3250 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3229 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); | 3251 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); |
3230 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 3252 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
3231 int channel_id = voe_.GetLastChannel(); | 3253 int channel_id = voe_.GetLastChannel(); |
3232 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc1)); | 3254 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrcX)); |
3233 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); | 3255 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrcY)); |
3234 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 3256 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
3235 int channel_id2 = voe_.GetLastChannel(); | 3257 int channel_id2 = voe_.GetLastChannel(); |
3236 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); | 3258 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrcY)); |
3237 } | 3259 } |
3238 | 3260 |
3239 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { | 3261 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { |
3240 EXPECT_TRUE(SetupChannel()); | 3262 EXPECT_TRUE(SetupChannel()); |
3241 cricket::WebRtcVoiceMediaChannel* media_channel = | 3263 cricket::WebRtcVoiceMediaChannel* media_channel = |
3242 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3264 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3243 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); | 3265 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); |
3244 EXPECT_TRUE(channel_->AddSendStream( | 3266 EXPECT_TRUE(channel_->AddSendStream( |
3245 cricket::StreamParams::CreateLegacy(kSsrc1))); | 3267 cricket::StreamParams::CreateLegacy(kSsrcX))); |
3246 int channel_id = voe_.GetLastChannel(); | 3268 int channel_id = voe_.GetLastChannel(); |
3247 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc1)); | 3269 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrcX)); |
3248 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); | 3270 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrcY)); |
3249 EXPECT_TRUE(channel_->AddSendStream( | 3271 EXPECT_TRUE(channel_->AddSendStream( |
3250 cricket::StreamParams::CreateLegacy(kSsrc2))); | 3272 cricket::StreamParams::CreateLegacy(kSsrcY))); |
3251 int channel_id2 = voe_.GetLastChannel(); | 3273 int channel_id2 = voe_.GetLastChannel(); |
3252 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); | 3274 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrcY)); |
3253 } | 3275 } |
3254 | 3276 |
3255 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { | 3277 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { |
3256 EXPECT_TRUE(SetupChannel()); | 3278 EXPECT_TRUE(SetupChannel()); |
3257 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); | 3279 EXPECT_FALSE(channel_->SetOutputVolume(kSsrcY, 0.5)); |
3258 cricket::StreamParams stream; | 3280 cricket::StreamParams stream; |
3259 stream.ssrcs.push_back(kSsrc2); | 3281 stream.ssrcs.push_back(kSsrcY); |
3260 EXPECT_TRUE(channel_->AddRecvStream(stream)); | 3282 EXPECT_TRUE(channel_->AddRecvStream(stream)); |
3261 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc2).gain()); | 3283 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrcY).gain()); |
3262 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); | 3284 EXPECT_TRUE(channel_->SetOutputVolume(kSsrcY, 3)); |
3263 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain()); | 3285 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrcY).gain()); |
3264 } | 3286 } |
3265 | 3287 |
3266 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { | 3288 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeUnsignaledRecvStream) { |
3267 EXPECT_TRUE(SetupChannel()); | 3289 EXPECT_TRUE(SetupChannel()); |
3268 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); | 3290 |
| 3291 // Spawn an unsignaled stream by sending a packet - gain should be 1. |
3269 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3292 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3270 EXPECT_DOUBLE_EQ(2, GetRecvStream(1).gain()); | 3293 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc1).gain()); |
3271 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); | 3294 |
3272 EXPECT_DOUBLE_EQ(3, GetRecvStream(1).gain()); | 3295 // Should remember the volume "2" which will be set on new unsignaled streams, |
3273 EXPECT_TRUE(channel_->SetOutputVolume(1, 4)); | 3296 // and also set the gain to 2 on existing unsignaled streams. |
3274 EXPECT_DOUBLE_EQ(4, GetRecvStream(1).gain()); | 3297 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc0, 2)); |
| 3298 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc1).gain()); |
| 3299 |
| 3300 // Spawn an unsignaled stream by sending a packet - gain should be 2. |
| 3301 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; |
| 3302 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); |
| 3303 rtc::SetBE32(&pcmuFrame2[8], kSsrcX); |
| 3304 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); |
| 3305 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrcX).gain()); |
| 3306 |
| 3307 // Setting gain with SSRC=0 should affect all unsignaled streams. |
| 3308 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc0, 3)); |
| 3309 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); |
| 3310 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrcX).gain()); |
| 3311 |
| 3312 // Setting gain on an individual stream affects only that. |
| 3313 EXPECT_TRUE(channel_->SetOutputVolume(kSsrcX, 4)); |
| 3314 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain()); |
| 3315 EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrcX).gain()); |
3275 } | 3316 } |
3276 | 3317 |
3277 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { | 3318 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { |
3278 const uint32_t kAudioSsrc = 123; | 3319 const uint32_t kAudioSsrc = 123; |
3279 const std::string kSyncLabel = "AvSyncLabel"; | 3320 const std::string kSyncLabel = "AvSyncLabel"; |
3280 | 3321 |
3281 EXPECT_TRUE(SetupSendStream()); | 3322 EXPECT_TRUE(SetupSendStream()); |
3282 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); | 3323 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); |
3283 sp.sync_label = kSyncLabel; | 3324 sp.sync_label = kSyncLabel; |
3284 // Creating two channels to make sure that sync label is set properly for both | 3325 // Creating two channels to make sure that sync label is set properly for both |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3374 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); | 3415 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); |
3375 EXPECT_EQ(1, s->received_packets()); | 3416 EXPECT_EQ(1, s->received_packets()); |
3376 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); | 3417 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); |
3377 EXPECT_EQ(2, s->received_packets()); | 3418 EXPECT_EQ(2, s->received_packets()); |
3378 } | 3419 } |
3379 | 3420 |
3380 // All receive channels should be associated with the first send channel, | 3421 // All receive channels should be associated with the first send channel, |
3381 // since they do not send RTCP SR. | 3422 // since they do not send RTCP SR. |
3382 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) { | 3423 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) { |
3383 EXPECT_TRUE(SetupSendStream()); | 3424 EXPECT_TRUE(SetupSendStream()); |
3384 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 3425 EXPECT_TRUE(AddRecvStream(kSsrcY)); |
3385 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 3426 EXPECT_EQ(kSsrcX, GetRecvStreamConfig(kSsrcY).rtp.local_ssrc); |
3386 EXPECT_TRUE(channel_->AddSendStream( | 3427 EXPECT_TRUE(channel_->AddSendStream( |
3387 cricket::StreamParams::CreateLegacy(kSsrc3))); | 3428 cricket::StreamParams::CreateLegacy(kSsrcZ))); |
3388 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 3429 EXPECT_EQ(kSsrcX, GetRecvStreamConfig(kSsrcY).rtp.local_ssrc); |
3389 EXPECT_TRUE(AddRecvStream(kSsrc4)); | 3430 EXPECT_TRUE(AddRecvStream(kSsrcW)); |
3390 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc4).rtp.local_ssrc); | 3431 EXPECT_EQ(kSsrcX, GetRecvStreamConfig(kSsrcW).rtp.local_ssrc); |
3391 } | 3432 } |
3392 | 3433 |
3393 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) { | 3434 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) { |
3394 EXPECT_TRUE(SetupRecvStream()); | 3435 EXPECT_TRUE(SetupRecvStream()); |
3395 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3436 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrcX).rtp.local_ssrc); |
3396 EXPECT_TRUE(channel_->AddSendStream( | 3437 EXPECT_TRUE(channel_->AddSendStream( |
3397 cricket::StreamParams::CreateLegacy(kSsrc2))); | 3438 cricket::StreamParams::CreateLegacy(kSsrcY))); |
3398 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3439 EXPECT_EQ(kSsrcY, GetRecvStreamConfig(kSsrcX).rtp.local_ssrc); |
3399 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 3440 EXPECT_TRUE(AddRecvStream(kSsrcZ)); |
3400 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); | 3441 EXPECT_EQ(kSsrcY, GetRecvStreamConfig(kSsrcZ).rtp.local_ssrc); |
3401 EXPECT_TRUE(channel_->AddSendStream( | 3442 EXPECT_TRUE(channel_->AddSendStream( |
3402 cricket::StreamParams::CreateLegacy(kSsrc4))); | 3443 cricket::StreamParams::CreateLegacy(kSsrcW))); |
3403 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); | 3444 EXPECT_EQ(kSsrcY, GetRecvStreamConfig(kSsrcX).rtp.local_ssrc); |
3404 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); | 3445 EXPECT_EQ(kSsrcY, GetRecvStreamConfig(kSsrcZ).rtp.local_ssrc); |
3405 } | 3446 } |
3406 | 3447 |
3407 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { | 3448 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { |
3408 EXPECT_TRUE(SetupChannel()); | 3449 EXPECT_TRUE(SetupChannel()); |
3409 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3450 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3410 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3451 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
3411 | 3452 |
3412 // Setting the sink before a recv stream exists should do nothing. | 3453 // Setting the sink before a recv stream exists should do nothing. |
3413 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); | 3454 channel_->SetRawAudioSink(kSsrcX, std::move(fake_sink_1)); |
3414 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 3455 EXPECT_TRUE(AddRecvStream(kSsrcX)); |
3415 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3456 EXPECT_EQ(nullptr, GetRecvStream(kSsrcX).sink()); |
3416 | 3457 |
3417 // Now try actually setting the sink. | 3458 // Now try actually setting the sink. |
3418 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); | 3459 channel_->SetRawAudioSink(kSsrcX, std::move(fake_sink_2)); |
3419 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); | 3460 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); |
3420 | 3461 |
3421 // Now try resetting it. | 3462 // Now try resetting it. |
3422 channel_->SetRawAudioSink(kSsrc1, nullptr); | 3463 channel_->SetRawAudioSink(kSsrcX, nullptr); |
3423 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3464 EXPECT_EQ(nullptr, GetRecvStream(kSsrcX).sink()); |
3424 } | 3465 } |
3425 | 3466 |
3426 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { | 3467 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkUnsignaledRecvStream) { |
3427 EXPECT_TRUE(SetupChannel()); | 3468 EXPECT_TRUE(SetupChannel()); |
3428 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3469 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3429 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3470 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
| 3471 std::unique_ptr<FakeAudioSink> fake_sink_3(new FakeAudioSink()); |
| 3472 std::unique_ptr<FakeAudioSink> fake_sink_4(new FakeAudioSink()); |
3430 | 3473 |
3431 // Should be able to set a default sink even when no stream exists. | 3474 // Should be able to set a default sink even when no stream exists. |
3432 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); | 3475 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); |
3433 | 3476 |
3434 // Create default channel and ensure it's assigned the default sink. | 3477 // Spawn an unsignaled stream by sending a packet - it should be assigned the |
| 3478 // default sink. |
3435 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3479 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3436 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3480 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3437 | 3481 |
3438 // Try resetting the default sink. | 3482 // Try resetting the default sink. |
3439 channel_->SetRawAudioSink(0, nullptr); | 3483 channel_->SetRawAudioSink(kSsrc0, nullptr); |
3440 EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); | 3484 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
3441 | 3485 |
3442 // Try setting the default sink while the default stream exists. | 3486 // Try setting the default sink while the default stream exists. |
3443 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); | 3487 channel_->SetRawAudioSink(kSsrc0, std::move(fake_sink_2)); |
3444 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3488 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3445 | 3489 |
3446 // If we remove and add a default stream, it should get the same sink. | 3490 // If we remove and add a default stream, it should get the same sink. |
3447 EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); | 3491 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1)); |
3448 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3492 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3449 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3493 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
| 3494 |
| 3495 // Spawn another unsignaled stream - it should be assigned the default sink |
| 3496 // and the previous unsignaled stream should lose it. |
| 3497 unsigned char pcmuFrame2[sizeof(kPcmuFrame)]; |
| 3498 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame)); |
| 3499 rtc::SetBE32(&pcmuFrame2[8], kSsrcX); |
| 3500 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2)); |
| 3501 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
| 3502 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); |
| 3503 |
| 3504 // Reset the default sink - the second unsignaled stream should lose it. |
| 3505 channel_->SetRawAudioSink(kSsrc0, nullptr); |
| 3506 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
| 3507 EXPECT_EQ(nullptr, GetRecvStream(kSsrcX).sink()); |
| 3508 |
| 3509 // Try setting the default sink while two streams exists. |
| 3510 channel_->SetRawAudioSink(kSsrc0, std::move(fake_sink_3)); |
| 3511 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
| 3512 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); |
| 3513 |
| 3514 // Try setting the sink for the first unsignaled stream using its known SSRC. |
| 3515 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_4)); |
| 3516 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
| 3517 EXPECT_NE(nullptr, GetRecvStream(kSsrcX).sink()); |
| 3518 EXPECT_NE(GetRecvStream(kSsrc1).sink(), GetRecvStream(kSsrcX).sink()); |
3450 } | 3519 } |
3451 | 3520 |
3452 // Test that, just like the video channel, the voice channel communicates the | 3521 // Test that, just like the video channel, the voice channel communicates the |
3453 // network state to the call. | 3522 // network state to the call. |
3454 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { | 3523 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { |
3455 EXPECT_TRUE(SetupChannel()); | 3524 EXPECT_TRUE(SetupChannel()); |
3456 | 3525 |
3457 EXPECT_EQ(webrtc::kNetworkUp, | 3526 EXPECT_EQ(webrtc::kNetworkUp, |
3458 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3527 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3459 EXPECT_EQ(webrtc::kNetworkUp, | 3528 EXPECT_EQ(webrtc::kNetworkUp, |
3460 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3529 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3461 | 3530 |
3462 channel_->OnReadyToSend(false); | 3531 channel_->OnReadyToSend(false); |
3463 EXPECT_EQ(webrtc::kNetworkDown, | 3532 EXPECT_EQ(webrtc::kNetworkDown, |
3464 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3533 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3465 EXPECT_EQ(webrtc::kNetworkUp, | 3534 EXPECT_EQ(webrtc::kNetworkUp, |
3466 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3535 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3467 | 3536 |
3468 channel_->OnReadyToSend(true); | 3537 channel_->OnReadyToSend(true); |
3469 EXPECT_EQ(webrtc::kNetworkUp, | 3538 EXPECT_EQ(webrtc::kNetworkUp, |
3470 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3539 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3471 EXPECT_EQ(webrtc::kNetworkUp, | 3540 EXPECT_EQ(webrtc::kNetworkUp, |
3472 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3541 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3473 } | 3542 } |
3474 | 3543 |
3475 // Test that playout is still started after changing parameters | 3544 // Test that playout is still started after changing parameters |
3476 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) { | 3545 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) { |
3477 SetupRecvStream(); | 3546 SetupRecvStream(); |
3478 channel_->SetPlayout(true); | 3547 channel_->SetPlayout(true); |
3479 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 3548 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); |
3480 | 3549 |
3481 // Changing RTP header extensions will recreate the AudioReceiveStream. | 3550 // Changing RTP header extensions will recreate the AudioReceiveStream. |
3482 cricket::AudioRecvParameters parameters; | 3551 cricket::AudioRecvParameters parameters; |
3483 parameters.extensions.push_back( | 3552 parameters.extensions.push_back( |
3484 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); | 3553 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); |
3485 channel_->SetRecvParameters(parameters); | 3554 channel_->SetRecvParameters(parameters); |
3486 | 3555 |
3487 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); | 3556 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); |
3488 } | 3557 } |
3489 | 3558 |
3490 // Tests that the library initializes and shuts down properly. | 3559 // Tests that the library initializes and shuts down properly. |
3491 TEST(WebRtcVoiceEngineTest, StartupShutdown) { | 3560 TEST(WebRtcVoiceEngineTest, StartupShutdown) { |
3492 // If the VoiceEngine wants to gather available codecs early, that's fine but | 3561 // If the VoiceEngine wants to gather available codecs early, that's fine but |
3493 // we never want it to create a decoder at this stage. | 3562 // we never want it to create a decoder at this stage. |
3494 cricket::WebRtcVoiceEngine engine( | 3563 cricket::WebRtcVoiceEngine engine( |
3495 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); | 3564 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); |
3496 webrtc::RtcEventLogNullImpl event_log; | 3565 webrtc::RtcEventLogNullImpl event_log; |
3497 std::unique_ptr<webrtc::Call> call( | 3566 std::unique_ptr<webrtc::Call> call( |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3730 // Without this cast, the comparison turned unsigned and, thus, failed for -1. | 3799 // Without this cast, the comparison turned unsigned and, thus, failed for -1. |
3731 const int num_specs = static_cast<int>(specs.size()); | 3800 const int num_specs = static_cast<int>(specs.size()); |
3732 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); | 3801 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); |
3733 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); | 3802 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); |
3734 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); | 3803 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); |
3735 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); | 3804 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); |
3736 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); | 3805 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); |
3737 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); | 3806 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); |
3738 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); | 3807 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); |
3739 } | 3808 } |
OLD | NEW |