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

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

Issue 2685893002: Support N unsignaled audio streams (Closed)
Patch Set: add histogram for # unsignaled audio streams Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 30 matching lines...) Expand all
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698