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

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

Issue 1315903004: ABANDONED: Remove the default receive channel in WVoE. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@mediacontroller
Patch Set: fix tests Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2008 Google Inc. 3 * Copyright 2008 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 }; 119 };
120 120
121 WebRtcVoiceEngineTestFake() 121 WebRtcVoiceEngineTestFake()
122 : call_(webrtc::Call::Config()), 122 : call_(webrtc::Call::Config()),
123 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)), 123 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)),
124 trace_wrapper_(new FakeVoETraceWrapper()), 124 trace_wrapper_(new FakeVoETraceWrapper()),
125 engine_(new FakeVoEWrapper(&voe_), trace_wrapper_), 125 engine_(new FakeVoEWrapper(&voe_), trace_wrapper_),
126 channel_(nullptr) { 126 channel_(nullptr) {
127 send_parameters_.codecs.push_back(kPcmuCodec); 127 send_parameters_.codecs.push_back(kPcmuCodec);
128 recv_parameters_.codecs.push_back(kPcmuCodec); 128 recv_parameters_.codecs.push_back(kPcmuCodec);
129 options_conference_.conference_mode.Set(true);
130 options_adjust_agc_.adjust_agc_delta.Set(-10); 129 options_adjust_agc_.adjust_agc_delta.Set(-10);
131 } 130 }
132 bool SetupEngineWithoutStream() { 131 bool SetupEngine() {
133 if (!engine_.Init(rtc::Thread::Current())) { 132 if (!engine_.Init(rtc::Thread::Current())) {
134 return false; 133 return false;
135 } 134 }
136 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); 135 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions());
137 return (channel_ != nullptr); 136 return (channel_ != nullptr);
138 } 137 }
139 bool SetupEngine() { 138 bool SetupEngineWithRecvStream() {
140 if (!SetupEngineWithoutStream()) { 139 if (!SetupEngine()) {
140 return false;
141 }
142 return channel_->AddRecvStream(
143 cricket::StreamParams::CreateLegacy(kSsrc1));
144 }
145 bool SetupEngineWithSendStream() {
146 if (!SetupEngine()) {
141 return false; 147 return false;
142 } 148 }
143 return channel_->AddSendStream( 149 return channel_->AddSendStream(
144 cricket::StreamParams::CreateLegacy(kSsrc1)); 150 cricket::StreamParams::CreateLegacy(kSsrc1));
145 } 151 }
146 void SetupForMultiSendStream() { 152 void SetupForMultiSendStream() {
147 EXPECT_TRUE(SetupEngine()); 153 EXPECT_TRUE(SetupEngineWithSendStream());
148 // Remove stream added in Setup, which is corresponding to default channel. 154 // Remove stream added in Setup, which is corresponding to default channel.
149 int default_channel_num = voe_.GetLastChannel(); 155 int default_channel_num = voe_.GetLastChannel();
150 uint32 default_send_ssrc = 0u; 156 uint32 default_send_ssrc = 0u;
151 EXPECT_EQ(0, voe_.GetLocalSSRC(default_channel_num, default_send_ssrc)); 157 EXPECT_EQ(0, voe_.GetLocalSSRC(default_channel_num, default_send_ssrc));
152 EXPECT_EQ(kSsrc1, default_send_ssrc); 158 EXPECT_EQ(kSsrc1, default_send_ssrc);
153 EXPECT_TRUE(channel_->RemoveSendStream(default_send_ssrc)); 159 EXPECT_TRUE(channel_->RemoveSendStream(default_send_ssrc));
154 160
155 // Verify the default channel still exists. 161 // Verify the default channel still exists.
156 EXPECT_EQ(0, voe_.GetLocalSSRC(default_channel_num, default_send_ssrc)); 162 EXPECT_EQ(0, voe_.GetLocalSSRC(default_channel_num, default_send_ssrc));
157 } 163 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 parameters.max_bandwidth_bps = max_bitrate; 234 parameters.max_bandwidth_bps = max_bitrate;
229 EXPECT_EQ(expected_result, channel_->SetSendParameters(parameters)); 235 EXPECT_EQ(expected_result, channel_->SetSendParameters(parameters));
230 236
231 int channel_num = voe_.GetLastChannel(); 237 int channel_num = voe_.GetLastChannel();
232 webrtc::CodecInst temp_codec; 238 webrtc::CodecInst temp_codec;
233 EXPECT_FALSE(voe_.GetSendCodec(channel_num, temp_codec)); 239 EXPECT_FALSE(voe_.GetSendCodec(channel_num, temp_codec));
234 EXPECT_EQ(expected_bitrate, temp_codec.rate); 240 EXPECT_EQ(expected_bitrate, temp_codec.rate);
235 } 241 }
236 242
237 void TestSetSendRtpHeaderExtensions(const std::string& ext) { 243 void TestSetSendRtpHeaderExtensions(const std::string& ext) {
238 EXPECT_TRUE(SetupEngineWithoutStream()); 244 EXPECT_TRUE(SetupEngine());
239 int channel_num = voe_.GetLastChannel(); 245 int channel_num = voe_.GetLastChannel();
240 246
241 // Ensure extensions are off by default. 247 // Ensure extensions are off by default.
242 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 248 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
243 249
244 // Ensure unknown extensions won't cause an error. 250 // Ensure unknown extensions won't cause an error.
245 send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( 251 send_parameters_.extensions.push_back(cricket::RtpHeaderExtension(
246 "urn:ietf:params:unknownextention", 1)); 252 "urn:ietf:params:unknownextention", 1));
247 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 253 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
248 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 254 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
(...skipping 21 matching lines...) Expand all
270 276
271 // Ensure all extensions go back off with an empty list. 277 // Ensure all extensions go back off with an empty list.
272 send_parameters_.codecs.push_back(kPcmuCodec); 278 send_parameters_.codecs.push_back(kPcmuCodec);
273 send_parameters_.extensions.clear(); 279 send_parameters_.extensions.clear();
274 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 280 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
275 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 281 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
276 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(new_channel_num, ext)); 282 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(new_channel_num, ext));
277 } 283 }
278 284
279 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { 285 void TestSetRecvRtpHeaderExtensions(const std::string& ext) {
280 EXPECT_TRUE(SetupEngineWithoutStream()); 286 EXPECT_TRUE(SetupEngineWithRecvStream());
281 int channel_num = voe_.GetLastChannel(); 287 int channel_num = voe_.GetLastChannel();
282 288
283 // Ensure extensions are off by default. 289 // Ensure extensions are off by default.
284 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 290 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
285 291
286 cricket::AudioRecvParameters parameters; 292 cricket::AudioRecvParameters parameters;
287 // Ensure unknown extensions won't cause an error. 293 // Ensure unknown extensions won't cause an error.
288 parameters.extensions.push_back(cricket::RtpHeaderExtension( 294 parameters.extensions.push_back(cricket::RtpHeaderExtension(
289 "urn:ietf:params:unknownextention", 1)); 295 "urn:ietf:params:unknownextention", 1));
290 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 296 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
291 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 297 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
292 298
293 // Ensure extensions stay off with an empty list of headers. 299 // Ensure extensions stay off with an empty list of headers.
294 parameters.extensions.clear(); 300 parameters.extensions.clear();
295 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 301 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
296 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 302 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
297 303
298 // Ensure extension is set properly. 304 // Ensure extension is set properly.
299 const int id = 2; 305 const int id = 2;
300 parameters.extensions.push_back(cricket::RtpHeaderExtension(ext, id)); 306 parameters.extensions.push_back(cricket::RtpHeaderExtension(ext, id));
301 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 307 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
302 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 308 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(channel_num, ext));
303 309
304 // Ensure extension is set properly on new channel. 310 // Ensure extension is set properly on new channel.
305 // The first stream to occupy the default channel. 311 // The first stream to occupy the default channel.
306 EXPECT_TRUE(channel_->AddRecvStream( 312 EXPECT_TRUE(channel_->AddRecvStream(
307 cricket::StreamParams::CreateLegacy(345))); 313 cricket::StreamParams::CreateLegacy(kSsrc2)));
308 EXPECT_TRUE(channel_->AddRecvStream(
309 cricket::StreamParams::CreateLegacy(456)));
310 int new_channel_num = voe_.GetLastChannel(); 314 int new_channel_num = voe_.GetLastChannel();
311 EXPECT_NE(channel_num, new_channel_num); 315 EXPECT_NE(channel_num, new_channel_num);
312 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 316 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
313 317
314 // Ensure all extensions go back off with an empty list. 318 // Ensure all extensions go back off with an empty list.
315 parameters.extensions.clear(); 319 parameters.extensions.clear();
316 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 320 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
317 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 321 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
318 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 322 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
319 } 323 }
320 324
321 protected: 325 protected:
322 cricket::FakeCall call_; 326 cricket::FakeCall call_;
323 cricket::FakeWebRtcVoiceEngine voe_; 327 cricket::FakeWebRtcVoiceEngine voe_;
324 FakeVoETraceWrapper* trace_wrapper_; 328 FakeVoETraceWrapper* trace_wrapper_;
325 cricket::WebRtcVoiceEngine engine_; 329 cricket::WebRtcVoiceEngine engine_;
326 cricket::VoiceMediaChannel* channel_; 330 cricket::VoiceMediaChannel* channel_;
327 331
328 cricket::AudioSendParameters send_parameters_; 332 cricket::AudioSendParameters send_parameters_;
329 cricket::AudioRecvParameters recv_parameters_; 333 cricket::AudioRecvParameters recv_parameters_;
330 cricket::AudioOptions options_conference_;
331 cricket::AudioOptions options_adjust_agc_; 334 cricket::AudioOptions options_adjust_agc_;
332 }; 335 };
333 336
334 // Tests that our stub library "works". 337 // Tests that our stub library "works".
335 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { 338 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) {
336 EXPECT_FALSE(voe_.IsInited()); 339 EXPECT_FALSE(voe_.IsInited());
337 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 340 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
338 EXPECT_TRUE(voe_.IsInited()); 341 EXPECT_TRUE(voe_.IsInited());
339 engine_.Terminate(); 342 engine_.Terminate();
340 EXPECT_FALSE(voe_.IsInited()); 343 EXPECT_FALSE(voe_.IsInited());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 codec = kIsacCodec; 406 codec = kIsacCodec;
404 codec.bitrate = 32000; 407 codec.bitrate = 32000;
405 EXPECT_TRUE(engine_.FindWebRtcCodec(codec, &codec_inst)); 408 EXPECT_TRUE(engine_.FindWebRtcCodec(codec, &codec_inst));
406 EXPECT_EQ(codec.id, codec_inst.pltype); 409 EXPECT_EQ(codec.id, codec_inst.pltype);
407 EXPECT_EQ(32000, codec_inst.rate); 410 EXPECT_EQ(32000, codec_inst.rate);
408 } 411 }
409 412
410 // Test that we set our inbound codecs properly, including changing PT. 413 // Test that we set our inbound codecs properly, including changing PT.
411 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { 414 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) {
412 EXPECT_TRUE(SetupEngine()); 415 EXPECT_TRUE(SetupEngine());
413 int channel_num = voe_.GetLastChannel();
414 cricket::AudioRecvParameters parameters; 416 cricket::AudioRecvParameters parameters;
415 parameters.codecs.push_back(kIsacCodec); 417 parameters.codecs.push_back(kIsacCodec);
416 parameters.codecs.push_back(kPcmuCodec); 418 parameters.codecs.push_back(kPcmuCodec);
417 parameters.codecs.push_back(kTelephoneEventCodec); 419 parameters.codecs.push_back(kTelephoneEventCodec);
418 parameters.codecs[0].id = 106; // collide with existing telephone-event 420 parameters.codecs[0].id = 106; // collide with existing telephone-event
419 parameters.codecs[2].id = 126; 421 parameters.codecs[2].id = 126;
420 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 422 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
423 EXPECT_TRUE(channel_->AddRecvStream(
424 cricket::StreamParams::CreateLegacy(kSsrc1)));
425 int channel_num = voe_.GetLastChannel();
421 webrtc::CodecInst gcodec; 426 webrtc::CodecInst gcodec;
422 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC"); 427 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC");
423 gcodec.plfreq = 16000; 428 gcodec.plfreq = 16000;
424 gcodec.channels = 1; 429 gcodec.channels = 1;
425 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); 430 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec));
426 EXPECT_EQ(106, gcodec.pltype); 431 EXPECT_EQ(106, gcodec.pltype);
427 EXPECT_STREQ("ISAC", gcodec.plname); 432 EXPECT_STREQ("ISAC", gcodec.plname);
428 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), 433 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname),
429 "telephone-event"); 434 "telephone-event");
430 gcodec.plfreq = 8000; 435 gcodec.plfreq = 8000;
(...skipping 24 matching lines...) Expand all
455 // Test that we can decode OPUS without stereo parameters. 460 // Test that we can decode OPUS without stereo parameters.
456 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { 461 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) {
457 EXPECT_TRUE(SetupEngine()); 462 EXPECT_TRUE(SetupEngine());
458 cricket::AudioRecvParameters parameters; 463 cricket::AudioRecvParameters parameters;
459 parameters.codecs.push_back(kIsacCodec); 464 parameters.codecs.push_back(kIsacCodec);
460 parameters.codecs.push_back(kPcmuCodec); 465 parameters.codecs.push_back(kPcmuCodec);
461 parameters.codecs.push_back(kOpusCodec); 466 parameters.codecs.push_back(kOpusCodec);
462 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 467 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
463 EXPECT_TRUE(channel_->AddRecvStream( 468 EXPECT_TRUE(channel_->AddRecvStream(
464 cricket::StreamParams::CreateLegacy(kSsrc1))); 469 cricket::StreamParams::CreateLegacy(kSsrc1)));
465 int channel_num2 = voe_.GetLastChannel(); 470 int channel_num = voe_.GetLastChannel();
466 webrtc::CodecInst opus; 471 webrtc::CodecInst opus;
467 engine_.FindWebRtcCodec(kOpusCodec, &opus); 472 engine_.FindWebRtcCodec(kOpusCodec, &opus);
468 // Even without stereo parameters, recv codecs still specify channels = 2. 473 // Even without stereo parameters, recv codecs still specify channels = 2.
469 EXPECT_EQ(2, opus.channels); 474 EXPECT_EQ(2, opus.channels);
470 EXPECT_EQ(111, opus.pltype); 475 EXPECT_EQ(111, opus.pltype);
471 EXPECT_STREQ("opus", opus.plname); 476 EXPECT_STREQ("opus", opus.plname);
472 opus.pltype = 0; 477 opus.pltype = 0;
473 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 478 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus));
474 EXPECT_EQ(111, opus.pltype); 479 EXPECT_EQ(111, opus.pltype);
475 } 480 }
476 481
477 // Test that we can decode OPUS with stereo = 0. 482 // Test that we can decode OPUS with stereo = 0.
478 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { 483 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) {
479 EXPECT_TRUE(SetupEngine()); 484 EXPECT_TRUE(SetupEngine());
480 cricket::AudioRecvParameters parameters; 485 cricket::AudioRecvParameters parameters;
481 parameters.codecs.push_back(kIsacCodec); 486 parameters.codecs.push_back(kIsacCodec);
482 parameters.codecs.push_back(kPcmuCodec); 487 parameters.codecs.push_back(kPcmuCodec);
483 parameters.codecs.push_back(kOpusCodec); 488 parameters.codecs.push_back(kOpusCodec);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), 547 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname),
543 "telephone-event"); 548 "telephone-event");
544 gcodec.plfreq = 8000; 549 gcodec.plfreq = 8000;
545 gcodec.channels = 1; 550 gcodec.channels = 1;
546 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 551 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
547 EXPECT_EQ(126, gcodec.pltype); 552 EXPECT_EQ(126, gcodec.pltype);
548 EXPECT_STREQ("telephone-event", gcodec.plname); 553 EXPECT_STREQ("telephone-event", gcodec.plname);
549 } 554 }
550 555
551 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { 556 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) {
552 EXPECT_TRUE(SetupEngine()); 557 EXPECT_TRUE(SetupEngineWithRecvStream());
553 cricket::AudioRecvParameters parameters; 558 cricket::AudioRecvParameters parameters;
554 parameters.codecs.push_back(kIsacCodec); 559 parameters.codecs.push_back(kIsacCodec);
555 parameters.codecs[0].id = 106; // collide with existing telephone-event 560 parameters.codecs[0].id = 106; // collide with existing telephone-event
556 EXPECT_TRUE(channel_->AddRecvStream(
557 cricket::StreamParams::CreateLegacy(kSsrc1)));
558 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 561 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
559 562
560 int channel_num2 = voe_.GetLastChannel(); 563 int channel_num2 = voe_.GetLastChannel();
561 webrtc::CodecInst gcodec; 564 webrtc::CodecInst gcodec;
562 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC"); 565 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC");
563 gcodec.plfreq = 16000; 566 gcodec.plfreq = 16000;
564 gcodec.channels = 1; 567 gcodec.channels = 1;
565 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 568 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
566 EXPECT_EQ(106, gcodec.pltype); 569 EXPECT_EQ(106, gcodec.pltype);
567 EXPECT_STREQ("ISAC", gcodec.plname); 570 EXPECT_STREQ("ISAC", gcodec.plname);
568 } 571 }
569 572
570 // Test that we can apply the same set of codecs again while playing. 573 // Test that we can apply the same set of codecs again while playing.
571 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { 574 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) {
572 EXPECT_TRUE(SetupEngine()); 575 EXPECT_TRUE(SetupEngineWithRecvStream());
573 cricket::AudioRecvParameters parameters; 576 cricket::AudioRecvParameters parameters;
574 parameters.codecs.push_back(kIsacCodec); 577 parameters.codecs.push_back(kIsacCodec);
575 parameters.codecs.push_back(kCn16000Codec); 578 parameters.codecs.push_back(kCn16000Codec);
576 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 579 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
577 EXPECT_TRUE(channel_->SetPlayout(true)); 580 EXPECT_TRUE(channel_->SetPlayout(true));
578 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 581 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
579 582
580 // Changing the payload type of a codec should fail. 583 // Changing the payload type of a codec should fail.
581 parameters.codecs[0].id = 127; 584 parameters.codecs[0].id = 127;
582 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); 585 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
583 int channel_num = voe_.GetLastChannel(); 586 int channel_num = voe_.GetLastChannel();
584 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 587 EXPECT_TRUE(voe_.GetPlayout(channel_num));
585 } 588 }
586 589
587 // Test that we can add a codec while playing. 590 // Test that we can add a codec while playing.
588 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { 591 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) {
589 EXPECT_TRUE(SetupEngine()); 592 EXPECT_TRUE(SetupEngineWithRecvStream());
590 cricket::AudioRecvParameters parameters; 593 cricket::AudioRecvParameters parameters;
591 parameters.codecs.push_back(kIsacCodec); 594 parameters.codecs.push_back(kIsacCodec);
592 parameters.codecs.push_back(kCn16000Codec); 595 parameters.codecs.push_back(kCn16000Codec);
593 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 596 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
594 EXPECT_TRUE(channel_->SetPlayout(true)); 597 EXPECT_TRUE(channel_->SetPlayout(true));
595 598
596 parameters.codecs.push_back(kOpusCodec); 599 parameters.codecs.push_back(kOpusCodec);
597 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 600 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
598 int channel_num = voe_.GetLastChannel(); 601 int channel_num = voe_.GetLastChannel();
599 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 602 EXPECT_TRUE(voe_.GetPlayout(channel_num));
600 webrtc::CodecInst gcodec; 603 webrtc::CodecInst gcodec;
601 EXPECT_TRUE(engine_.FindWebRtcCodec(kOpusCodec, &gcodec)); 604 EXPECT_TRUE(engine_.FindWebRtcCodec(kOpusCodec, &gcodec));
602 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); 605 EXPECT_EQ(kOpusCodec.id, gcodec.pltype);
603 } 606 }
604 607
605 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { 608 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) {
606 EXPECT_TRUE(SetupEngine()); 609 EXPECT_TRUE(SetupEngineWithSendStream());
607 610
608 // Test that when autobw is enabled, bitrate is kept as the default 611 // Test that when autobw is enabled, bitrate is kept as the default
609 // value. autobw is enabled for the following tests because the target 612 // value. autobw is enabled for the following tests because the target
610 // bitrate is <= 0. 613 // bitrate is <= 0.
611 614
612 // ISAC, default bitrate == 32000. 615 // ISAC, default bitrate == 32000.
613 TestSendBandwidth(kIsacCodec, 0, true, 32000); 616 TestSendBandwidth(kIsacCodec, 0, true, 32000);
614 617
615 // PCMU, default bitrate == 64000. 618 // PCMU, default bitrate == 64000.
616 TestSendBandwidth(kPcmuCodec, -1, true, 64000); 619 TestSendBandwidth(kPcmuCodec, -1, true, 64000);
617 620
618 // opus, default bitrate == 64000. 621 // opus, default bitrate == 64000.
619 TestSendBandwidth(kOpusCodec, -1, true, 64000); 622 TestSendBandwidth(kOpusCodec, -1, true, 64000);
620 } 623 }
621 624
622 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { 625 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) {
623 EXPECT_TRUE(SetupEngine()); 626 EXPECT_TRUE(SetupEngineWithSendStream());
624 627
625 // Test that the bitrate of a multi-rate codec is always the maximum. 628 // Test that the bitrate of a multi-rate codec is always the maximum.
626 629
627 // ISAC, default bitrate == 32000. 630 // ISAC, default bitrate == 32000.
628 TestSendBandwidth(kIsacCodec, 128000, true, 128000); 631 TestSendBandwidth(kIsacCodec, 128000, true, 128000);
629 TestSendBandwidth(kIsacCodec, 16000, true, 16000); 632 TestSendBandwidth(kIsacCodec, 16000, true, 16000);
630 633
631 // opus, default bitrate == 64000. 634 // opus, default bitrate == 64000.
632 TestSendBandwidth(kOpusCodec, 96000, true, 96000); 635 TestSendBandwidth(kOpusCodec, 96000, true, 96000);
633 TestSendBandwidth(kOpusCodec, 48000, true, 48000); 636 TestSendBandwidth(kOpusCodec, 48000, true, 48000);
634 } 637 }
635 638
636 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { 639 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) {
637 EXPECT_TRUE(SetupEngine()); 640 EXPECT_TRUE(SetupEngineWithSendStream());
638 641
639 // Test that we can only set a maximum bitrate for a fixed-rate codec 642 // Test that we can only set a maximum bitrate for a fixed-rate codec
640 // if it's bigger than the fixed rate. 643 // if it's bigger than the fixed rate.
641 644
642 // PCMU, fixed bitrate == 64000. 645 // PCMU, fixed bitrate == 64000.
643 TestSendBandwidth(kPcmuCodec, 0, true, 64000); 646 TestSendBandwidth(kPcmuCodec, 0, true, 64000);
644 TestSendBandwidth(kPcmuCodec, 1, false, 64000); 647 TestSendBandwidth(kPcmuCodec, 1, false, 64000);
645 TestSendBandwidth(kPcmuCodec, 128000, true, 64000); 648 TestSendBandwidth(kPcmuCodec, 128000, true, 64000);
646 TestSendBandwidth(kPcmuCodec, 32000, false, 64000); 649 TestSendBandwidth(kPcmuCodec, 32000, false, 64000);
647 TestSendBandwidth(kPcmuCodec, 64000, true, 64000); 650 TestSendBandwidth(kPcmuCodec, 64000, true, 64000);
648 TestSendBandwidth(kPcmuCodec, 63999, false, 64000); 651 TestSendBandwidth(kPcmuCodec, 63999, false, 64000);
649 TestSendBandwidth(kPcmuCodec, 64001, true, 64000); 652 TestSendBandwidth(kPcmuCodec, 64001, true, 64000);
650 } 653 }
651 654
652 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { 655 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) {
653 EXPECT_TRUE(SetupEngineWithoutStream()); 656 EXPECT_TRUE(SetupEngine());
654 const int kDesiredBitrate = 128000; 657 const int kDesiredBitrate = 128000;
655 cricket::AudioSendParameters parameters; 658 cricket::AudioSendParameters parameters;
656 parameters.codecs = engine_.codecs(); 659 parameters.codecs = engine_.codecs();
657 parameters.max_bandwidth_bps = kDesiredBitrate; 660 parameters.max_bandwidth_bps = kDesiredBitrate;
658 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 661 EXPECT_TRUE(channel_->SetSendParameters(parameters));
659 662
660 EXPECT_TRUE(channel_->AddSendStream( 663 EXPECT_TRUE(channel_->AddSendStream(
661 cricket::StreamParams::CreateLegacy(kSsrc1))); 664 cricket::StreamParams::CreateLegacy(kSsrc1)));
662 665
663 int channel_num = voe_.GetLastChannel(); 666 int channel_num = voe_.GetLastChannel();
664 webrtc::CodecInst codec; 667 webrtc::CodecInst codec;
665 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 668 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
666 EXPECT_EQ(kDesiredBitrate, codec.rate); 669 EXPECT_EQ(kDesiredBitrate, codec.rate);
667 } 670 }
668 671
669 // Test that bitrate cannot be set for CBR codecs. 672 // Test that bitrate cannot be set for CBR codecs.
670 // Bitrate is ignored if it is higher than the fixed bitrate. 673 // Bitrate is ignored if it is higher than the fixed bitrate.
671 // Bitrate less then the fixed bitrate is an error. 674 // Bitrate less then the fixed bitrate is an error.
672 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { 675 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) {
673 EXPECT_TRUE(SetupEngine()); 676 EXPECT_TRUE(SetupEngineWithSendStream());
674 677
675 // PCMU, default bitrate == 64000. 678 // PCMU, default bitrate == 64000.
676 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 679 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
677 int channel_num = voe_.GetLastChannel(); 680 int channel_num = voe_.GetLastChannel();
678 webrtc::CodecInst codec; 681 webrtc::CodecInst codec;
679 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 682 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
680 EXPECT_EQ(64000, codec.rate); 683 EXPECT_EQ(64000, codec.rate);
681 684
682 send_parameters_.max_bandwidth_bps = 128000; 685 send_parameters_.max_bandwidth_bps = 128000;
683 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 686 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
684 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 687 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
685 EXPECT_EQ(64000, codec.rate); 688 EXPECT_EQ(64000, codec.rate);
686 689
687 send_parameters_.max_bandwidth_bps = 128; 690 send_parameters_.max_bandwidth_bps = 128;
688 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); 691 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
689 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 692 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
690 EXPECT_EQ(64000, codec.rate); 693 EXPECT_EQ(64000, codec.rate);
691 } 694 }
692 695
693 // Test that we apply codecs properly. 696 // Test that we apply codecs properly.
694 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { 697 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) {
695 EXPECT_TRUE(SetupEngine()); 698 EXPECT_TRUE(SetupEngineWithSendStream());
696 cricket::AudioSendParameters parameters; 699 cricket::AudioSendParameters parameters;
697 parameters.codecs.push_back(kIsacCodec); 700 parameters.codecs.push_back(kIsacCodec);
698 parameters.codecs.push_back(kPcmuCodec); 701 parameters.codecs.push_back(kPcmuCodec);
699 parameters.codecs.push_back(kRedCodec); 702 parameters.codecs.push_back(kRedCodec);
700 parameters.codecs[0].id = 96; 703 parameters.codecs[0].id = 96;
701 parameters.codecs[0].bitrate = 48000; 704 parameters.codecs[0].bitrate = 48000;
702 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 705 EXPECT_TRUE(channel_->SetSendParameters(parameters));
703 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 706 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
704 int channel_num = voe_.GetLastChannel(); 707 int channel_num = voe_.GetLastChannel();
705 webrtc::CodecInst gcodec; 708 webrtc::CodecInst gcodec;
706 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 709 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
707 EXPECT_EQ(96, gcodec.pltype); 710 EXPECT_EQ(96, gcodec.pltype);
708 EXPECT_EQ(48000, gcodec.rate); 711 EXPECT_EQ(48000, gcodec.rate);
709 EXPECT_STREQ("ISAC", gcodec.plname); 712 EXPECT_STREQ("ISAC", gcodec.plname);
710 EXPECT_FALSE(voe_.GetVAD(channel_num)); 713 EXPECT_FALSE(voe_.GetVAD(channel_num));
711 EXPECT_FALSE(voe_.GetRED(channel_num)); 714 EXPECT_FALSE(voe_.GetRED(channel_num));
712 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 715 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
713 EXPECT_EQ(105, voe_.GetSendCNPayloadType(channel_num, true)); 716 EXPECT_EQ(105, voe_.GetSendCNPayloadType(channel_num, true));
714 EXPECT_EQ(106, voe_.GetSendTelephoneEventPayloadType(channel_num)); 717 EXPECT_EQ(106, voe_.GetSendTelephoneEventPayloadType(channel_num));
715 } 718 }
716 719
717 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 720 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried
718 // to apply. 721 // to apply.
719 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { 722 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) {
720 EXPECT_TRUE(SetupEngine()); 723 EXPECT_TRUE(SetupEngineWithSendStream());
721 cricket::AudioSendParameters parameters; 724 cricket::AudioSendParameters parameters;
722 parameters.codecs.push_back(kIsacCodec); 725 parameters.codecs.push_back(kIsacCodec);
723 parameters.codecs.push_back(kPcmuCodec); 726 parameters.codecs.push_back(kPcmuCodec);
724 parameters.codecs.push_back(kRedCodec); 727 parameters.codecs.push_back(kRedCodec);
725 parameters.codecs[0].id = 96; 728 parameters.codecs[0].id = 96;
726 parameters.codecs[0].bitrate = 48000; 729 parameters.codecs[0].bitrate = 48000;
727 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 730 EXPECT_TRUE(channel_->SetSendParameters(parameters));
728 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 731 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
729 // Calling SetSendCodec again with same codec which is already set. 732 // Calling SetSendCodec again with same codec which is already set.
730 // In this case media channel shouldn't send codec to VoE. 733 // In this case media channel shouldn't send codec to VoE.
731 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 734 EXPECT_TRUE(channel_->SetSendParameters(parameters));
732 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 735 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
733 } 736 }
734 737
735 // Verify that G722 is set with 16000 samples per second to WebRTC. 738 // Verify that G722 is set with 16000 samples per second to WebRTC.
736 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 739 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) {
737 EXPECT_TRUE(SetupEngine()); 740 EXPECT_TRUE(SetupEngineWithSendStream());
738 int channel_num = voe_.GetLastChannel(); 741 int channel_num = voe_.GetLastChannel();
739 cricket::AudioSendParameters parameters; 742 cricket::AudioSendParameters parameters;
740 parameters.codecs.push_back(kG722CodecSdp); 743 parameters.codecs.push_back(kG722CodecSdp);
741 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 744 EXPECT_TRUE(channel_->SetSendParameters(parameters));
742 webrtc::CodecInst gcodec; 745 webrtc::CodecInst gcodec;
743 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 746 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
744 EXPECT_STREQ("G722", gcodec.plname); 747 EXPECT_STREQ("G722", gcodec.plname);
745 EXPECT_EQ(1, gcodec.channels); 748 EXPECT_EQ(1, gcodec.channels);
746 EXPECT_EQ(16000, gcodec.plfreq); 749 EXPECT_EQ(16000, gcodec.plfreq);
747 } 750 }
748 751
749 // Test that if clockrate is not 48000 for opus, we fail. 752 // Test that if clockrate is not 48000 for opus, we fail.
750 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 753 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
751 EXPECT_TRUE(SetupEngine()); 754 EXPECT_TRUE(SetupEngineWithSendStream());
752 cricket::AudioSendParameters parameters; 755 cricket::AudioSendParameters parameters;
753 parameters.codecs.push_back(kOpusCodec); 756 parameters.codecs.push_back(kOpusCodec);
754 parameters.codecs[0].bitrate = 0; 757 parameters.codecs[0].bitrate = 0;
755 parameters.codecs[0].clockrate = 50000; 758 parameters.codecs[0].clockrate = 50000;
756 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 759 EXPECT_FALSE(channel_->SetSendParameters(parameters));
757 } 760 }
758 761
759 // Test that if channels=0 for opus, we fail. 762 // Test that if channels=0 for opus, we fail.
760 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0ChannelsNoStereo) { 763 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0ChannelsNoStereo) {
761 EXPECT_TRUE(SetupEngine()); 764 EXPECT_TRUE(SetupEngineWithSendStream());
762 cricket::AudioSendParameters parameters; 765 cricket::AudioSendParameters parameters;
763 parameters.codecs.push_back(kOpusCodec); 766 parameters.codecs.push_back(kOpusCodec);
764 parameters.codecs[0].bitrate = 0; 767 parameters.codecs[0].bitrate = 0;
765 parameters.codecs[0].channels = 0; 768 parameters.codecs[0].channels = 0;
766 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 769 EXPECT_FALSE(channel_->SetSendParameters(parameters));
767 } 770 }
768 771
769 // Test that if channels=0 for opus, we fail. 772 // Test that if channels=0 for opus, we fail.
770 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0Channels1Stereo) { 773 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0Channels1Stereo) {
771 EXPECT_TRUE(SetupEngine()); 774 EXPECT_TRUE(SetupEngineWithSendStream());
772 cricket::AudioSendParameters parameters; 775 cricket::AudioSendParameters parameters;
773 parameters.codecs.push_back(kOpusCodec); 776 parameters.codecs.push_back(kOpusCodec);
774 parameters.codecs[0].bitrate = 0; 777 parameters.codecs[0].bitrate = 0;
775 parameters.codecs[0].channels = 0; 778 parameters.codecs[0].channels = 0;
776 parameters.codecs[0].params["stereo"] = "1"; 779 parameters.codecs[0].params["stereo"] = "1";
777 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 780 EXPECT_FALSE(channel_->SetSendParameters(parameters));
778 } 781 }
779 782
780 // Test that if channel is 1 for opus and there's no stereo, we fail. 783 // Test that if channel is 1 for opus and there's no stereo, we fail.
781 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpus1ChannelNoStereo) { 784 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpus1ChannelNoStereo) {
782 EXPECT_TRUE(SetupEngine()); 785 EXPECT_TRUE(SetupEngineWithSendStream());
783 cricket::AudioSendParameters parameters; 786 cricket::AudioSendParameters parameters;
784 parameters.codecs.push_back(kOpusCodec); 787 parameters.codecs.push_back(kOpusCodec);
785 parameters.codecs[0].bitrate = 0; 788 parameters.codecs[0].bitrate = 0;
786 parameters.codecs[0].channels = 1; 789 parameters.codecs[0].channels = 1;
787 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 790 EXPECT_FALSE(channel_->SetSendParameters(parameters));
788 } 791 }
789 792
790 // Test that if channel is 1 for opus and stereo=0, we fail. 793 // Test that if channel is 1 for opus and stereo=0, we fail.
791 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel0Stereo) { 794 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel0Stereo) {
792 EXPECT_TRUE(SetupEngine()); 795 EXPECT_TRUE(SetupEngineWithSendStream());
793 cricket::AudioSendParameters parameters; 796 cricket::AudioSendParameters parameters;
794 parameters.codecs.push_back(kOpusCodec); 797 parameters.codecs.push_back(kOpusCodec);
795 parameters.codecs[0].bitrate = 0; 798 parameters.codecs[0].bitrate = 0;
796 parameters.codecs[0].channels = 1; 799 parameters.codecs[0].channels = 1;
797 parameters.codecs[0].params["stereo"] = "0"; 800 parameters.codecs[0].params["stereo"] = "0";
798 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 801 EXPECT_FALSE(channel_->SetSendParameters(parameters));
799 } 802 }
800 803
801 // Test that if channel is 1 for opus and stereo=1, we fail. 804 // Test that if channel is 1 for opus and stereo=1, we fail.
802 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { 805 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) {
803 EXPECT_TRUE(SetupEngine()); 806 EXPECT_TRUE(SetupEngineWithSendStream());
804 cricket::AudioSendParameters parameters; 807 cricket::AudioSendParameters parameters;
805 parameters.codecs.push_back(kOpusCodec); 808 parameters.codecs.push_back(kOpusCodec);
806 parameters.codecs[0].bitrate = 0; 809 parameters.codecs[0].bitrate = 0;
807 parameters.codecs[0].channels = 1; 810 parameters.codecs[0].channels = 1;
808 parameters.codecs[0].params["stereo"] = "1"; 811 parameters.codecs[0].params["stereo"] = "1";
809 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 812 EXPECT_FALSE(channel_->SetSendParameters(parameters));
810 } 813 }
811 814
812 // Test that with bitrate=0 and no stereo, 815 // Test that with bitrate=0 and no stereo,
813 // channels and bitrate are 1 and 32000. 816 // channels and bitrate are 1 and 32000.
814 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 817 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
815 EXPECT_TRUE(SetupEngine()); 818 EXPECT_TRUE(SetupEngineWithSendStream());
816 int channel_num = voe_.GetLastChannel(); 819 int channel_num = voe_.GetLastChannel();
817 cricket::AudioSendParameters parameters; 820 cricket::AudioSendParameters parameters;
818 parameters.codecs.push_back(kOpusCodec); 821 parameters.codecs.push_back(kOpusCodec);
819 parameters.codecs[0].bitrate = 0; 822 parameters.codecs[0].bitrate = 0;
820 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 823 EXPECT_TRUE(channel_->SetSendParameters(parameters));
821 webrtc::CodecInst gcodec; 824 webrtc::CodecInst gcodec;
822 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 825 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
823 EXPECT_STREQ("opus", gcodec.plname); 826 EXPECT_STREQ("opus", gcodec.plname);
824 EXPECT_EQ(1, gcodec.channels); 827 EXPECT_EQ(1, gcodec.channels);
825 EXPECT_EQ(32000, gcodec.rate); 828 EXPECT_EQ(32000, gcodec.rate);
826 } 829 }
827 830
828 // Test that with bitrate=0 and stereo=0, 831 // Test that with bitrate=0 and stereo=0,
829 // channels and bitrate are 1 and 32000. 832 // channels and bitrate are 1 and 32000.
830 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 833 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
831 EXPECT_TRUE(SetupEngine()); 834 EXPECT_TRUE(SetupEngineWithSendStream());
832 int channel_num = voe_.GetLastChannel(); 835 int channel_num = voe_.GetLastChannel();
833 cricket::AudioSendParameters parameters; 836 cricket::AudioSendParameters parameters;
834 parameters.codecs.push_back(kOpusCodec); 837 parameters.codecs.push_back(kOpusCodec);
835 parameters.codecs[0].bitrate = 0; 838 parameters.codecs[0].bitrate = 0;
836 parameters.codecs[0].params["stereo"] = "0"; 839 parameters.codecs[0].params["stereo"] = "0";
837 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 840 EXPECT_TRUE(channel_->SetSendParameters(parameters));
838 webrtc::CodecInst gcodec; 841 webrtc::CodecInst gcodec;
839 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 842 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
840 EXPECT_STREQ("opus", gcodec.plname); 843 EXPECT_STREQ("opus", gcodec.plname);
841 EXPECT_EQ(1, gcodec.channels); 844 EXPECT_EQ(1, gcodec.channels);
842 EXPECT_EQ(32000, gcodec.rate); 845 EXPECT_EQ(32000, gcodec.rate);
843 } 846 }
844 847
845 // Test that with bitrate=invalid and stereo=0, 848 // Test that with bitrate=invalid and stereo=0,
846 // channels and bitrate are 1 and 32000. 849 // channels and bitrate are 1 and 32000.
847 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 850 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
848 EXPECT_TRUE(SetupEngine()); 851 EXPECT_TRUE(SetupEngineWithSendStream());
849 int channel_num = voe_.GetLastChannel(); 852 int channel_num = voe_.GetLastChannel();
850 cricket::AudioSendParameters parameters; 853 cricket::AudioSendParameters parameters;
851 parameters.codecs.push_back(kOpusCodec); 854 parameters.codecs.push_back(kOpusCodec);
852 parameters.codecs[0].params["stereo"] = "0"; 855 parameters.codecs[0].params["stereo"] = "0";
853 webrtc::CodecInst gcodec; 856 webrtc::CodecInst gcodec;
854 857
855 // bitrate that's out of the range between 6000 and 510000 will be clamped. 858 // bitrate that's out of the range between 6000 and 510000 will be clamped.
856 parameters.codecs[0].bitrate = 5999; 859 parameters.codecs[0].bitrate = 5999;
857 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 860 EXPECT_TRUE(channel_->SetSendParameters(parameters));
858 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 861 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
859 EXPECT_STREQ("opus", gcodec.plname); 862 EXPECT_STREQ("opus", gcodec.plname);
860 EXPECT_EQ(1, gcodec.channels); 863 EXPECT_EQ(1, gcodec.channels);
861 EXPECT_EQ(6000, gcodec.rate); 864 EXPECT_EQ(6000, gcodec.rate);
862 865
863 parameters.codecs[0].bitrate = 510001; 866 parameters.codecs[0].bitrate = 510001;
864 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 867 EXPECT_TRUE(channel_->SetSendParameters(parameters));
865 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 868 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
866 EXPECT_STREQ("opus", gcodec.plname); 869 EXPECT_STREQ("opus", gcodec.plname);
867 EXPECT_EQ(1, gcodec.channels); 870 EXPECT_EQ(1, gcodec.channels);
868 EXPECT_EQ(510000, gcodec.rate); 871 EXPECT_EQ(510000, gcodec.rate);
869 } 872 }
870 873
871 // Test that with bitrate=0 and stereo=1, 874 // Test that with bitrate=0 and stereo=1,
872 // channels and bitrate are 2 and 64000. 875 // channels and bitrate are 2 and 64000.
873 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 876 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
874 EXPECT_TRUE(SetupEngine()); 877 EXPECT_TRUE(SetupEngineWithSendStream());
875 int channel_num = voe_.GetLastChannel(); 878 int channel_num = voe_.GetLastChannel();
876 cricket::AudioSendParameters parameters; 879 cricket::AudioSendParameters parameters;
877 parameters.codecs.push_back(kOpusCodec); 880 parameters.codecs.push_back(kOpusCodec);
878 parameters.codecs[0].bitrate = 0; 881 parameters.codecs[0].bitrate = 0;
879 parameters.codecs[0].params["stereo"] = "1"; 882 parameters.codecs[0].params["stereo"] = "1";
880 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 883 EXPECT_TRUE(channel_->SetSendParameters(parameters));
881 webrtc::CodecInst gcodec; 884 webrtc::CodecInst gcodec;
882 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 885 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
883 EXPECT_STREQ("opus", gcodec.plname); 886 EXPECT_STREQ("opus", gcodec.plname);
884 EXPECT_EQ(2, gcodec.channels); 887 EXPECT_EQ(2, gcodec.channels);
885 EXPECT_EQ(64000, gcodec.rate); 888 EXPECT_EQ(64000, gcodec.rate);
886 } 889 }
887 890
888 // Test that with bitrate=invalid and stereo=1, 891 // Test that with bitrate=invalid and stereo=1,
889 // channels and bitrate are 2 and 64000. 892 // channels and bitrate are 2 and 64000.
890 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 893 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
891 EXPECT_TRUE(SetupEngine()); 894 EXPECT_TRUE(SetupEngineWithSendStream());
892 int channel_num = voe_.GetLastChannel(); 895 int channel_num = voe_.GetLastChannel();
893 cricket::AudioSendParameters parameters; 896 cricket::AudioSendParameters parameters;
894 parameters.codecs.push_back(kOpusCodec); 897 parameters.codecs.push_back(kOpusCodec);
895 parameters.codecs[0].params["stereo"] = "1"; 898 parameters.codecs[0].params["stereo"] = "1";
896 webrtc::CodecInst gcodec; 899 webrtc::CodecInst gcodec;
897 900
898 // bitrate that's out of the range between 6000 and 510000 will be clamped. 901 // bitrate that's out of the range between 6000 and 510000 will be clamped.
899 parameters.codecs[0].bitrate = 5999; 902 parameters.codecs[0].bitrate = 5999;
900 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 903 EXPECT_TRUE(channel_->SetSendParameters(parameters));
901 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 904 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
902 EXPECT_STREQ("opus", gcodec.plname); 905 EXPECT_STREQ("opus", gcodec.plname);
903 EXPECT_EQ(2, gcodec.channels); 906 EXPECT_EQ(2, gcodec.channels);
904 EXPECT_EQ(6000, gcodec.rate); 907 EXPECT_EQ(6000, gcodec.rate);
905 908
906 parameters.codecs[0].bitrate = 510001; 909 parameters.codecs[0].bitrate = 510001;
907 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 910 EXPECT_TRUE(channel_->SetSendParameters(parameters));
908 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 911 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
909 EXPECT_STREQ("opus", gcodec.plname); 912 EXPECT_STREQ("opus", gcodec.plname);
910 EXPECT_EQ(2, gcodec.channels); 913 EXPECT_EQ(2, gcodec.channels);
911 EXPECT_EQ(510000, gcodec.rate); 914 EXPECT_EQ(510000, gcodec.rate);
912 } 915 }
913 916
914 // Test that with bitrate=N and stereo unset, 917 // Test that with bitrate=N and stereo unset,
915 // channels and bitrate are 1 and N. 918 // channels and bitrate are 1 and N.
916 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 919 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
917 EXPECT_TRUE(SetupEngine()); 920 EXPECT_TRUE(SetupEngineWithSendStream());
918 int channel_num = voe_.GetLastChannel(); 921 int channel_num = voe_.GetLastChannel();
919 cricket::AudioSendParameters parameters; 922 cricket::AudioSendParameters parameters;
920 parameters.codecs.push_back(kOpusCodec); 923 parameters.codecs.push_back(kOpusCodec);
921 parameters.codecs[0].bitrate = 96000; 924 parameters.codecs[0].bitrate = 96000;
922 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 925 EXPECT_TRUE(channel_->SetSendParameters(parameters));
923 webrtc::CodecInst gcodec; 926 webrtc::CodecInst gcodec;
924 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 927 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
925 EXPECT_EQ(111, gcodec.pltype); 928 EXPECT_EQ(111, gcodec.pltype);
926 EXPECT_EQ(96000, gcodec.rate); 929 EXPECT_EQ(96000, gcodec.rate);
927 EXPECT_STREQ("opus", gcodec.plname); 930 EXPECT_STREQ("opus", gcodec.plname);
928 EXPECT_EQ(1, gcodec.channels); 931 EXPECT_EQ(1, gcodec.channels);
929 EXPECT_EQ(48000, gcodec.plfreq); 932 EXPECT_EQ(48000, gcodec.plfreq);
930 } 933 }
931 934
932 // Test that with bitrate=N and stereo=0, 935 // Test that with bitrate=N and stereo=0,
933 // channels and bitrate are 1 and N. 936 // channels and bitrate are 1 and N.
934 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 937 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
935 EXPECT_TRUE(SetupEngine()); 938 EXPECT_TRUE(SetupEngineWithSendStream());
936 int channel_num = voe_.GetLastChannel(); 939 int channel_num = voe_.GetLastChannel();
937 cricket::AudioSendParameters parameters; 940 cricket::AudioSendParameters parameters;
938 parameters.codecs.push_back(kOpusCodec); 941 parameters.codecs.push_back(kOpusCodec);
939 parameters.codecs[0].bitrate = 30000; 942 parameters.codecs[0].bitrate = 30000;
940 parameters.codecs[0].params["stereo"] = "0"; 943 parameters.codecs[0].params["stereo"] = "0";
941 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 944 EXPECT_TRUE(channel_->SetSendParameters(parameters));
942 webrtc::CodecInst gcodec; 945 webrtc::CodecInst gcodec;
943 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 946 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
944 EXPECT_EQ(1, gcodec.channels); 947 EXPECT_EQ(1, gcodec.channels);
945 EXPECT_EQ(30000, gcodec.rate); 948 EXPECT_EQ(30000, gcodec.rate);
946 EXPECT_STREQ("opus", gcodec.plname); 949 EXPECT_STREQ("opus", gcodec.plname);
947 } 950 }
948 951
949 // Test that with bitrate=N and without any parameters, 952 // Test that with bitrate=N and without any parameters,
950 // channels and bitrate are 1 and N. 953 // channels and bitrate are 1 and N.
951 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 954 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
952 EXPECT_TRUE(SetupEngine()); 955 EXPECT_TRUE(SetupEngineWithSendStream());
953 int channel_num = voe_.GetLastChannel(); 956 int channel_num = voe_.GetLastChannel();
954 cricket::AudioSendParameters parameters; 957 cricket::AudioSendParameters parameters;
955 parameters.codecs.push_back(kOpusCodec); 958 parameters.codecs.push_back(kOpusCodec);
956 parameters.codecs[0].bitrate = 30000; 959 parameters.codecs[0].bitrate = 30000;
957 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 960 EXPECT_TRUE(channel_->SetSendParameters(parameters));
958 webrtc::CodecInst gcodec; 961 webrtc::CodecInst gcodec;
959 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 962 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
960 EXPECT_EQ(1, gcodec.channels); 963 EXPECT_EQ(1, gcodec.channels);
961 EXPECT_EQ(30000, gcodec.rate); 964 EXPECT_EQ(30000, gcodec.rate);
962 EXPECT_STREQ("opus", gcodec.plname); 965 EXPECT_STREQ("opus", gcodec.plname);
963 } 966 }
964 967
965 // Test that with bitrate=N and stereo=1, 968 // Test that with bitrate=N and stereo=1,
966 // channels and bitrate are 2 and N. 969 // channels and bitrate are 2 and N.
967 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
968 EXPECT_TRUE(SetupEngine()); 971 EXPECT_TRUE(SetupEngineWithSendStream());
969 int channel_num = voe_.GetLastChannel(); 972 int channel_num = voe_.GetLastChannel();
970 cricket::AudioSendParameters parameters; 973 cricket::AudioSendParameters parameters;
971 parameters.codecs.push_back(kOpusCodec); 974 parameters.codecs.push_back(kOpusCodec);
972 parameters.codecs[0].bitrate = 30000; 975 parameters.codecs[0].bitrate = 30000;
973 parameters.codecs[0].params["stereo"] = "1"; 976 parameters.codecs[0].params["stereo"] = "1";
974 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 977 EXPECT_TRUE(channel_->SetSendParameters(parameters));
975 webrtc::CodecInst gcodec; 978 webrtc::CodecInst gcodec;
976 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 979 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
977 EXPECT_EQ(2, gcodec.channels); 980 EXPECT_EQ(2, gcodec.channels);
978 EXPECT_EQ(30000, gcodec.rate); 981 EXPECT_EQ(30000, gcodec.rate);
979 EXPECT_STREQ("opus", gcodec.plname); 982 EXPECT_STREQ("opus", gcodec.plname);
980 } 983 }
981 984
982 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. 985 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
983 // Also test that the "maxaveragebitrate" can't be set to values outside the 986 // Also test that the "maxaveragebitrate" can't be set to values outside the
984 // range of 6000 and 510000 987 // range of 6000 and 510000
985 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { 988 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
986 EXPECT_TRUE(SetupEngine()); 989 EXPECT_TRUE(SetupEngineWithSendStream());
987 int channel_num = voe_.GetLastChannel(); 990 int channel_num = voe_.GetLastChannel();
988 cricket::AudioSendParameters parameters; 991 cricket::AudioSendParameters parameters;
989 parameters.codecs.push_back(kOpusCodec); 992 parameters.codecs.push_back(kOpusCodec);
990 parameters.codecs[0].bitrate = 30000; 993 parameters.codecs[0].bitrate = 30000;
991 webrtc::CodecInst gcodec; 994 webrtc::CodecInst gcodec;
992 995
993 // Ignore if less than 6000. 996 // Ignore if less than 6000.
994 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; 997 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
995 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 998 EXPECT_TRUE(channel_->SetSendParameters(parameters));
996 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 999 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
997 EXPECT_EQ(6000, gcodec.rate); 1000 EXPECT_EQ(6000, gcodec.rate);
998 1001
999 // Ignore if larger than 510000. 1002 // Ignore if larger than 510000.
1000 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; 1003 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1001 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1004 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1002 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1005 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1003 EXPECT_EQ(510000, gcodec.rate); 1006 EXPECT_EQ(510000, gcodec.rate);
1004 1007
1005 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; 1008 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1006 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1009 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1007 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1010 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1008 EXPECT_EQ(200000, gcodec.rate); 1011 EXPECT_EQ(200000, gcodec.rate);
1009 } 1012 }
1010 1013
1011 // Test that we can enable NACK with opus as caller. 1014 // Test that we can enable NACK with opus as caller.
1012 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { 1015 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) {
1013 EXPECT_TRUE(SetupEngine()); 1016 EXPECT_TRUE(SetupEngineWithSendStream());
1014 int channel_num = voe_.GetLastChannel(); 1017 int channel_num = voe_.GetLastChannel();
1015 cricket::AudioSendParameters parameters; 1018 cricket::AudioSendParameters parameters;
1016 parameters.codecs.push_back(kOpusCodec); 1019 parameters.codecs.push_back(kOpusCodec);
1017 parameters.codecs[0].AddFeedbackParam( 1020 parameters.codecs[0].AddFeedbackParam(
1018 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1021 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1019 cricket::kParamValueEmpty)); 1022 cricket::kParamValueEmpty));
1020 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1023 EXPECT_FALSE(voe_.GetNACK(channel_num));
1021 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1024 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1022 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1025 EXPECT_TRUE(voe_.GetNACK(channel_num));
1023 } 1026 }
1024 1027
1025 // Test that we can enable NACK with opus as callee. 1028 // Test that we can enable NACK with opus as callee.
1026 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { 1029 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) {
1027 EXPECT_TRUE(SetupEngineWithoutStream()); 1030 EXPECT_TRUE(SetupEngine());
1028 int channel_num = voe_.GetLastChannel(); 1031 int channel_num = voe_.GetLastChannel();
1029 cricket::AudioSendParameters parameters; 1032 cricket::AudioSendParameters parameters;
1030 parameters.codecs.push_back(kOpusCodec); 1033 parameters.codecs.push_back(kOpusCodec);
1031 parameters.codecs[0].AddFeedbackParam( 1034 parameters.codecs[0].AddFeedbackParam(
1032 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1035 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1033 cricket::kParamValueEmpty)); 1036 cricket::kParamValueEmpty));
1034 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1037 EXPECT_FALSE(voe_.GetNACK(channel_num));
1035 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1038 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1036 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1039 EXPECT_FALSE(voe_.GetNACK(channel_num));
1037 1040
1038 EXPECT_TRUE(channel_->AddSendStream( 1041 EXPECT_TRUE(channel_->AddSendStream(
1039 cricket::StreamParams::CreateLegacy(kSsrc1))); 1042 cricket::StreamParams::CreateLegacy(kSsrc1)));
1040 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1043 EXPECT_TRUE(voe_.GetNACK(channel_num));
1041 } 1044 }
1042 1045
1043 // Test that we can enable NACK on receive streams. 1046 // Test that we can enable NACK on receive streams.
1044 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { 1047 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) {
1045 EXPECT_TRUE(SetupEngine()); 1048 EXPECT_TRUE(SetupEngineWithSendStream());
1046 int channel_num1 = voe_.GetLastChannel(); 1049 int channel_num1 = voe_.GetLastChannel();
1047 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1050 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1048 int channel_num2 = voe_.GetLastChannel(); 1051 int channel_num2 = voe_.GetLastChannel();
1049 cricket::AudioSendParameters parameters; 1052 cricket::AudioSendParameters parameters;
1050 parameters.codecs.push_back(kOpusCodec); 1053 parameters.codecs.push_back(kOpusCodec);
1051 parameters.codecs[0].AddFeedbackParam( 1054 parameters.codecs[0].AddFeedbackParam(
1052 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1055 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1053 cricket::kParamValueEmpty)); 1056 cricket::kParamValueEmpty));
1054 EXPECT_FALSE(voe_.GetNACK(channel_num1)); 1057 EXPECT_FALSE(voe_.GetNACK(channel_num1));
1055 EXPECT_FALSE(voe_.GetNACK(channel_num2)); 1058 EXPECT_FALSE(voe_.GetNACK(channel_num2));
1056 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1059 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1057 EXPECT_TRUE(voe_.GetNACK(channel_num1)); 1060 EXPECT_TRUE(voe_.GetNACK(channel_num1));
1058 EXPECT_TRUE(voe_.GetNACK(channel_num2)); 1061 EXPECT_TRUE(voe_.GetNACK(channel_num2));
1059 } 1062 }
1060 1063
1061 // Test that we can disable NACK. 1064 // Test that we can disable NACK.
1062 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { 1065 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) {
1063 EXPECT_TRUE(SetupEngine()); 1066 EXPECT_TRUE(SetupEngineWithSendStream());
1064 int channel_num = voe_.GetLastChannel(); 1067 int channel_num = voe_.GetLastChannel();
1065 cricket::AudioSendParameters parameters; 1068 cricket::AudioSendParameters parameters;
1066 parameters.codecs.push_back(kOpusCodec); 1069 parameters.codecs.push_back(kOpusCodec);
1067 parameters.codecs[0].AddFeedbackParam( 1070 parameters.codecs[0].AddFeedbackParam(
1068 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1071 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1069 cricket::kParamValueEmpty)); 1072 cricket::kParamValueEmpty));
1070 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1073 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1071 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1074 EXPECT_TRUE(voe_.GetNACK(channel_num));
1072 1075
1073 parameters.codecs.clear(); 1076 parameters.codecs.clear();
1074 parameters.codecs.push_back(kOpusCodec); 1077 parameters.codecs.push_back(kOpusCodec);
1075 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1078 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1076 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1079 EXPECT_FALSE(voe_.GetNACK(channel_num));
1077 } 1080 }
1078 1081
1079 // Test that we can disable NACK on receive streams. 1082 // Test that we can disable NACK on receive streams.
1080 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { 1083 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) {
1081 EXPECT_TRUE(SetupEngine()); 1084 EXPECT_TRUE(SetupEngineWithSendStream());
1082 int channel_num1 = voe_.GetLastChannel(); 1085 int channel_num1 = voe_.GetLastChannel();
1083 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1086 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1084 int channel_num2 = voe_.GetLastChannel(); 1087 int channel_num2 = voe_.GetLastChannel();
1085 cricket::AudioSendParameters parameters; 1088 cricket::AudioSendParameters parameters;
1086 parameters.codecs.push_back(kOpusCodec); 1089 parameters.codecs.push_back(kOpusCodec);
1087 parameters.codecs[0].AddFeedbackParam( 1090 parameters.codecs[0].AddFeedbackParam(
1088 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1091 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1089 cricket::kParamValueEmpty)); 1092 cricket::kParamValueEmpty));
1090 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1093 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1091 EXPECT_TRUE(voe_.GetNACK(channel_num1)); 1094 EXPECT_TRUE(voe_.GetNACK(channel_num1));
1092 EXPECT_TRUE(voe_.GetNACK(channel_num2)); 1095 EXPECT_TRUE(voe_.GetNACK(channel_num2));
1093 1096
1094 parameters.codecs.clear(); 1097 parameters.codecs.clear();
1095 parameters.codecs.push_back(kOpusCodec); 1098 parameters.codecs.push_back(kOpusCodec);
1096 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1099 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1097 EXPECT_FALSE(voe_.GetNACK(channel_num1)); 1100 EXPECT_FALSE(voe_.GetNACK(channel_num1));
1098 EXPECT_FALSE(voe_.GetNACK(channel_num2)); 1101 EXPECT_FALSE(voe_.GetNACK(channel_num2));
1099 } 1102 }
1100 1103
1101 // Test that NACK is enabled on a new receive stream. 1104 // Test that NACK is enabled on a new receive stream.
1102 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { 1105 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) {
1103 EXPECT_TRUE(SetupEngine()); 1106 EXPECT_TRUE(SetupEngineWithSendStream());
1104 int channel_num = voe_.GetLastChannel(); 1107 int channel_num = voe_.GetLastChannel();
1105 cricket::AudioSendParameters parameters; 1108 cricket::AudioSendParameters parameters;
1106 parameters.codecs.push_back(kIsacCodec); 1109 parameters.codecs.push_back(kIsacCodec);
1107 parameters.codecs.push_back(kCn16000Codec); 1110 parameters.codecs.push_back(kCn16000Codec);
1108 parameters.codecs[0].AddFeedbackParam( 1111 parameters.codecs[0].AddFeedbackParam(
1109 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1112 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1110 cricket::kParamValueEmpty)); 1113 cricket::kParamValueEmpty));
1111 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1114 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1112 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1115 EXPECT_TRUE(voe_.GetNACK(channel_num));
1113 1116
1114 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1117 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1115 channel_num = voe_.GetLastChannel(); 1118 channel_num = voe_.GetLastChannel();
1116 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1119 EXPECT_TRUE(voe_.GetNACK(channel_num));
1117 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 1120 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
1118 channel_num = voe_.GetLastChannel(); 1121 channel_num = voe_.GetLastChannel();
1119 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1122 EXPECT_TRUE(voe_.GetNACK(channel_num));
1120 } 1123 }
1121 1124
1122 // Test that without useinbandfec, Opus FEC is off. 1125 // Test that without useinbandfec, Opus FEC is off.
1123 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { 1126 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
1124 EXPECT_TRUE(SetupEngine()); 1127 EXPECT_TRUE(SetupEngineWithSendStream());
1125 int channel_num = voe_.GetLastChannel(); 1128 int channel_num = voe_.GetLastChannel();
1126 cricket::AudioSendParameters parameters; 1129 cricket::AudioSendParameters parameters;
1127 parameters.codecs.push_back(kOpusCodec); 1130 parameters.codecs.push_back(kOpusCodec);
1128 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1131 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1129 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1132 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1130 } 1133 }
1131 1134
1132 // Test that with useinbandfec=0, Opus FEC is off. 1135 // Test that with useinbandfec=0, Opus FEC is off.
1133 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { 1136 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1134 EXPECT_TRUE(SetupEngine()); 1137 EXPECT_TRUE(SetupEngineWithSendStream());
1135 int channel_num = voe_.GetLastChannel(); 1138 int channel_num = voe_.GetLastChannel();
1136 cricket::AudioSendParameters parameters; 1139 cricket::AudioSendParameters parameters;
1137 parameters.codecs.push_back(kOpusCodec); 1140 parameters.codecs.push_back(kOpusCodec);
1138 parameters.codecs[0].bitrate = 0; 1141 parameters.codecs[0].bitrate = 0;
1139 parameters.codecs[0].params["useinbandfec"] = "0"; 1142 parameters.codecs[0].params["useinbandfec"] = "0";
1140 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1143 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1141 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1144 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1142 webrtc::CodecInst gcodec; 1145 webrtc::CodecInst gcodec;
1143 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1146 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1144 EXPECT_STREQ("opus", gcodec.plname); 1147 EXPECT_STREQ("opus", gcodec.plname);
1145 EXPECT_EQ(1, gcodec.channels); 1148 EXPECT_EQ(1, gcodec.channels);
1146 EXPECT_EQ(32000, gcodec.rate); 1149 EXPECT_EQ(32000, gcodec.rate);
1147 } 1150 }
1148 1151
1149 // Test that with useinbandfec=1, Opus FEC is on. 1152 // Test that with useinbandfec=1, Opus FEC is on.
1150 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { 1153 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1151 EXPECT_TRUE(SetupEngine()); 1154 EXPECT_TRUE(SetupEngineWithSendStream());
1152 int channel_num = voe_.GetLastChannel(); 1155 int channel_num = voe_.GetLastChannel();
1153 cricket::AudioSendParameters parameters; 1156 cricket::AudioSendParameters parameters;
1154 parameters.codecs.push_back(kOpusCodec); 1157 parameters.codecs.push_back(kOpusCodec);
1155 parameters.codecs[0].bitrate = 0; 1158 parameters.codecs[0].bitrate = 0;
1156 parameters.codecs[0].params["useinbandfec"] = "1"; 1159 parameters.codecs[0].params["useinbandfec"] = "1";
1157 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1160 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1158 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1161 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1159 webrtc::CodecInst gcodec; 1162 webrtc::CodecInst gcodec;
1160 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1163 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1161 EXPECT_STREQ("opus", gcodec.plname); 1164 EXPECT_STREQ("opus", gcodec.plname);
1162 EXPECT_EQ(1, gcodec.channels); 1165 EXPECT_EQ(1, gcodec.channels);
1163 EXPECT_EQ(32000, gcodec.rate); 1166 EXPECT_EQ(32000, gcodec.rate);
1164 } 1167 }
1165 1168
1166 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. 1169 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1167 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { 1170 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1168 EXPECT_TRUE(SetupEngine()); 1171 EXPECT_TRUE(SetupEngineWithSendStream());
1169 int channel_num = voe_.GetLastChannel(); 1172 int channel_num = voe_.GetLastChannel();
1170 cricket::AudioSendParameters parameters; 1173 cricket::AudioSendParameters parameters;
1171 parameters.codecs.push_back(kOpusCodec); 1174 parameters.codecs.push_back(kOpusCodec);
1172 parameters.codecs[0].bitrate = 0; 1175 parameters.codecs[0].bitrate = 0;
1173 parameters.codecs[0].params["stereo"] = "1"; 1176 parameters.codecs[0].params["stereo"] = "1";
1174 parameters.codecs[0].params["useinbandfec"] = "1"; 1177 parameters.codecs[0].params["useinbandfec"] = "1";
1175 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1178 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1176 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1179 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1177 webrtc::CodecInst gcodec; 1180 webrtc::CodecInst gcodec;
1178 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1181 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1179 EXPECT_STREQ("opus", gcodec.plname); 1182 EXPECT_STREQ("opus", gcodec.plname);
1180 EXPECT_EQ(2, gcodec.channels); 1183 EXPECT_EQ(2, gcodec.channels);
1181 EXPECT_EQ(64000, gcodec.rate); 1184 EXPECT_EQ(64000, gcodec.rate);
1182 } 1185 }
1183 1186
1184 // Test that with non-Opus, codec FEC is off. 1187 // Test that with non-Opus, codec FEC is off.
1185 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { 1188 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1186 EXPECT_TRUE(SetupEngine()); 1189 EXPECT_TRUE(SetupEngineWithSendStream());
1187 int channel_num = voe_.GetLastChannel(); 1190 int channel_num = voe_.GetLastChannel();
1188 cricket::AudioSendParameters parameters; 1191 cricket::AudioSendParameters parameters;
1189 parameters.codecs.push_back(kIsacCodec); 1192 parameters.codecs.push_back(kIsacCodec);
1190 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1193 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1191 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1194 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1192 } 1195 }
1193 1196
1194 // Test the with non-Opus, even if useinbandfec=1, FEC is off. 1197 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1195 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { 1198 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1196 EXPECT_TRUE(SetupEngine()); 1199 EXPECT_TRUE(SetupEngineWithSendStream());
1197 int channel_num = voe_.GetLastChannel(); 1200 int channel_num = voe_.GetLastChannel();
1198 cricket::AudioSendParameters parameters; 1201 cricket::AudioSendParameters parameters;
1199 parameters.codecs.push_back(kIsacCodec); 1202 parameters.codecs.push_back(kIsacCodec);
1200 parameters.codecs[0].params["useinbandfec"] = "1"; 1203 parameters.codecs[0].params["useinbandfec"] = "1";
1201 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1204 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1202 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1205 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1203 } 1206 }
1204 1207
1205 // Test that Opus FEC status can be changed. 1208 // Test that Opus FEC status can be changed.
1206 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { 1209 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1207 EXPECT_TRUE(SetupEngine()); 1210 EXPECT_TRUE(SetupEngineWithSendStream());
1208 int channel_num = voe_.GetLastChannel(); 1211 int channel_num = voe_.GetLastChannel();
1209 cricket::AudioSendParameters parameters; 1212 cricket::AudioSendParameters parameters;
1210 parameters.codecs.push_back(kOpusCodec); 1213 parameters.codecs.push_back(kOpusCodec);
1211 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1214 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1212 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1215 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1213 parameters.codecs[0].params["useinbandfec"] = "1"; 1216 parameters.codecs[0].params["useinbandfec"] = "1";
1214 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1217 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1215 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1218 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1216 } 1219 }
1217 1220
1218 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. 1221 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
1219 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { 1222 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1220 EXPECT_TRUE(SetupEngine()); 1223 EXPECT_TRUE(SetupEngineWithSendStream());
1221 int channel_num = voe_.GetLastChannel(); 1224 int channel_num = voe_.GetLastChannel();
1222 cricket::AudioSendParameters parameters; 1225 cricket::AudioSendParameters parameters;
1223 parameters.codecs.push_back(kOpusCodec); 1226 parameters.codecs.push_back(kOpusCodec);
1224 parameters.codecs[0].bitrate = 0; 1227 parameters.codecs[0].bitrate = 0;
1225 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1228 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1226 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1229 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1227 EXPECT_EQ(cricket::kOpusBandwidthNb, 1230 EXPECT_EQ(cricket::kOpusBandwidthNb,
1228 voe_.GetMaxEncodingBandwidth(channel_num)); 1231 voe_.GetMaxEncodingBandwidth(channel_num));
1229 webrtc::CodecInst gcodec; 1232 webrtc::CodecInst gcodec;
1230 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1233 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1231 EXPECT_STREQ("opus", gcodec.plname); 1234 EXPECT_STREQ("opus", gcodec.plname);
1232 1235
1233 EXPECT_EQ(12000, gcodec.rate); 1236 EXPECT_EQ(12000, gcodec.rate);
1234 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1237 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1235 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1238 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1236 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1239 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1237 EXPECT_EQ(24000, gcodec.rate); 1240 EXPECT_EQ(24000, gcodec.rate);
1238 } 1241 }
1239 1242
1240 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. 1243 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1241 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { 1244 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1242 EXPECT_TRUE(SetupEngine()); 1245 EXPECT_TRUE(SetupEngineWithSendStream());
1243 int channel_num = voe_.GetLastChannel(); 1246 int channel_num = voe_.GetLastChannel();
1244 cricket::AudioSendParameters parameters; 1247 cricket::AudioSendParameters parameters;
1245 parameters.codecs.push_back(kOpusCodec); 1248 parameters.codecs.push_back(kOpusCodec);
1246 parameters.codecs[0].bitrate = 0; 1249 parameters.codecs[0].bitrate = 0;
1247 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); 1250 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1248 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1251 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1249 EXPECT_EQ(cricket::kOpusBandwidthMb, 1252 EXPECT_EQ(cricket::kOpusBandwidthMb,
1250 voe_.GetMaxEncodingBandwidth(channel_num)); 1253 voe_.GetMaxEncodingBandwidth(channel_num));
1251 webrtc::CodecInst gcodec; 1254 webrtc::CodecInst gcodec;
1252 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1255 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1253 EXPECT_STREQ("opus", gcodec.plname); 1256 EXPECT_STREQ("opus", gcodec.plname);
1254 1257
1255 EXPECT_EQ(20000, gcodec.rate); 1258 EXPECT_EQ(20000, gcodec.rate);
1256 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1259 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1257 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1260 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1258 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1261 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1259 EXPECT_EQ(40000, gcodec.rate); 1262 EXPECT_EQ(40000, gcodec.rate);
1260 } 1263 }
1261 1264
1262 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. 1265 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1263 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { 1266 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1264 EXPECT_TRUE(SetupEngine()); 1267 EXPECT_TRUE(SetupEngineWithSendStream());
1265 int channel_num = voe_.GetLastChannel(); 1268 int channel_num = voe_.GetLastChannel();
1266 cricket::AudioSendParameters parameters; 1269 cricket::AudioSendParameters parameters;
1267 parameters.codecs.push_back(kOpusCodec); 1270 parameters.codecs.push_back(kOpusCodec);
1268 parameters.codecs[0].bitrate = 0; 1271 parameters.codecs[0].bitrate = 0;
1269 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); 1272 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1270 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1273 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1271 EXPECT_EQ(cricket::kOpusBandwidthWb, 1274 EXPECT_EQ(cricket::kOpusBandwidthWb,
1272 voe_.GetMaxEncodingBandwidth(channel_num)); 1275 voe_.GetMaxEncodingBandwidth(channel_num));
1273 webrtc::CodecInst gcodec; 1276 webrtc::CodecInst gcodec;
1274 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1277 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1275 EXPECT_STREQ("opus", gcodec.plname); 1278 EXPECT_STREQ("opus", gcodec.plname);
1276 1279
1277 EXPECT_EQ(20000, gcodec.rate); 1280 EXPECT_EQ(20000, gcodec.rate);
1278 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1281 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1279 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1282 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1280 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1283 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1281 EXPECT_EQ(40000, gcodec.rate); 1284 EXPECT_EQ(40000, gcodec.rate);
1282 } 1285 }
1283 1286
1284 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. 1287 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1285 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { 1288 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1286 EXPECT_TRUE(SetupEngine()); 1289 EXPECT_TRUE(SetupEngineWithSendStream());
1287 int channel_num = voe_.GetLastChannel(); 1290 int channel_num = voe_.GetLastChannel();
1288 cricket::AudioSendParameters parameters; 1291 cricket::AudioSendParameters parameters;
1289 parameters.codecs.push_back(kOpusCodec); 1292 parameters.codecs.push_back(kOpusCodec);
1290 parameters.codecs[0].bitrate = 0; 1293 parameters.codecs[0].bitrate = 0;
1291 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); 1294 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1292 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1295 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1293 EXPECT_EQ(cricket::kOpusBandwidthSwb, 1296 EXPECT_EQ(cricket::kOpusBandwidthSwb,
1294 voe_.GetMaxEncodingBandwidth(channel_num)); 1297 voe_.GetMaxEncodingBandwidth(channel_num));
1295 webrtc::CodecInst gcodec; 1298 webrtc::CodecInst gcodec;
1296 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1299 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1297 EXPECT_STREQ("opus", gcodec.plname); 1300 EXPECT_STREQ("opus", gcodec.plname);
1298 1301
1299 EXPECT_EQ(32000, gcodec.rate); 1302 EXPECT_EQ(32000, gcodec.rate);
1300 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1303 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1301 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1304 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1302 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1305 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1303 EXPECT_EQ(64000, gcodec.rate); 1306 EXPECT_EQ(64000, gcodec.rate);
1304 } 1307 }
1305 1308
1306 // Test 24000 < maxplaybackrate triggers Opus full band mode. 1309 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1307 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { 1310 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1308 EXPECT_TRUE(SetupEngine()); 1311 EXPECT_TRUE(SetupEngineWithSendStream());
1309 int channel_num = voe_.GetLastChannel(); 1312 int channel_num = voe_.GetLastChannel();
1310 cricket::AudioSendParameters parameters; 1313 cricket::AudioSendParameters parameters;
1311 parameters.codecs.push_back(kOpusCodec); 1314 parameters.codecs.push_back(kOpusCodec);
1312 parameters.codecs[0].bitrate = 0; 1315 parameters.codecs[0].bitrate = 0;
1313 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); 1316 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1314 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1317 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1315 EXPECT_EQ(cricket::kOpusBandwidthFb, 1318 EXPECT_EQ(cricket::kOpusBandwidthFb,
1316 voe_.GetMaxEncodingBandwidth(channel_num)); 1319 voe_.GetMaxEncodingBandwidth(channel_num));
1317 webrtc::CodecInst gcodec; 1320 webrtc::CodecInst gcodec;
1318 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1321 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1319 EXPECT_STREQ("opus", gcodec.plname); 1322 EXPECT_STREQ("opus", gcodec.plname);
1320 1323
1321 EXPECT_EQ(32000, gcodec.rate); 1324 EXPECT_EQ(32000, gcodec.rate);
1322 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1325 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1323 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1326 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1324 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1327 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1325 EXPECT_EQ(64000, gcodec.rate); 1328 EXPECT_EQ(64000, gcodec.rate);
1326 } 1329 }
1327 1330
1328 // Test Opus that without maxplaybackrate, default playback rate is used. 1331 // Test Opus that without maxplaybackrate, default playback rate is used.
1329 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { 1332 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1330 EXPECT_TRUE(SetupEngine()); 1333 EXPECT_TRUE(SetupEngineWithSendStream());
1331 int channel_num = voe_.GetLastChannel(); 1334 int channel_num = voe_.GetLastChannel();
1332 cricket::AudioSendParameters parameters; 1335 cricket::AudioSendParameters parameters;
1333 parameters.codecs.push_back(kOpusCodec); 1336 parameters.codecs.push_back(kOpusCodec);
1334 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1337 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1335 EXPECT_EQ(cricket::kOpusBandwidthFb, 1338 EXPECT_EQ(cricket::kOpusBandwidthFb,
1336 voe_.GetMaxEncodingBandwidth(channel_num)); 1339 voe_.GetMaxEncodingBandwidth(channel_num));
1337 } 1340 }
1338 1341
1339 // Test the with non-Opus, maxplaybackrate has no effect. 1342 // Test the with non-Opus, maxplaybackrate has no effect.
1340 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { 1343 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1341 EXPECT_TRUE(SetupEngine()); 1344 EXPECT_TRUE(SetupEngineWithSendStream());
1342 int channel_num = voe_.GetLastChannel(); 1345 int channel_num = voe_.GetLastChannel();
1343 cricket::AudioSendParameters parameters; 1346 cricket::AudioSendParameters parameters;
1344 parameters.codecs.push_back(kIsacCodec); 1347 parameters.codecs.push_back(kIsacCodec);
1345 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); 1348 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1346 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1349 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1347 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num)); 1350 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num));
1348 } 1351 }
1349 1352
1350 // Test maxplaybackrate can be set on two streams. 1353 // Test maxplaybackrate can be set on two streams.
1351 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { 1354 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1352 EXPECT_TRUE(SetupEngine()); 1355 EXPECT_TRUE(SetupEngineWithSendStream());
1353 int channel_num = voe_.GetLastChannel(); 1356 int channel_num = voe_.GetLastChannel();
1354 cricket::AudioSendParameters parameters; 1357 cricket::AudioSendParameters parameters;
1355 parameters.codecs.push_back(kOpusCodec); 1358 parameters.codecs.push_back(kOpusCodec);
1356 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1359 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1357 // Default bandwidth is 24000. 1360 // Default bandwidth is 24000.
1358 EXPECT_EQ(cricket::kOpusBandwidthFb, 1361 EXPECT_EQ(cricket::kOpusBandwidthFb,
1359 voe_.GetMaxEncodingBandwidth(channel_num)); 1362 voe_.GetMaxEncodingBandwidth(channel_num));
1360 1363
1361 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1364 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1362 1365
1363 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1366 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1364 EXPECT_EQ(cricket::kOpusBandwidthNb, 1367 EXPECT_EQ(cricket::kOpusBandwidthNb,
1365 voe_.GetMaxEncodingBandwidth(channel_num)); 1368 voe_.GetMaxEncodingBandwidth(channel_num));
1366 1369
1367 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); 1370 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2));
1368 channel_num = voe_.GetLastChannel(); 1371 channel_num = voe_.GetLastChannel();
1369 EXPECT_EQ(cricket::kOpusBandwidthNb, 1372 EXPECT_EQ(cricket::kOpusBandwidthNb,
1370 voe_.GetMaxEncodingBandwidth(channel_num)); 1373 voe_.GetMaxEncodingBandwidth(channel_num));
1371 } 1374 }
1372 1375
1373 // Test that with usedtx=0, Opus DTX is off. 1376 // Test that with usedtx=0, Opus DTX is off.
1374 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { 1377 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1375 EXPECT_TRUE(SetupEngine()); 1378 EXPECT_TRUE(SetupEngineWithSendStream());
1376 int channel_num = voe_.GetLastChannel(); 1379 int channel_num = voe_.GetLastChannel();
1377 cricket::AudioSendParameters parameters; 1380 cricket::AudioSendParameters parameters;
1378 parameters.codecs.push_back(kOpusCodec); 1381 parameters.codecs.push_back(kOpusCodec);
1379 parameters.codecs[0].params["usedtx"] = "0"; 1382 parameters.codecs[0].params["usedtx"] = "0";
1380 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1383 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1381 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1384 EXPECT_FALSE(voe_.GetOpusDtx(channel_num));
1382 } 1385 }
1383 1386
1384 // Test that with usedtx=1, Opus DTX is on. 1387 // Test that with usedtx=1, Opus DTX is on.
1385 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { 1388 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1386 EXPECT_TRUE(SetupEngine()); 1389 EXPECT_TRUE(SetupEngineWithSendStream());
1387 int channel_num = voe_.GetLastChannel(); 1390 int channel_num = voe_.GetLastChannel();
1388 cricket::AudioSendParameters parameters; 1391 cricket::AudioSendParameters parameters;
1389 parameters.codecs.push_back(kOpusCodec); 1392 parameters.codecs.push_back(kOpusCodec);
1390 parameters.codecs[0].params["usedtx"] = "1"; 1393 parameters.codecs[0].params["usedtx"] = "1";
1391 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1394 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1392 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1395 EXPECT_TRUE(voe_.GetOpusDtx(channel_num));
1393 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1396 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1394 } 1397 }
1395 1398
1396 // Test that usedtx=1 works with stereo Opus. 1399 // Test that usedtx=1 works with stereo Opus.
1397 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { 1400 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1398 EXPECT_TRUE(SetupEngine()); 1401 EXPECT_TRUE(SetupEngineWithSendStream());
1399 int channel_num = voe_.GetLastChannel(); 1402 int channel_num = voe_.GetLastChannel();
1400 cricket::AudioSendParameters parameters; 1403 cricket::AudioSendParameters parameters;
1401 parameters.codecs.push_back(kOpusCodec); 1404 parameters.codecs.push_back(kOpusCodec);
1402 parameters.codecs[0].params["usedtx"] = "1"; 1405 parameters.codecs[0].params["usedtx"] = "1";
1403 parameters.codecs[0].params["stereo"] = "1"; 1406 parameters.codecs[0].params["stereo"] = "1";
1404 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1407 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1405 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1408 EXPECT_TRUE(voe_.GetOpusDtx(channel_num));
1406 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1409 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1407 } 1410 }
1408 1411
1409 // Test that usedtx=1 does not work with non Opus. 1412 // Test that usedtx=1 does not work with non Opus.
1410 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { 1413 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1411 EXPECT_TRUE(SetupEngine()); 1414 EXPECT_TRUE(SetupEngineWithSendStream());
1412 int channel_num = voe_.GetLastChannel(); 1415 int channel_num = voe_.GetLastChannel();
1413 cricket::AudioSendParameters parameters; 1416 cricket::AudioSendParameters parameters;
1414 parameters.codecs.push_back(kIsacCodec); 1417 parameters.codecs.push_back(kIsacCodec);
1415 parameters.codecs[0].params["usedtx"] = "1"; 1418 parameters.codecs[0].params["usedtx"] = "1";
1416 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1419 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1417 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1420 EXPECT_FALSE(voe_.GetOpusDtx(channel_num));
1418 } 1421 }
1419 1422
1420 // Test that we can switch back and forth between Opus and ISAC with CN. 1423 // Test that we can switch back and forth between Opus and ISAC with CN.
1421 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1424 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1422 EXPECT_TRUE(SetupEngine()); 1425 EXPECT_TRUE(SetupEngineWithSendStream());
1423 int channel_num = voe_.GetLastChannel(); 1426 int channel_num = voe_.GetLastChannel();
1424 cricket::AudioSendParameters opus_parameters; 1427 cricket::AudioSendParameters opus_parameters;
1425 opus_parameters.codecs.push_back(kOpusCodec); 1428 opus_parameters.codecs.push_back(kOpusCodec);
1426 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1429 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1427 webrtc::CodecInst gcodec; 1430 webrtc::CodecInst gcodec;
1428 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1431 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1429 EXPECT_EQ(111, gcodec.pltype); 1432 EXPECT_EQ(111, gcodec.pltype);
1430 EXPECT_STREQ("opus", gcodec.plname); 1433 EXPECT_STREQ("opus", gcodec.plname);
1431 1434
1432 cricket::AudioSendParameters isac_parameters; 1435 cricket::AudioSendParameters isac_parameters;
1433 isac_parameters.codecs.push_back(kIsacCodec); 1436 isac_parameters.codecs.push_back(kIsacCodec);
1434 isac_parameters.codecs.push_back(kCn16000Codec); 1437 isac_parameters.codecs.push_back(kCn16000Codec);
1435 isac_parameters.codecs.push_back(kOpusCodec); 1438 isac_parameters.codecs.push_back(kOpusCodec);
1436 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters)); 1439 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters));
1437 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1440 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1438 EXPECT_EQ(103, gcodec.pltype); 1441 EXPECT_EQ(103, gcodec.pltype);
1439 EXPECT_STREQ("ISAC", gcodec.plname); 1442 EXPECT_STREQ("ISAC", gcodec.plname);
1440 1443
1441 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1444 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1442 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1445 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1443 EXPECT_EQ(111, gcodec.pltype); 1446 EXPECT_EQ(111, gcodec.pltype);
1444 EXPECT_STREQ("opus", gcodec.plname); 1447 EXPECT_STREQ("opus", gcodec.plname);
1445 } 1448 }
1446 1449
1447 // Test that we handle various ways of specifying bitrate. 1450 // Test that we handle various ways of specifying bitrate.
1448 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1451 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1449 EXPECT_TRUE(SetupEngine()); 1452 EXPECT_TRUE(SetupEngineWithSendStream());
1450 int channel_num = voe_.GetLastChannel(); 1453 int channel_num = voe_.GetLastChannel();
1451 cricket::AudioSendParameters parameters; 1454 cricket::AudioSendParameters parameters;
1452 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 1455 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1453 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1456 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1454 webrtc::CodecInst gcodec; 1457 webrtc::CodecInst gcodec;
1455 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1458 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1456 EXPECT_EQ(103, gcodec.pltype); 1459 EXPECT_EQ(103, gcodec.pltype);
1457 EXPECT_STREQ("ISAC", gcodec.plname); 1460 EXPECT_STREQ("ISAC", gcodec.plname);
1458 EXPECT_EQ(32000, gcodec.rate); 1461 EXPECT_EQ(32000, gcodec.rate);
1459 1462
(...skipping 29 matching lines...) Expand all
1489 parameters.codecs[0].bitrate = 0; // bitrate == default 1492 parameters.codecs[0].bitrate = 0; // bitrate == default
1490 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1493 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1491 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1494 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1492 EXPECT_EQ(111, gcodec.pltype); 1495 EXPECT_EQ(111, gcodec.pltype);
1493 EXPECT_STREQ("opus", gcodec.plname); 1496 EXPECT_STREQ("opus", gcodec.plname);
1494 EXPECT_EQ(32000, gcodec.rate); 1497 EXPECT_EQ(32000, gcodec.rate);
1495 } 1498 }
1496 1499
1497 // Test that we could set packet size specified in kCodecParamPTime. 1500 // Test that we could set packet size specified in kCodecParamPTime.
1498 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { 1501 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
1499 EXPECT_TRUE(SetupEngine()); 1502 EXPECT_TRUE(SetupEngineWithSendStream());
1500 int channel_num = voe_.GetLastChannel(); 1503 int channel_num = voe_.GetLastChannel();
1501 cricket::AudioSendParameters parameters; 1504 cricket::AudioSendParameters parameters;
1502 parameters.codecs.push_back(kOpusCodec); 1505 parameters.codecs.push_back(kOpusCodec);
1503 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1506 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1504 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1507 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1505 webrtc::CodecInst gcodec; 1508 webrtc::CodecInst gcodec;
1506 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1509 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1507 EXPECT_EQ(1920, gcodec.pacsize); // Opus gets 40ms. 1510 EXPECT_EQ(1920, gcodec.pacsize); // Opus gets 40ms.
1508 1511
1509 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. 1512 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
(...skipping 14 matching lines...) Expand all
1524 1527
1525 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. 1528 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
1526 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); 1529 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
1527 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1530 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1528 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1531 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1529 EXPECT_EQ(640, gcodec.pacsize); // G722 gets 40ms @16kHz as defined in VoE. 1532 EXPECT_EQ(640, gcodec.pacsize); // G722 gets 40ms @16kHz as defined in VoE.
1530 } 1533 }
1531 1534
1532 // Test that we fail if no codecs are specified. 1535 // Test that we fail if no codecs are specified.
1533 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { 1536 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
1534 EXPECT_TRUE(SetupEngine()); 1537 EXPECT_TRUE(SetupEngineWithSendStream());
1535 cricket::AudioSendParameters parameters; 1538 cricket::AudioSendParameters parameters;
1536 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1539 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1537 } 1540 }
1538 1541
1539 // Test that we can set send codecs even with telephone-event codec as the first 1542 // Test that we can set send codecs even with telephone-event codec as the first
1540 // one on the list. 1543 // one on the list.
1541 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1544 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
1542 EXPECT_TRUE(SetupEngine()); 1545 EXPECT_TRUE(SetupEngineWithSendStream());
1543 int channel_num = voe_.GetLastChannel(); 1546 int channel_num = voe_.GetLastChannel();
1544 cricket::AudioSendParameters parameters; 1547 cricket::AudioSendParameters parameters;
1545 parameters.codecs.push_back(kTelephoneEventCodec); 1548 parameters.codecs.push_back(kTelephoneEventCodec);
1546 parameters.codecs.push_back(kIsacCodec); 1549 parameters.codecs.push_back(kIsacCodec);
1547 parameters.codecs.push_back(kPcmuCodec); 1550 parameters.codecs.push_back(kPcmuCodec);
1548 parameters.codecs[0].id = 98; // DTMF 1551 parameters.codecs[0].id = 98; // DTMF
1549 parameters.codecs[1].id = 96; 1552 parameters.codecs[1].id = 96;
1550 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1553 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1551 webrtc::CodecInst gcodec; 1554 webrtc::CodecInst gcodec;
1552 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1555 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1553 EXPECT_EQ(96, gcodec.pltype); 1556 EXPECT_EQ(96, gcodec.pltype);
1554 EXPECT_STREQ("ISAC", gcodec.plname); 1557 EXPECT_STREQ("ISAC", gcodec.plname);
1555 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1558 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1556 } 1559 }
1557 1560
1558 // Test that we can set send codecs even with CN codec as the first 1561 // Test that we can set send codecs even with CN codec as the first
1559 // one on the list. 1562 // one on the list.
1560 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 1563 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
1561 EXPECT_TRUE(SetupEngine()); 1564 EXPECT_TRUE(SetupEngineWithSendStream());
1562 int channel_num = voe_.GetLastChannel(); 1565 int channel_num = voe_.GetLastChannel();
1563 cricket::AudioSendParameters parameters; 1566 cricket::AudioSendParameters parameters;
1564 parameters.codecs.push_back(kCn16000Codec); 1567 parameters.codecs.push_back(kCn16000Codec);
1565 parameters.codecs.push_back(kIsacCodec); 1568 parameters.codecs.push_back(kIsacCodec);
1566 parameters.codecs.push_back(kPcmuCodec); 1569 parameters.codecs.push_back(kPcmuCodec);
1567 parameters.codecs[0].id = 98; // wideband CN 1570 parameters.codecs[0].id = 98; // wideband CN
1568 parameters.codecs[1].id = 96; 1571 parameters.codecs[1].id = 96;
1569 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1572 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1570 webrtc::CodecInst gcodec; 1573 webrtc::CodecInst gcodec;
1571 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1574 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1572 EXPECT_EQ(96, gcodec.pltype); 1575 EXPECT_EQ(96, gcodec.pltype);
1573 EXPECT_STREQ("ISAC", gcodec.plname); 1576 EXPECT_STREQ("ISAC", gcodec.plname);
1574 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true)); 1577 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true));
1575 } 1578 }
1576 1579
1577 // Test that we set VAD and DTMF types correctly as caller. 1580 // Test that we set VAD and DTMF types correctly as caller.
1578 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 1581 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
1579 EXPECT_TRUE(SetupEngine()); 1582 EXPECT_TRUE(SetupEngineWithSendStream());
1580 int channel_num = voe_.GetLastChannel(); 1583 int channel_num = voe_.GetLastChannel();
1581 cricket::AudioSendParameters parameters; 1584 cricket::AudioSendParameters parameters;
1582 parameters.codecs.push_back(kIsacCodec); 1585 parameters.codecs.push_back(kIsacCodec);
1583 parameters.codecs.push_back(kPcmuCodec); 1586 parameters.codecs.push_back(kPcmuCodec);
1584 // TODO(juberti): cn 32000 1587 // TODO(juberti): cn 32000
1585 parameters.codecs.push_back(kCn16000Codec); 1588 parameters.codecs.push_back(kCn16000Codec);
1586 parameters.codecs.push_back(kCn8000Codec); 1589 parameters.codecs.push_back(kCn8000Codec);
1587 parameters.codecs.push_back(kTelephoneEventCodec); 1590 parameters.codecs.push_back(kTelephoneEventCodec);
1588 parameters.codecs.push_back(kRedCodec); 1591 parameters.codecs.push_back(kRedCodec);
1589 parameters.codecs[0].id = 96; 1592 parameters.codecs[0].id = 96;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1630 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1633 EXPECT_TRUE(voe_.GetVAD(channel_num));
1631 EXPECT_FALSE(voe_.GetRED(channel_num)); 1634 EXPECT_FALSE(voe_.GetRED(channel_num));
1632 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1635 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1633 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1636 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1634 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1637 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1635 } 1638 }
1636 1639
1637 // Test that we only apply VAD if we have a CN codec that matches the 1640 // Test that we only apply VAD if we have a CN codec that matches the
1638 // send codec clockrate. 1641 // send codec clockrate.
1639 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 1642 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
1640 EXPECT_TRUE(SetupEngine()); 1643 EXPECT_TRUE(SetupEngineWithSendStream());
1641 int channel_num = voe_.GetLastChannel(); 1644 int channel_num = voe_.GetLastChannel();
1642 cricket::AudioSendParameters parameters; 1645 cricket::AudioSendParameters parameters;
1643 // Set ISAC(16K) and CN(16K). VAD should be activated. 1646 // Set ISAC(16K) and CN(16K). VAD should be activated.
1644 parameters.codecs.push_back(kIsacCodec); 1647 parameters.codecs.push_back(kIsacCodec);
1645 parameters.codecs.push_back(kCn16000Codec); 1648 parameters.codecs.push_back(kCn16000Codec);
1646 parameters.codecs[1].id = 97; 1649 parameters.codecs[1].id = 97;
1647 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1650 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1648 webrtc::CodecInst gcodec; 1651 webrtc::CodecInst gcodec;
1649 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1652 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1650 EXPECT_STREQ("ISAC", gcodec.plname); 1653 EXPECT_STREQ("ISAC", gcodec.plname);
(...skipping 15 matching lines...) Expand all
1666 // Set ISAC(16K) and CN(8K). VAD should not be activated. 1669 // Set ISAC(16K) and CN(8K). VAD should not be activated.
1667 parameters.codecs[0] = kIsacCodec; 1670 parameters.codecs[0] = kIsacCodec;
1668 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1671 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1669 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1672 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1670 EXPECT_STREQ("ISAC", gcodec.plname); 1673 EXPECT_STREQ("ISAC", gcodec.plname);
1671 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1674 EXPECT_FALSE(voe_.GetVAD(channel_num));
1672 } 1675 }
1673 1676
1674 // Test that we perform case-insensitive matching of codec names. 1677 // Test that we perform case-insensitive matching of codec names.
1675 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 1678 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
1676 EXPECT_TRUE(SetupEngine()); 1679 EXPECT_TRUE(SetupEngineWithSendStream());
1677 int channel_num = voe_.GetLastChannel(); 1680 int channel_num = voe_.GetLastChannel();
1678 cricket::AudioSendParameters parameters; 1681 cricket::AudioSendParameters parameters;
1679 parameters.codecs.push_back(kIsacCodec); 1682 parameters.codecs.push_back(kIsacCodec);
1680 parameters.codecs.push_back(kPcmuCodec); 1683 parameters.codecs.push_back(kPcmuCodec);
1681 parameters.codecs.push_back(kCn16000Codec); 1684 parameters.codecs.push_back(kCn16000Codec);
1682 parameters.codecs.push_back(kCn8000Codec); 1685 parameters.codecs.push_back(kCn8000Codec);
1683 parameters.codecs.push_back(kTelephoneEventCodec); 1686 parameters.codecs.push_back(kTelephoneEventCodec);
1684 parameters.codecs.push_back(kRedCodec); 1687 parameters.codecs.push_back(kRedCodec);
1685 parameters.codecs[0].name = "iSaC"; 1688 parameters.codecs[0].name = "iSaC";
1686 parameters.codecs[0].id = 96; 1689 parameters.codecs[0].id = 96;
1687 parameters.codecs[2].id = 97; // wideband CN 1690 parameters.codecs[2].id = 97; // wideband CN
1688 parameters.codecs[4].id = 98; // DTMF 1691 parameters.codecs[4].id = 98; // DTMF
1689 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1692 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1690 webrtc::CodecInst gcodec; 1693 webrtc::CodecInst gcodec;
1691 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1694 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1692 EXPECT_EQ(96, gcodec.pltype); 1695 EXPECT_EQ(96, gcodec.pltype);
1693 EXPECT_STREQ("ISAC", gcodec.plname); 1696 EXPECT_STREQ("ISAC", gcodec.plname);
1694 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1697 EXPECT_TRUE(voe_.GetVAD(channel_num));
1695 EXPECT_FALSE(voe_.GetRED(channel_num)); 1698 EXPECT_FALSE(voe_.GetRED(channel_num));
1696 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1699 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1697 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1700 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1698 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1701 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1699 } 1702 }
1700 1703
1701 // Test that we set up RED correctly as caller. 1704 // Test that we set up RED correctly as caller.
1702 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCaller) { 1705 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCaller) {
1703 EXPECT_TRUE(SetupEngine()); 1706 EXPECT_TRUE(SetupEngineWithSendStream());
1704 int channel_num = voe_.GetLastChannel(); 1707 int channel_num = voe_.GetLastChannel();
1705 cricket::AudioSendParameters parameters; 1708 cricket::AudioSendParameters parameters;
1706 parameters.codecs.push_back(kRedCodec); 1709 parameters.codecs.push_back(kRedCodec);
1707 parameters.codecs.push_back(kIsacCodec); 1710 parameters.codecs.push_back(kIsacCodec);
1708 parameters.codecs.push_back(kPcmuCodec); 1711 parameters.codecs.push_back(kPcmuCodec);
1709 parameters.codecs[0].id = 127; 1712 parameters.codecs[0].id = 127;
1710 parameters.codecs[0].params[""] = "96/96"; 1713 parameters.codecs[0].params[""] = "96/96";
1711 parameters.codecs[1].id = 96; 1714 parameters.codecs[1].id = 96;
1712 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1715 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1713 webrtc::CodecInst gcodec; 1716 webrtc::CodecInst gcodec;
(...skipping 24 matching lines...) Expand all
1738 webrtc::CodecInst gcodec; 1741 webrtc::CodecInst gcodec;
1739 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1742 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1740 EXPECT_EQ(96, gcodec.pltype); 1743 EXPECT_EQ(96, gcodec.pltype);
1741 EXPECT_STREQ("ISAC", gcodec.plname); 1744 EXPECT_STREQ("ISAC", gcodec.plname);
1742 EXPECT_TRUE(voe_.GetRED(channel_num)); 1745 EXPECT_TRUE(voe_.GetRED(channel_num));
1743 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); 1746 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num));
1744 } 1747 }
1745 1748
1746 // Test that we set up RED correctly if params are omitted. 1749 // Test that we set up RED correctly if params are omitted.
1747 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDNoParams) { 1750 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDNoParams) {
1748 EXPECT_TRUE(SetupEngine()); 1751 EXPECT_TRUE(SetupEngineWithSendStream());
1749 int channel_num = voe_.GetLastChannel(); 1752 int channel_num = voe_.GetLastChannel();
1750 cricket::AudioSendParameters parameters; 1753 cricket::AudioSendParameters parameters;
1751 parameters.codecs.push_back(kRedCodec); 1754 parameters.codecs.push_back(kRedCodec);
1752 parameters.codecs.push_back(kIsacCodec); 1755 parameters.codecs.push_back(kIsacCodec);
1753 parameters.codecs.push_back(kPcmuCodec); 1756 parameters.codecs.push_back(kPcmuCodec);
1754 parameters.codecs[0].id = 127; 1757 parameters.codecs[0].id = 127;
1755 parameters.codecs[1].id = 96; 1758 parameters.codecs[1].id = 96;
1756 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1759 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1757 webrtc::CodecInst gcodec; 1760 webrtc::CodecInst gcodec;
1758 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1761 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1759 EXPECT_EQ(96, gcodec.pltype); 1762 EXPECT_EQ(96, gcodec.pltype);
1760 EXPECT_STREQ("ISAC", gcodec.plname); 1763 EXPECT_STREQ("ISAC", gcodec.plname);
1761 EXPECT_TRUE(voe_.GetRED(channel_num)); 1764 EXPECT_TRUE(voe_.GetRED(channel_num));
1762 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); 1765 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num));
1763 } 1766 }
1764 1767
1765 // Test that we ignore RED if the parameters aren't named the way we expect. 1768 // Test that we ignore RED if the parameters aren't named the way we expect.
1766 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED1) { 1769 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED1) {
1767 EXPECT_TRUE(SetupEngine()); 1770 EXPECT_TRUE(SetupEngineWithSendStream());
1768 int channel_num = voe_.GetLastChannel(); 1771 int channel_num = voe_.GetLastChannel();
1769 cricket::AudioSendParameters parameters; 1772 cricket::AudioSendParameters parameters;
1770 parameters.codecs.push_back(kRedCodec); 1773 parameters.codecs.push_back(kRedCodec);
1771 parameters.codecs.push_back(kIsacCodec); 1774 parameters.codecs.push_back(kIsacCodec);
1772 parameters.codecs.push_back(kPcmuCodec); 1775 parameters.codecs.push_back(kPcmuCodec);
1773 parameters.codecs[0].id = 127; 1776 parameters.codecs[0].id = 127;
1774 parameters.codecs[0].params["ABC"] = "96/96"; 1777 parameters.codecs[0].params["ABC"] = "96/96";
1775 parameters.codecs[1].id = 96; 1778 parameters.codecs[1].id = 96;
1776 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1779 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1777 webrtc::CodecInst gcodec; 1780 webrtc::CodecInst gcodec;
1778 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1781 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1779 EXPECT_EQ(96, gcodec.pltype); 1782 EXPECT_EQ(96, gcodec.pltype);
1780 EXPECT_STREQ("ISAC", gcodec.plname); 1783 EXPECT_STREQ("ISAC", gcodec.plname);
1781 EXPECT_FALSE(voe_.GetRED(channel_num)); 1784 EXPECT_FALSE(voe_.GetRED(channel_num));
1782 } 1785 }
1783 1786
1784 // Test that we ignore RED if it uses different primary/secondary encoding. 1787 // Test that we ignore RED if it uses different primary/secondary encoding.
1785 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED2) { 1788 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED2) {
1786 EXPECT_TRUE(SetupEngine()); 1789 EXPECT_TRUE(SetupEngineWithSendStream());
1787 int channel_num = voe_.GetLastChannel(); 1790 int channel_num = voe_.GetLastChannel();
1788 cricket::AudioSendParameters parameters; 1791 cricket::AudioSendParameters parameters;
1789 parameters.codecs.push_back(kRedCodec); 1792 parameters.codecs.push_back(kRedCodec);
1790 parameters.codecs.push_back(kIsacCodec); 1793 parameters.codecs.push_back(kIsacCodec);
1791 parameters.codecs.push_back(kPcmuCodec); 1794 parameters.codecs.push_back(kPcmuCodec);
1792 parameters.codecs[0].id = 127; 1795 parameters.codecs[0].id = 127;
1793 parameters.codecs[0].params[""] = "96/0"; 1796 parameters.codecs[0].params[""] = "96/0";
1794 parameters.codecs[1].id = 96; 1797 parameters.codecs[1].id = 96;
1795 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1798 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1796 webrtc::CodecInst gcodec; 1799 webrtc::CodecInst gcodec;
1797 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1800 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1798 EXPECT_EQ(96, gcodec.pltype); 1801 EXPECT_EQ(96, gcodec.pltype);
1799 EXPECT_STREQ("ISAC", gcodec.plname); 1802 EXPECT_STREQ("ISAC", gcodec.plname);
1800 EXPECT_FALSE(voe_.GetRED(channel_num)); 1803 EXPECT_FALSE(voe_.GetRED(channel_num));
1801 } 1804 }
1802 1805
1803 // Test that we ignore RED if it uses more than 2 encodings. 1806 // Test that we ignore RED if it uses more than 2 encodings.
1804 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED3) { 1807 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED3) {
1805 EXPECT_TRUE(SetupEngine()); 1808 EXPECT_TRUE(SetupEngineWithSendStream());
1806 int channel_num = voe_.GetLastChannel(); 1809 int channel_num = voe_.GetLastChannel();
1807 cricket::AudioSendParameters parameters; 1810 cricket::AudioSendParameters parameters;
1808 parameters.codecs.push_back(kRedCodec); 1811 parameters.codecs.push_back(kRedCodec);
1809 parameters.codecs.push_back(kIsacCodec); 1812 parameters.codecs.push_back(kIsacCodec);
1810 parameters.codecs.push_back(kPcmuCodec); 1813 parameters.codecs.push_back(kPcmuCodec);
1811 parameters.codecs[0].id = 127; 1814 parameters.codecs[0].id = 127;
1812 parameters.codecs[0].params[""] = "96/96/96"; 1815 parameters.codecs[0].params[""] = "96/96/96";
1813 parameters.codecs[1].id = 96; 1816 parameters.codecs[1].id = 96;
1814 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1817 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1815 webrtc::CodecInst gcodec; 1818 webrtc::CodecInst gcodec;
1816 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1819 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1817 EXPECT_EQ(96, gcodec.pltype); 1820 EXPECT_EQ(96, gcodec.pltype);
1818 EXPECT_STREQ("ISAC", gcodec.plname); 1821 EXPECT_STREQ("ISAC", gcodec.plname);
1819 EXPECT_FALSE(voe_.GetRED(channel_num)); 1822 EXPECT_FALSE(voe_.GetRED(channel_num));
1820 } 1823 }
1821 1824
1822 // Test that we ignore RED if it has bogus codec ids. 1825 // Test that we ignore RED if it has bogus codec ids.
1823 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED4) { 1826 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED4) {
1824 EXPECT_TRUE(SetupEngine()); 1827 EXPECT_TRUE(SetupEngineWithSendStream());
1825 int channel_num = voe_.GetLastChannel(); 1828 int channel_num = voe_.GetLastChannel();
1826 cricket::AudioSendParameters parameters; 1829 cricket::AudioSendParameters parameters;
1827 parameters.codecs.push_back(kRedCodec); 1830 parameters.codecs.push_back(kRedCodec);
1828 parameters.codecs.push_back(kIsacCodec); 1831 parameters.codecs.push_back(kIsacCodec);
1829 parameters.codecs.push_back(kPcmuCodec); 1832 parameters.codecs.push_back(kPcmuCodec);
1830 parameters.codecs[0].id = 127; 1833 parameters.codecs[0].id = 127;
1831 parameters.codecs[0].params[""] = "ABC/ABC"; 1834 parameters.codecs[0].params[""] = "ABC/ABC";
1832 parameters.codecs[1].id = 96; 1835 parameters.codecs[1].id = 96;
1833 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1836 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1834 webrtc::CodecInst gcodec; 1837 webrtc::CodecInst gcodec;
1835 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1838 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1836 EXPECT_EQ(96, gcodec.pltype); 1839 EXPECT_EQ(96, gcodec.pltype);
1837 EXPECT_STREQ("ISAC", gcodec.plname); 1840 EXPECT_STREQ("ISAC", gcodec.plname);
1838 EXPECT_FALSE(voe_.GetRED(channel_num)); 1841 EXPECT_FALSE(voe_.GetRED(channel_num));
1839 } 1842 }
1840 1843
1841 // Test that we ignore RED if it refers to a codec that is not present. 1844 // Test that we ignore RED if it refers to a codec that is not present.
1842 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED5) { 1845 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED5) {
1843 EXPECT_TRUE(SetupEngine()); 1846 EXPECT_TRUE(SetupEngineWithSendStream());
1844 int channel_num = voe_.GetLastChannel(); 1847 int channel_num = voe_.GetLastChannel();
1845 cricket::AudioSendParameters parameters; 1848 cricket::AudioSendParameters parameters;
1846 parameters.codecs.push_back(kRedCodec); 1849 parameters.codecs.push_back(kRedCodec);
1847 parameters.codecs.push_back(kIsacCodec); 1850 parameters.codecs.push_back(kIsacCodec);
1848 parameters.codecs.push_back(kPcmuCodec); 1851 parameters.codecs.push_back(kPcmuCodec);
1849 parameters.codecs[0].id = 127; 1852 parameters.codecs[0].id = 127;
1850 parameters.codecs[0].params[""] = "97/97"; 1853 parameters.codecs[0].params[""] = "97/97";
1851 parameters.codecs[1].id = 96; 1854 parameters.codecs[1].id = 96;
1852 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1855 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1853 webrtc::CodecInst gcodec; 1856 webrtc::CodecInst gcodec;
(...skipping 12 matching lines...) Expand all
1866 } 1869 }
1867 1870
1868 // Test support for absolute send time header extension. 1871 // Test support for absolute send time header extension.
1869 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { 1872 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) {
1870 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 1873 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1871 } 1874 }
1872 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) { 1875 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) {
1873 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 1876 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1874 } 1877 }
1875 1878
1876 // Test that we can create a channel and start sending/playing out on it. 1879 // Test that we can create a channel and start sending on it.
1877 TEST_F(WebRtcVoiceEngineTestFake, SendAndPlayout) { 1880 TEST_F(WebRtcVoiceEngineTestFake, Send) {
1878 EXPECT_TRUE(SetupEngine()); 1881 EXPECT_TRUE(SetupEngineWithSendStream());
1879 int channel_num = voe_.GetLastChannel(); 1882 int channel_num = voe_.GetLastChannel();
1880 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 1883 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
1881 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 1884 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
1882 EXPECT_TRUE(voe_.GetSend(channel_num)); 1885 EXPECT_TRUE(voe_.GetSend(channel_num));
1886 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
1887 EXPECT_FALSE(voe_.GetSend(channel_num));
1888 }
1889
1890 // Test that we can create a channel and start playing out on it.
1891 TEST_F(WebRtcVoiceEngineTestFake, Playout) {
1892 EXPECT_TRUE(SetupEngineWithRecvStream());
1893 int channel_num = voe_.GetLastChannel();
1894 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
1883 EXPECT_TRUE(channel_->SetPlayout(true)); 1895 EXPECT_TRUE(channel_->SetPlayout(true));
1884 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 1896 EXPECT_TRUE(voe_.GetPlayout(channel_num));
1885 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
1886 EXPECT_FALSE(voe_.GetSend(channel_num));
1887 EXPECT_TRUE(channel_->SetPlayout(false)); 1897 EXPECT_TRUE(channel_->SetPlayout(false));
1888 EXPECT_FALSE(voe_.GetPlayout(channel_num)); 1898 EXPECT_FALSE(voe_.GetPlayout(channel_num));
1889 } 1899 }
1890 1900
1891 // Test that we can add and remove send streams. 1901 // Test that we can add and remove send streams.
1892 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { 1902 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) {
1893 SetupForMultiSendStream(); 1903 SetupForMultiSendStream();
1894 1904
1895 static const uint32 kSsrcs4[] = {1, 2, 3, 4}; 1905 static const uint32 kSsrcs4[] = {1, 2, 3, 4};
1896 1906
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
2020 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name); 2030 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name);
2021 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent); 2031 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent);
2022 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_sent); 2032 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_sent);
2023 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_lost); 2033 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_lost);
2024 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[i].fraction_lost); 2034 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[i].fraction_lost);
2025 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].ext_seqnum); 2035 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].ext_seqnum);
2026 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].rtt_ms); 2036 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].rtt_ms);
2027 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].jitter_ms); 2037 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].jitter_ms);
2028 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name); 2038 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name);
2029 } 2039 }
2040 EXPECT_EQ(0u, info.receivers.size());
2030 2041
2031 EXPECT_EQ(0u, info.receivers.size()); 2042 // Registered stream's remote SSRC is kSsrc2. Send a packet with SSRC=1.
2043 // We should drop the packet and no stats should be available.
2032 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2044 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2033 EXPECT_EQ(true, channel_->GetStats(&info)); 2045 EXPECT_EQ(true, channel_->GetStats(&info));
2046 EXPECT_EQ(0u, info.receivers.size());
2034 2047
2048 // Remove the kSsrc2 stream and deliver a new packet - a default receive
2049 // stream should be created and we should see stats.
2050 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2051 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2052 EXPECT_EQ(true, channel_->GetStats(&info));
2035 EXPECT_EQ(1u, info.receivers.size()); 2053 EXPECT_EQ(1u, info.receivers.size());
2054
2036 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd); 2055 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd);
2037 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd); 2056 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd);
2038 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost); 2057 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost);
2039 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum); 2058 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum);
2040 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name); 2059 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name);
2041 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) / 2060 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) /
2042 (1 << 14), info.receivers[0].expand_rate); 2061 (1 << 14), info.receivers[0].expand_rate);
2043 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) / 2062 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) /
2044 (1 << 14), info.receivers[0].speech_expand_rate); 2063 (1 << 14), info.receivers[0].speech_expand_rate);
2045 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) / 2064 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
2046 (1 << 14), info.receivers[0].secondary_decoded_rate); 2065 (1 << 14), info.receivers[0].secondary_decoded_rate);
2047 EXPECT_EQ( 2066 EXPECT_EQ(
2048 static_cast<float>(cricket::kNetStats.currentAccelerateRate) / (1 << 14), 2067 static_cast<float>(cricket::kNetStats.currentAccelerateRate) / (1 << 14),
2049 info.receivers[0].accelerate_rate); 2068 info.receivers[0].accelerate_rate);
2050 EXPECT_EQ( 2069 EXPECT_EQ(
2051 static_cast<float>(cricket::kNetStats.currentPreemptiveRate) / (1 << 14), 2070 static_cast<float>(cricket::kNetStats.currentPreemptiveRate) / (1 << 14),
2052 info.receivers[0].preemptive_expand_rate); 2071 info.receivers[0].preemptive_expand_rate);
2053 } 2072 }
2054 2073
2055 // Test that we can add and remove receive streams, and do proper send/playout. 2074 // Test that we can add and remove receive streams, and do proper send/playout.
2056 // We can receive on multiple streams while sending one stream. 2075 // We can receive on multiple streams while sending one stream.
2057 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { 2076 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
2058 EXPECT_TRUE(SetupEngine()); 2077 EXPECT_TRUE(SetupEngineWithSendStream());
2059 int channel_num1 = voe_.GetLastChannel(); 2078 int channel_num1 = voe_.GetLastChannel();
2060 2079
2061 // Start playout on the default channel. 2080 // Start playout without a receive stream.
2062 send_parameters_.options = options_conference_;
2063 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2081 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2064 EXPECT_TRUE(channel_->SetPlayout(true)); 2082 EXPECT_TRUE(channel_->SetPlayout(true));
2065 EXPECT_TRUE(voe_.GetPlayout(channel_num1)); 2083 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2066 2084
2067 // Adding another stream should disable playout on the default channel. 2085 // Adding another stream should enable playout on the new stream only.
2068 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2086 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2069 int channel_num2 = voe_.GetLastChannel(); 2087 int channel_num2 = voe_.GetLastChannel();
2070 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2088 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2071 EXPECT_TRUE(voe_.GetSend(channel_num1)); 2089 EXPECT_TRUE(voe_.GetSend(channel_num1));
2072 EXPECT_FALSE(voe_.GetSend(channel_num2)); 2090 EXPECT_FALSE(voe_.GetSend(channel_num2));
2073 2091
2074 // Make sure only the new channel is played out. 2092 // Make sure only the new stream is played out.
2075 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2093 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2076 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2094 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2077 2095
2078 // Adding yet another stream should have stream 2 and 3 enabled for playout. 2096 // Adding yet another stream should have stream 2 and 3 enabled for playout.
2079 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2097 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2080 int channel_num3 = voe_.GetLastChannel(); 2098 int channel_num3 = voe_.GetLastChannel();
2081 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2099 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2082 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2100 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2083 EXPECT_TRUE(voe_.GetPlayout(channel_num3)); 2101 EXPECT_TRUE(voe_.GetPlayout(channel_num3));
2084 EXPECT_FALSE(voe_.GetSend(channel_num3)); 2102 EXPECT_FALSE(voe_.GetSend(channel_num3));
2085 2103
2086 // Stop sending. 2104 // Stop sending.
2087 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2105 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
2088 EXPECT_FALSE(voe_.GetSend(channel_num1)); 2106 EXPECT_FALSE(voe_.GetSend(channel_num1));
2089 EXPECT_FALSE(voe_.GetSend(channel_num2)); 2107 EXPECT_FALSE(voe_.GetSend(channel_num2));
2090 EXPECT_FALSE(voe_.GetSend(channel_num3)); 2108 EXPECT_FALSE(voe_.GetSend(channel_num3));
2091 2109
2092 // Stop playout. 2110 // Stop playout.
2093 EXPECT_TRUE(channel_->SetPlayout(false)); 2111 EXPECT_TRUE(channel_->SetPlayout(false));
2094 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2112 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2095 EXPECT_FALSE(voe_.GetPlayout(channel_num2)); 2113 EXPECT_FALSE(voe_.GetPlayout(channel_num2));
2096 EXPECT_FALSE(voe_.GetPlayout(channel_num3)); 2114 EXPECT_FALSE(voe_.GetPlayout(channel_num3));
2097 2115
2098 // Restart playout and make sure the default channel still is not played out. 2116 // Restart playout and make sure only recv streams are played out.
2099 EXPECT_TRUE(channel_->SetPlayout(true)); 2117 EXPECT_TRUE(channel_->SetPlayout(true));
2100 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2118 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2101 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2119 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2102 EXPECT_TRUE(voe_.GetPlayout(channel_num3)); 2120 EXPECT_TRUE(voe_.GetPlayout(channel_num3));
2103 2121
2104 // Now remove the new streams and verify that the default channel is 2122 // Now remove the recv streams and verify that the send stream doesn't play.
2105 // played out again.
2106 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2123 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2107 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2124 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2108 2125 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2109 EXPECT_TRUE(voe_.GetPlayout(channel_num1));
2110 } 2126 }
2111 2127
2112 // Test that we can set the devices to use. 2128 // Test that we can set the devices to use.
2113 TEST_F(WebRtcVoiceEngineTestFake, SetDevices) { 2129 TEST_F(WebRtcVoiceEngineTestFake, SetDevices) {
2114 EXPECT_TRUE(SetupEngine()); 2130 EXPECT_TRUE(SetupEngineWithSendStream());
2115 int channel_num = voe_.GetLastChannel(); 2131 int send_channel = voe_.GetLastChannel();
2132 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2133 int recv_channel = voe_.GetLastChannel();
2116 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2134 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2117 2135
2118 cricket::Device default_dev(cricket::kFakeDefaultDeviceName, 2136 cricket::Device default_dev(cricket::kFakeDefaultDeviceName,
2119 cricket::kFakeDefaultDeviceId); 2137 cricket::kFakeDefaultDeviceId);
2120 cricket::Device dev(cricket::kFakeDeviceName, 2138 cricket::Device dev(cricket::kFakeDeviceName,
2121 cricket::kFakeDeviceId); 2139 cricket::kFakeDeviceId);
2122 2140
2123 // Test SetDevices() while not sending or playing. 2141 // Test SetDevices() while not sending or playing.
2124 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev)); 2142 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev));
2125 2143
2126 // Test SetDevices() while sending and playing. 2144 // Test SetDevices() while sending and playing.
2127 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2145 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2128 EXPECT_TRUE(channel_->SetPlayout(true)); 2146 EXPECT_TRUE(channel_->SetPlayout(true));
2129 EXPECT_TRUE(voe_.GetSend(channel_num)); 2147 EXPECT_TRUE(voe_.GetSend(send_channel));
2130 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2148 EXPECT_TRUE(voe_.GetPlayout(recv_channel));
2131 2149
2132 EXPECT_TRUE(engine_.SetDevices(&dev, &dev)); 2150 EXPECT_TRUE(engine_.SetDevices(&dev, &dev));
2133 2151
2134 EXPECT_TRUE(voe_.GetSend(channel_num)); 2152 EXPECT_TRUE(voe_.GetSend(send_channel));
2135 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2153 EXPECT_TRUE(voe_.GetPlayout(recv_channel));
2136 2154
2137 // Test that failure to open newly selected devices does not prevent opening 2155 // Test that failure to open newly selected devices does not prevent opening
2138 // ones after that. 2156 // ones after that.
2139 voe_.set_playout_fail_channel(channel_num); 2157 voe_.set_playout_fail_channel(recv_channel);
2140 voe_.set_send_fail_channel(channel_num); 2158 voe_.set_send_fail_channel(send_channel);
2141 2159
2142 EXPECT_FALSE(engine_.SetDevices(&default_dev, &default_dev)); 2160 EXPECT_FALSE(engine_.SetDevices(&default_dev, &default_dev));
2143 2161
2144 EXPECT_FALSE(voe_.GetSend(channel_num)); 2162 EXPECT_FALSE(voe_.GetSend(send_channel));
2145 EXPECT_FALSE(voe_.GetPlayout(channel_num)); 2163 EXPECT_FALSE(voe_.GetPlayout(recv_channel));
2146 2164
2147 voe_.set_playout_fail_channel(-1); 2165 voe_.set_playout_fail_channel(-1);
2148 voe_.set_send_fail_channel(-1); 2166 voe_.set_send_fail_channel(-1);
2149 2167
2150 EXPECT_TRUE(engine_.SetDevices(&dev, &dev)); 2168 EXPECT_TRUE(engine_.SetDevices(&dev, &dev));
2151 2169
2152 EXPECT_TRUE(voe_.GetSend(channel_num)); 2170 EXPECT_TRUE(voe_.GetSend(send_channel));
2153 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2171 EXPECT_TRUE(voe_.GetPlayout(recv_channel));
2154 } 2172 }
2155 2173
2156 // Test that we can set the devices to use even if we failed to 2174 // Test that we can set the devices to use even if we failed to
2157 // open the initial ones. 2175 // open the initial ones.
2158 TEST_F(WebRtcVoiceEngineTestFake, SetDevicesWithInitiallyBadDevices) { 2176 TEST_F(WebRtcVoiceEngineTestFake, SetDevicesWithInitiallyBadDevices) {
2159 EXPECT_TRUE(SetupEngine()); 2177 EXPECT_TRUE(SetupEngineWithSendStream());
2160 int channel_num = voe_.GetLastChannel(); 2178 int send_channel = voe_.GetLastChannel();
2179 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2180 int recv_channel = voe_.GetLastChannel();
2161 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2181 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2162 2182
2163 cricket::Device default_dev(cricket::kFakeDefaultDeviceName, 2183 cricket::Device default_dev(cricket::kFakeDefaultDeviceName,
2164 cricket::kFakeDefaultDeviceId); 2184 cricket::kFakeDefaultDeviceId);
2165 cricket::Device dev(cricket::kFakeDeviceName, 2185 cricket::Device dev(cricket::kFakeDeviceName,
2166 cricket::kFakeDeviceId); 2186 cricket::kFakeDeviceId);
2167 2187
2168 // Test that failure to open devices selected before starting 2188 // Test that failure to open devices selected before starting
2169 // send/play does not prevent opening newly selected ones after that. 2189 // send/play does not prevent opening newly selected ones after that.
2170 voe_.set_playout_fail_channel(channel_num); 2190 voe_.set_playout_fail_channel(recv_channel);
2171 voe_.set_send_fail_channel(channel_num); 2191 voe_.set_send_fail_channel(send_channel);
2172 2192
2173 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev)); 2193 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev));
2174 2194
2175 EXPECT_FALSE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2195 EXPECT_FALSE(channel_->SetSend(cricket::SEND_MICROPHONE));
2176 EXPECT_FALSE(channel_->SetPlayout(true)); 2196 EXPECT_FALSE(channel_->SetPlayout(true));
2177 EXPECT_FALSE(voe_.GetSend(channel_num)); 2197 EXPECT_FALSE(voe_.GetSend(send_channel));
2178 EXPECT_FALSE(voe_.GetPlayout(channel_num)); 2198 EXPECT_FALSE(voe_.GetPlayout(recv_channel));
2179 2199
2180 voe_.set_playout_fail_channel(-1); 2200 voe_.set_playout_fail_channel(-1);
2181 voe_.set_send_fail_channel(-1); 2201 voe_.set_send_fail_channel(-1);
2182 2202
2183 EXPECT_TRUE(engine_.SetDevices(&dev, &dev)); 2203 EXPECT_TRUE(engine_.SetDevices(&dev, &dev));
2184 2204
2185 EXPECT_TRUE(voe_.GetSend(channel_num)); 2205 EXPECT_TRUE(voe_.GetSend(send_channel));
2186 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2206 EXPECT_TRUE(voe_.GetPlayout(recv_channel));
2187 }
2188
2189 // Test that we can create a channel configured for multi-point conferences,
2190 // and start sending/playing out on it.
2191 TEST_F(WebRtcVoiceEngineTestFake, ConferenceSendAndPlayout) {
2192 EXPECT_TRUE(SetupEngine());
2193 int channel_num = voe_.GetLastChannel();
2194 send_parameters_.options = options_conference_;
2195 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2196 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2197 EXPECT_TRUE(voe_.GetSend(channel_num));
2198 } 2207 }
2199 2208
2200 // Test that we can create a channel configured for Codian bridges, 2209 // Test that we can create a channel configured for Codian bridges,
2201 // and start sending/playing out on it. 2210 // and start sending on it.
2202 TEST_F(WebRtcVoiceEngineTestFake, CodianSendAndPlayout) { 2211 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) {
2203 EXPECT_TRUE(SetupEngine()); 2212 EXPECT_TRUE(SetupEngineWithSendStream());
2204 int channel_num = voe_.GetLastChannel(); 2213 int channel_num = voe_.GetLastChannel();
2205 webrtc::AgcConfig agc_config; 2214 webrtc::AgcConfig agc_config;
2206 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2215 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2207 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2216 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2208 send_parameters_.options = options_adjust_agc_; 2217 send_parameters_.options = options_adjust_agc_;
2209 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2218 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2210 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2219 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2211 EXPECT_TRUE(voe_.GetSend(channel_num)); 2220 EXPECT_TRUE(voe_.GetSend(channel_num));
2212 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2221 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2213 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated 2222 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated
2214 EXPECT_TRUE(channel_->SetPlayout(true));
2215 EXPECT_TRUE(voe_.GetPlayout(channel_num));
2216 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2223 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
2217 EXPECT_FALSE(voe_.GetSend(channel_num)); 2224 EXPECT_FALSE(voe_.GetSend(channel_num));
2218 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2225 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2219 EXPECT_EQ(0, agc_config.targetLeveldBOv); // level was restored 2226 EXPECT_EQ(0, agc_config.targetLeveldBOv); // level was restored
2220 EXPECT_TRUE(channel_->SetPlayout(false));
2221 EXPECT_FALSE(voe_.GetPlayout(channel_num));
2222 } 2227 }
2223 2228
2224 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { 2229 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) {
2225 EXPECT_TRUE(SetupEngine()); 2230 EXPECT_TRUE(SetupEngineWithSendStream());
2226 webrtc::AgcConfig agc_config; 2231 webrtc::AgcConfig agc_config;
2227 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2232 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2228 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2233 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2229 2234
2230 cricket::AudioOptions options; 2235 cricket::AudioOptions options;
2231 options.tx_agc_target_dbov.Set(3); 2236 options.tx_agc_target_dbov.Set(3);
2232 options.tx_agc_digital_compression_gain.Set(9); 2237 options.tx_agc_digital_compression_gain.Set(9);
2233 options.tx_agc_limiter.Set(true); 2238 options.tx_agc_limiter.Set(true);
2234 options.auto_gain_control.Set(true); 2239 options.auto_gain_control.Set(true);
2235 EXPECT_TRUE(engine_.SetOptions(options)); 2240 EXPECT_TRUE(engine_.SetOptions(options));
2236 2241
2237 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2242 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2238 EXPECT_EQ(3, agc_config.targetLeveldBOv); 2243 EXPECT_EQ(3, agc_config.targetLeveldBOv);
2239 EXPECT_EQ(9, agc_config.digitalCompressionGaindB); 2244 EXPECT_EQ(9, agc_config.digitalCompressionGaindB);
2240 EXPECT_TRUE(agc_config.limiterEnable); 2245 EXPECT_TRUE(agc_config.limiterEnable);
2241 2246
2242 // Check interaction with adjust_agc_delta. Both should be respected, for 2247 // Check interaction with adjust_agc_delta. Both should be respected, for
2243 // backwards compatibility. 2248 // backwards compatibility.
2244 options.adjust_agc_delta.Set(-10); 2249 options.adjust_agc_delta.Set(-10);
2245 EXPECT_TRUE(engine_.SetOptions(options)); 2250 EXPECT_TRUE(engine_.SetOptions(options));
2246 2251
2247 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2252 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2248 EXPECT_EQ(13, agc_config.targetLeveldBOv); 2253 EXPECT_EQ(13, agc_config.targetLeveldBOv);
2249 } 2254 }
2250 2255
2251 TEST_F(WebRtcVoiceEngineTestFake, RxAgcConfigViaOptions) { 2256 TEST_F(WebRtcVoiceEngineTestFake, RxAgcConfigViaOptions) {
2252 EXPECT_TRUE(SetupEngine()); 2257 EXPECT_TRUE(SetupEngineWithSendStream());
2253 int channel_num = voe_.GetLastChannel();
2254 send_parameters_.options.rx_agc_target_dbov.Set(6); 2258 send_parameters_.options.rx_agc_target_dbov.Set(6);
2255 send_parameters_.options.rx_agc_digital_compression_gain.Set(0); 2259 send_parameters_.options.rx_agc_digital_compression_gain.Set(0);
2256 send_parameters_.options.rx_agc_limiter.Set(true); 2260 send_parameters_.options.rx_agc_limiter.Set(true);
2257 send_parameters_.options.rx_auto_gain_control.Set(true); 2261 send_parameters_.options.rx_auto_gain_control.Set(true);
2258 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2262 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2263 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2264 int channel_num = voe_.GetLastChannel();
2259 2265
2260 webrtc::AgcConfig agc_config; 2266 webrtc::AgcConfig agc_config;
2261 EXPECT_EQ(0, engine_.voe()->processing()->GetRxAgcConfig( 2267 EXPECT_EQ(0, engine_.voe()->processing()->GetRxAgcConfig(
2262 channel_num, agc_config)); 2268 channel_num, agc_config));
2263 EXPECT_EQ(6, agc_config.targetLeveldBOv); 2269 EXPECT_EQ(6, agc_config.targetLeveldBOv);
2264 EXPECT_EQ(0, agc_config.digitalCompressionGaindB); 2270 EXPECT_EQ(0, agc_config.digitalCompressionGaindB);
2265 EXPECT_TRUE(agc_config.limiterEnable); 2271 EXPECT_TRUE(agc_config.limiterEnable);
2266 } 2272 }
2267 2273
2268 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) { 2274 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) {
2269 EXPECT_TRUE(SetupEngine()); 2275 EXPECT_TRUE(SetupEngineWithSendStream());
2270 cricket::AudioOptions options; 2276 cricket::AudioOptions options;
2271 options.recording_sample_rate.Set(48000u); 2277 options.recording_sample_rate.Set(48000u);
2272 options.playout_sample_rate.Set(44100u); 2278 options.playout_sample_rate.Set(44100u);
2273 EXPECT_TRUE(engine_.SetOptions(options)); 2279 EXPECT_TRUE(engine_.SetOptions(options));
2274 2280
2275 unsigned int recording_sample_rate, playout_sample_rate; 2281 unsigned int recording_sample_rate, playout_sample_rate;
2276 EXPECT_EQ(0, voe_.RecordingSampleRate(&recording_sample_rate)); 2282 EXPECT_EQ(0, voe_.RecordingSampleRate(&recording_sample_rate));
2277 EXPECT_EQ(0, voe_.PlayoutSampleRate(&playout_sample_rate)); 2283 EXPECT_EQ(0, voe_.PlayoutSampleRate(&playout_sample_rate));
2278 EXPECT_EQ(48000u, recording_sample_rate); 2284 EXPECT_EQ(48000u, recording_sample_rate);
2279 EXPECT_EQ(44100u, playout_sample_rate); 2285 EXPECT_EQ(44100u, playout_sample_rate);
2280 } 2286 }
2281 2287
2282 TEST_F(WebRtcVoiceEngineTestFake, TraceFilterViaTraceOptions) { 2288 TEST_F(WebRtcVoiceEngineTestFake, TraceFilterViaTraceOptions) {
2283 EXPECT_TRUE(SetupEngine()); 2289 EXPECT_TRUE(SetupEngineWithSendStream());
2284 engine_.SetLogging(rtc::LS_INFO, ""); 2290 engine_.SetLogging(rtc::LS_INFO, "");
2285 EXPECT_EQ( 2291 EXPECT_EQ(
2286 // Info: 2292 // Info:
2287 webrtc::kTraceStateInfo | webrtc::kTraceInfo | 2293 webrtc::kTraceStateInfo | webrtc::kTraceInfo |
2288 // Warning: 2294 // Warning:
2289 webrtc::kTraceTerseInfo | webrtc::kTraceWarning | 2295 webrtc::kTraceTerseInfo | webrtc::kTraceWarning |
2290 // Error: 2296 // Error:
2291 webrtc::kTraceError | webrtc::kTraceCritical, 2297 webrtc::kTraceError | webrtc::kTraceCritical,
2292 static_cast<int>(trace_wrapper_->filter_)); 2298 static_cast<int>(trace_wrapper_->filter_));
2293 // Now set it explicitly 2299 // Now set it explicitly
2294 std::string filter = 2300 std::string filter =
2295 "tracefilter " + rtc::ToString(webrtc::kTraceDefault); 2301 "tracefilter " + rtc::ToString(webrtc::kTraceDefault);
2296 engine_.SetLogging(rtc::LS_VERBOSE, filter.c_str()); 2302 engine_.SetLogging(rtc::LS_VERBOSE, filter.c_str());
2297 EXPECT_EQ(static_cast<unsigned int>(webrtc::kTraceDefault), 2303 EXPECT_EQ(static_cast<unsigned int>(webrtc::kTraceDefault),
2298 trace_wrapper_->filter_); 2304 trace_wrapper_->filter_);
2299 } 2305 }
2300 2306
2301 // Test that we can set the outgoing SSRC properly. 2307 // Test that we can set the outgoing SSRC properly.
2302 // SSRC is set in SetupEngine by calling AddSendStream. 2308 // SSRC is set in SetupEngine by calling AddSendStream.
2303 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { 2309 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) {
2304 EXPECT_TRUE(SetupEngine()); 2310 EXPECT_TRUE(SetupEngineWithSendStream());
2305 int channel_num = voe_.GetLastChannel(); 2311 int channel_num = voe_.GetLastChannel();
2306 unsigned int send_ssrc; 2312 unsigned int send_ssrc;
2307 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num, send_ssrc)); 2313 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num, send_ssrc));
2308 EXPECT_NE(0U, send_ssrc); 2314 EXPECT_NE(0U, send_ssrc);
2309 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num, send_ssrc)); 2315 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num, send_ssrc));
2310 EXPECT_EQ(kSsrc1, send_ssrc); 2316 EXPECT_EQ(kSsrc1, send_ssrc);
2311 } 2317 }
2312 2318
2313 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { 2319 TEST_F(WebRtcVoiceEngineTestFake, GetStats) {
2314 // Setup. We need send codec to be set to get all stats. 2320 // Setup. We need send codec to be set to get all stats.
2315 EXPECT_TRUE(SetupEngine()); 2321 EXPECT_TRUE(SetupEngineWithSendStream());
2316 // SetupEngine adds a send stream with kSsrc1, so the receive stream has to 2322 // SetupEngineWithSendStream adds a send stream with kSsrc1, so the receive
2317 // use a different SSRC. 2323 // stream has to use a different SSRC.
2318 EXPECT_TRUE(channel_->AddRecvStream( 2324 EXPECT_TRUE(channel_->AddRecvStream(
2319 cricket::StreamParams::CreateLegacy(kSsrc2))); 2325 cricket::StreamParams::CreateLegacy(kSsrc2)));
2320 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2326 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2321 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2327 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
2322 2328
2323 cricket::VoiceMediaInfo info; 2329 cricket::VoiceMediaInfo info;
2324 EXPECT_EQ(true, channel_->GetStats(&info)); 2330 EXPECT_EQ(true, channel_->GetStats(&info));
2325 EXPECT_EQ(1u, info.senders.size()); 2331 EXPECT_EQ(1u, info.senders.size());
2326 EXPECT_EQ(kSsrc1, info.senders[0].ssrc()); 2332 EXPECT_EQ(kSsrc1, info.senders[0].ssrc());
2327 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name); 2333 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name);
2328 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].bytes_sent); 2334 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].bytes_sent);
2329 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_sent); 2335 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_sent);
2330 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_lost); 2336 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_lost);
2331 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[0].fraction_lost); 2337 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[0].fraction_lost);
2332 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].ext_seqnum); 2338 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].ext_seqnum);
2333 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].rtt_ms); 2339 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].rtt_ms);
2334 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].jitter_ms); 2340 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].jitter_ms);
2335 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name); 2341 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name);
2336 // TODO(sriniv): Add testing for more fields. These are not populated 2342 // TODO(sriniv): Add testing for more fields. These are not populated
2337 // in FakeWebrtcVoiceEngine yet. 2343 // in FakeWebrtcVoiceEngine yet.
2338 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].audio_level); 2344 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].audio_level);
2339 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_median_ms); 2345 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_median_ms);
2340 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_std_ms); 2346 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_std_ms);
2341 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_return_loss); 2347 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_return_loss);
2342 // EXPECT_EQ(cricket::kIntStatValue, 2348 // EXPECT_EQ(cricket::kIntStatValue,
2343 // info.senders[0].echo_return_loss_enhancement); 2349 // info.senders[0].echo_return_loss_enhancement);
2350 EXPECT_EQ(0u, info.receivers.size());
2344 2351
2352 // Registered stream's remote SSRC is kSsrc2. Send a packet with SSRC=1.
2353 // We should drop the packet and no stats should be available.
2354 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2355 EXPECT_EQ(true, channel_->GetStats(&info));
2345 EXPECT_EQ(0u, info.receivers.size()); 2356 EXPECT_EQ(0u, info.receivers.size());
2357
2358 // Remove the kSsrc2 stream and deliver a new packet - a default receive
2359 // stream should be created and we should see stats.
2360 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2346 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2361 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2347 EXPECT_EQ(true, channel_->GetStats(&info)); 2362 EXPECT_EQ(true, channel_->GetStats(&info));
2348 EXPECT_EQ(1u, info.receivers.size()); 2363 EXPECT_EQ(1u, info.receivers.size());
2349 2364
2350 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd); 2365 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd);
2351 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd); 2366 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd);
2352 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost); 2367 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost);
2353 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum); 2368 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum);
2354 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name); 2369 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name);
2355 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) / 2370 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) /
2356 (1 << 14), info.receivers[0].expand_rate); 2371 (1 << 14), info.receivers[0].expand_rate);
2357 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) / 2372 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) /
2358 (1 << 14), info.receivers[0].speech_expand_rate); 2373 (1 << 14), info.receivers[0].speech_expand_rate);
2359 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) / 2374 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
2360 (1 << 14), info.receivers[0].secondary_decoded_rate); 2375 (1 << 14), info.receivers[0].secondary_decoded_rate);
2361 // TODO(sriniv): Add testing for more receiver fields. 2376 // TODO(sriniv): Add testing for more receiver fields.
2362 } 2377 }
2363 2378
2364 // Test that we can set the outgoing SSRC properly with multiple streams. 2379 // Test that we can set the outgoing SSRC properly with multiple streams.
2365 // SSRC is set in SetupEngine by calling AddSendStream. 2380 // SSRC is set in SetupEngine by calling AddSendStream.
2366 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { 2381 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) {
2367 EXPECT_TRUE(SetupEngine()); 2382 EXPECT_TRUE(SetupEngineWithSendStream());
2368 int channel_num1 = voe_.GetLastChannel(); 2383 int channel_num1 = voe_.GetLastChannel();
2369 unsigned int send_ssrc; 2384 unsigned int send_ssrc;
2370 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc)); 2385 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc));
2371 EXPECT_EQ(kSsrc1, send_ssrc); 2386 EXPECT_EQ(kSsrc1, send_ssrc);
2372 2387
2373 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2388 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2374 int channel_num2 = voe_.GetLastChannel(); 2389 int channel_num2 = voe_.GetLastChannel();
2375 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num2, send_ssrc)); 2390 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num2, send_ssrc));
2376 EXPECT_EQ(kSsrc1, send_ssrc); 2391 EXPECT_EQ(kSsrc1, send_ssrc);
2377 } 2392 }
(...skipping 14 matching lines...) Expand all
2392 EXPECT_EQ(0, voe_.GetLocalSSRC(send_channel_num, ssrc)); 2407 EXPECT_EQ(0, voe_.GetLocalSSRC(send_channel_num, ssrc));
2393 EXPECT_EQ(1234U, ssrc); 2408 EXPECT_EQ(1234U, ssrc);
2394 ssrc = 0; 2409 ssrc = 0;
2395 EXPECT_EQ(0, voe_.GetLocalSSRC(receive_channel_num, ssrc)); 2410 EXPECT_EQ(0, voe_.GetLocalSSRC(receive_channel_num, ssrc));
2396 EXPECT_EQ(1234U, ssrc); 2411 EXPECT_EQ(1234U, ssrc);
2397 } 2412 }
2398 2413
2399 // Test that we can properly receive packets. 2414 // Test that we can properly receive packets.
2400 TEST_F(WebRtcVoiceEngineTestFake, Recv) { 2415 TEST_F(WebRtcVoiceEngineTestFake, Recv) {
2401 EXPECT_TRUE(SetupEngine()); 2416 EXPECT_TRUE(SetupEngine());
2417 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2402 int channel_num = voe_.GetLastChannel(); 2418 int channel_num = voe_.GetLastChannel();
2403 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2404 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, 2419 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame,
2405 sizeof(kPcmuFrame))); 2420 sizeof(kPcmuFrame)));
2406 } 2421 }
2407 2422
2408 // Test that we can properly receive packets on multiple streams. 2423 // Test that we can properly receive packets on multiple streams.
2409 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { 2424 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) {
2410 EXPECT_TRUE(SetupEngine()); 2425 EXPECT_TRUE(SetupEngineWithSendStream());
2411 send_parameters_.options = options_conference_;
2412 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2426 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2413 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2427 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2414 int channel_num1 = voe_.GetLastChannel(); 2428 int channel_num1 = voe_.GetLastChannel();
2415 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2429 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2416 int channel_num2 = voe_.GetLastChannel(); 2430 int channel_num2 = voe_.GetLastChannel();
2417 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2431 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2418 int channel_num3 = voe_.GetLastChannel(); 2432 int channel_num3 = voe_.GetLastChannel();
2419 // Create packets with the right SSRCs. 2433 // Create packets with the right SSRCs.
2420 char packets[4][sizeof(kPcmuFrame)]; 2434 char packets[4][sizeof(kPcmuFrame)];
2421 for (size_t i = 0; i < ARRAY_SIZE(packets); ++i) { 2435 for (size_t i = 0; i < ARRAY_SIZE(packets); ++i) {
(...skipping 22 matching lines...) Expand all
2444 EXPECT_TRUE(voe_.CheckNoPacket(channel_num2)); 2458 EXPECT_TRUE(voe_.CheckNoPacket(channel_num2));
2445 EXPECT_TRUE(voe_.CheckPacket(channel_num3, packets[3], 2459 EXPECT_TRUE(voe_.CheckPacket(channel_num3, packets[3],
2446 sizeof(packets[3]))); 2460 sizeof(packets[3])));
2447 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2461 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2448 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2462 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2449 EXPECT_TRUE(channel_->RemoveRecvStream(1)); 2463 EXPECT_TRUE(channel_->RemoveRecvStream(1));
2450 } 2464 }
2451 2465
2452 // Test that we properly handle failures to add a stream. 2466 // Test that we properly handle failures to add a stream.
2453 TEST_F(WebRtcVoiceEngineTestFake, AddStreamFail) { 2467 TEST_F(WebRtcVoiceEngineTestFake, AddStreamFail) {
2454 EXPECT_TRUE(SetupEngine()); 2468 EXPECT_TRUE(SetupEngineWithSendStream());
2455 voe_.set_fail_create_channel(true); 2469 voe_.set_fail_create_channel(true);
2456 send_parameters_.options = options_conference_;
2457 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2470 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2458 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2471 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2459
2460 // In 1:1 call, we should not try to create a new channel.
2461 send_parameters_.options.conference_mode.Set(false);
2462 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2463 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2464 } 2472 }
2465 2473
2466 // Test that AddRecvStream doesn't create new channel for 1:1 call. 2474 // Test that AddRecvStream creates new stream.
2467 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream1On1) { 2475 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream) {
2468 EXPECT_TRUE(SetupEngine()); 2476 EXPECT_TRUE(SetupEngineWithRecvStream());
2469 int channel_num = voe_.GetLastChannel(); 2477 int channel_num = voe_.GetLastChannel();
2470 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2478 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2471 EXPECT_EQ(channel_num, voe_.GetLastChannel()); 2479 EXPECT_NE(channel_num, voe_.GetLastChannel());
2472 } 2480 }
2473 2481
2474 // Test that after adding a recv stream, we do not decode more codecs than 2482 // Test that after adding a recv stream, we do not decode more codecs than
2475 // those previously passed into SetRecvCodecs. 2483 // those previously passed into SetRecvCodecs.
2476 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { 2484 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) {
2477 EXPECT_TRUE(SetupEngine()); 2485 EXPECT_TRUE(SetupEngineWithSendStream());
2478 cricket::AudioRecvParameters parameters; 2486 cricket::AudioRecvParameters parameters;
2479 parameters.codecs.push_back(kIsacCodec); 2487 parameters.codecs.push_back(kIsacCodec);
2480 parameters.codecs.push_back(kPcmuCodec); 2488 parameters.codecs.push_back(kPcmuCodec);
2481 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 2489 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2482 EXPECT_TRUE(channel_->AddRecvStream( 2490 EXPECT_TRUE(channel_->AddRecvStream(
2483 cricket::StreamParams::CreateLegacy(kSsrc1))); 2491 cricket::StreamParams::CreateLegacy(kSsrc1)));
2484 int channel_num2 = voe_.GetLastChannel(); 2492 int channel_num2 = voe_.GetLastChannel();
2485 webrtc::CodecInst gcodec; 2493 webrtc::CodecInst gcodec;
2486 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "opus"); 2494 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "opus");
2487 gcodec.plfreq = 48000; 2495 gcodec.plfreq = 48000;
2488 gcodec.channels = 2; 2496 gcodec.channels = 2;
2489 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); 2497 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec));
2490 } 2498 }
2491 2499
2492 // Test that we properly clean up any streams that were added, even if 2500 // Test that we properly clean up any streams that were added, even if
2493 // not explicitly removed. 2501 // not explicitly removed.
2494 TEST_F(WebRtcVoiceEngineTestFake, StreamCleanup) { 2502 TEST_F(WebRtcVoiceEngineTestFake, StreamCleanup) {
2495 EXPECT_TRUE(SetupEngine()); 2503 EXPECT_TRUE(SetupEngineWithSendStream());
2496 send_parameters_.options = options_conference_;
2497 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2504 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2498 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2505 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2499 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2506 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2500 EXPECT_EQ(3, voe_.GetNumChannels()); // default channel + 2 added 2507 EXPECT_EQ(3, voe_.GetNumChannels()); // default channel + 2 added
2501 delete channel_; 2508 delete channel_;
2502 channel_ = NULL; 2509 channel_ = NULL;
2503 EXPECT_EQ(0, voe_.GetNumChannels()); 2510 EXPECT_EQ(0, voe_.GetNumChannels());
2504 } 2511 }
2505 2512
2506 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) { 2513 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) {
2507 EXPECT_TRUE(SetupEngine()); 2514 EXPECT_TRUE(SetupEngineWithSendStream());
2508 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(0))); 2515 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(0)));
2509 } 2516 }
2510 2517
2511 TEST_F(WebRtcVoiceEngineTestFake, TestNoLeakingWhenAddRecvStreamFail) { 2518 TEST_F(WebRtcVoiceEngineTestFake, TestNoLeakingWhenAddRecvStreamFail) {
2512 EXPECT_TRUE(SetupEngine()); 2519 EXPECT_TRUE(SetupEngine());
2513 // Stream 1 reuses default channel.
2514 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2520 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2515 // Manually delete default channel to simulate a failure. 2521 // Manually delete channel to simulate a failure.
2516 int default_channel = voe_.GetLastChannel(); 2522 int channel = voe_.GetLastChannel();
2517 EXPECT_EQ(0, voe_.DeleteChannel(default_channel)); 2523 EXPECT_EQ(0, voe_.DeleteChannel(channel));
2518 // Add recv stream 2 should fail because default channel is gone. 2524 // Add recv stream 2 should work.
2519 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2525 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2520 int new_channel = voe_.GetLastChannel(); 2526 int new_channel = voe_.GetLastChannel();
2521 EXPECT_NE(default_channel, new_channel); 2527 EXPECT_NE(channel, new_channel);
2522 // The last created channel should have already been deleted. 2528 // The last created channel is deleted too.
2523 EXPECT_EQ(-1, voe_.DeleteChannel(new_channel)); 2529 EXPECT_EQ(0, voe_.DeleteChannel(new_channel));
2524 } 2530 }
2525 2531
2526 // Test the InsertDtmf on default send stream as caller. 2532 // Test the InsertDtmf on default send stream as caller.
2527 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCaller) { 2533 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCaller) {
2528 TestInsertDtmf(0, true); 2534 TestInsertDtmf(0, true);
2529 } 2535 }
2530 2536
2531 // Test the InsertDtmf on default send stream as callee 2537 // Test the InsertDtmf on default send stream as callee
2532 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { 2538 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) {
2533 TestInsertDtmf(0, false); 2539 TestInsertDtmf(0, false);
2534 } 2540 }
2535 2541
2536 // Test the InsertDtmf on specified send stream as caller. 2542 // Test the InsertDtmf on specified send stream as caller.
2537 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { 2543 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) {
2538 TestInsertDtmf(kSsrc1, true); 2544 TestInsertDtmf(kSsrc1, true);
2539 } 2545 }
2540 2546
2541 // Test the InsertDtmf on specified send stream as callee. 2547 // Test the InsertDtmf on specified send stream as callee.
2542 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { 2548 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) {
2543 TestInsertDtmf(kSsrc1, false); 2549 TestInsertDtmf(kSsrc1, false);
2544 } 2550 }
2545 2551
2546 TEST_F(WebRtcVoiceEngineTestFake, MediaEngineCallbackOnError) { 2552 TEST_F(WebRtcVoiceEngineTestFake, MediaEngineCallbackOnError) {
2547 rtc::scoped_ptr<ChannelErrorListener> listener; 2553 rtc::scoped_ptr<ChannelErrorListener> listener;
2548 cricket::WebRtcVoiceMediaChannel* media_channel; 2554 cricket::WebRtcVoiceMediaChannel* media_channel;
2549 unsigned int ssrc = 0; 2555 unsigned int ssrc = 0;
2550 2556
2551 EXPECT_TRUE(SetupEngine()); 2557 EXPECT_TRUE(SetupEngineWithSendStream());
2552 send_parameters_.options = options_conference_;
2553 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2558 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2554 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2559 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2555 2560
2556 media_channel = static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 2561 media_channel = static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
2557 listener.reset(new ChannelErrorListener(channel_)); 2562 listener.reset(new ChannelErrorListener(channel_));
2558 2563
2559 // Test on WebRtc VoE channel. 2564 // Test on WebRtc VoE channel.
2560 voe_.TriggerCallbackOnError(media_channel->voe_channel(), 2565 voe_.TriggerCallbackOnError(media_channel->voe_channel(),
2561 VE_SATURATION_WARNING); 2566 VE_SATURATION_WARNING);
2562 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_SATURATION, 2567 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_SATURATION,
(...skipping 19 matching lines...) Expand all
2582 EXPECT_EQ(ssrc, listener->ssrc()); 2587 EXPECT_EQ(ssrc, listener->ssrc());
2583 2588
2584 // Testing a non-existing channel. 2589 // Testing a non-existing channel.
2585 listener->Reset(); 2590 listener->Reset();
2586 voe_.TriggerCallbackOnError(voe_.GetLastChannel() + 2, 2591 voe_.TriggerCallbackOnError(voe_.GetLastChannel() + 2,
2587 VE_SATURATION_WARNING); 2592 VE_SATURATION_WARNING);
2588 EXPECT_EQ(0, listener->error()); 2593 EXPECT_EQ(0, listener->error());
2589 } 2594 }
2590 2595
2591 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) { 2596 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) {
2592 EXPECT_TRUE(SetupEngine()); 2597 EXPECT_TRUE(SetupEngineWithSendStream());
2593 send_parameters_.options = options_conference_;
2594 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2598 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2595 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2599 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2596 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2600 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2597 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2601 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2598 EXPECT_TRUE(channel_->SetPlayout(true)); 2602 EXPECT_TRUE(channel_->SetPlayout(true));
2599 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1); 2603 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1);
2600 EXPECT_TRUE(channel_->SetPlayout(false)); 2604 EXPECT_TRUE(channel_->SetPlayout(false));
2601 EXPECT_FALSE(channel_->SetPlayout(true)); 2605 EXPECT_FALSE(channel_->SetPlayout(true));
2602 } 2606 }
2603 2607
2604 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { 2608 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) {
2605 EXPECT_TRUE(SetupEngine()); 2609 EXPECT_TRUE(SetupEngineWithSendStream());
2606 2610
2607 bool ec_enabled; 2611 bool ec_enabled;
2608 webrtc::EcModes ec_mode; 2612 webrtc::EcModes ec_mode;
2609 bool ec_metrics_enabled; 2613 bool ec_metrics_enabled;
2610 webrtc::AecmModes aecm_mode; 2614 webrtc::AecmModes aecm_mode;
2611 bool cng_enabled; 2615 bool cng_enabled;
2612 bool agc_enabled; 2616 bool agc_enabled;
2613 webrtc::AgcModes agc_mode; 2617 webrtc::AgcModes agc_mode;
2614 webrtc::AgcConfig agc_config; 2618 webrtc::AgcConfig agc_config;
2615 bool ns_enabled; 2619 bool ns_enabled;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 ASSERT_TRUE(engine_.SetOptions(options)); 2749 ASSERT_TRUE(engine_.SetOptions(options));
2746 voe_.GetNsStatus(ns_enabled, ns_mode); 2750 voe_.GetNsStatus(ns_enabled, ns_mode);
2747 highpass_filter_enabled = voe_.IsHighPassFilterEnabled(); 2751 highpass_filter_enabled = voe_.IsHighPassFilterEnabled();
2748 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled(); 2752 stereo_swapping_enabled = voe_.IsStereoChannelSwappingEnabled();
2749 voe_.GetTypingDetectionStatus(typing_detection_enabled); 2753 voe_.GetTypingDetectionStatus(typing_detection_enabled);
2750 EXPECT_FALSE(ns_enabled); 2754 EXPECT_FALSE(ns_enabled);
2751 EXPECT_FALSE(highpass_filter_enabled); 2755 EXPECT_FALSE(highpass_filter_enabled);
2752 EXPECT_FALSE(typing_detection_enabled); 2756 EXPECT_FALSE(typing_detection_enabled);
2753 EXPECT_TRUE(stereo_swapping_enabled); 2757 EXPECT_TRUE(stereo_swapping_enabled);
2754 2758
2755 // Turn on "conference mode" to ensure it has no impact. 2759 // Set options again to ensure it has no impact.
2756 options.conference_mode.Set(true);
2757 ASSERT_TRUE(engine_.SetOptions(options)); 2760 ASSERT_TRUE(engine_.SetOptions(options));
2758 voe_.GetEcStatus(ec_enabled, ec_mode); 2761 voe_.GetEcStatus(ec_enabled, ec_mode);
2759 voe_.GetNsStatus(ns_enabled, ns_mode); 2762 voe_.GetNsStatus(ns_enabled, ns_mode);
2760 EXPECT_TRUE(ec_enabled); 2763 EXPECT_TRUE(ec_enabled);
2761 EXPECT_EQ(webrtc::kEcConference, ec_mode); 2764 EXPECT_EQ(webrtc::kEcConference, ec_mode);
2762 EXPECT_FALSE(ns_enabled); 2765 EXPECT_FALSE(ns_enabled);
2763 EXPECT_EQ(webrtc::kNsHighSuppression, ns_mode); 2766 EXPECT_EQ(webrtc::kNsHighSuppression, ns_mode);
2764 } 2767 }
2765 2768
2766 TEST_F(WebRtcVoiceEngineTestFake, DefaultOptions) { 2769 TEST_F(WebRtcVoiceEngineTestFake, DefaultOptions) {
2767 EXPECT_TRUE(SetupEngine()); 2770 EXPECT_TRUE(SetupEngineWithSendStream());
2768 2771
2769 bool ec_enabled; 2772 bool ec_enabled;
2770 webrtc::EcModes ec_mode; 2773 webrtc::EcModes ec_mode;
2771 bool ec_metrics_enabled; 2774 bool ec_metrics_enabled;
2772 bool agc_enabled; 2775 bool agc_enabled;
2773 webrtc::AgcModes agc_mode; 2776 webrtc::AgcModes agc_mode;
2774 bool ns_enabled; 2777 bool ns_enabled;
2775 webrtc::NsModes ns_mode; 2778 webrtc::NsModes ns_mode;
2776 bool highpass_filter_enabled; 2779 bool highpass_filter_enabled;
2777 bool stereo_swapping_enabled; 2780 bool stereo_swapping_enabled;
(...skipping 24 matching lines...) Expand all
2802 2805
2803 webrtc::AgcConfig config = {0}; 2806 webrtc::AgcConfig config = {0};
2804 EXPECT_EQ(0, voe_.GetAgcConfig(config)); 2807 EXPECT_EQ(0, voe_.GetAgcConfig(config));
2805 EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv); 2808 EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv);
2806 EXPECT_EQ(set_config.digitalCompressionGaindB, 2809 EXPECT_EQ(set_config.digitalCompressionGaindB,
2807 config.digitalCompressionGaindB); 2810 config.digitalCompressionGaindB);
2808 EXPECT_EQ(set_config.limiterEnable, config.limiterEnable); 2811 EXPECT_EQ(set_config.limiterEnable, config.limiterEnable);
2809 } 2812 }
2810 2813
2811 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) { 2814 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
2812 EXPECT_TRUE(SetupEngine()); 2815 EXPECT_TRUE(SetupEngineWithSendStream());
2813 rtc::scoped_ptr<cricket::WebRtcVoiceMediaChannel> channel1( 2816 rtc::scoped_ptr<cricket::WebRtcVoiceMediaChannel> channel1(
2814 static_cast<cricket::WebRtcVoiceMediaChannel*>( 2817 static_cast<cricket::WebRtcVoiceMediaChannel*>(
2815 engine_.CreateChannel(&call_, cricket::AudioOptions()))); 2818 engine_.CreateChannel(&call_, cricket::AudioOptions())));
2816 rtc::scoped_ptr<cricket::WebRtcVoiceMediaChannel> channel2( 2819 rtc::scoped_ptr<cricket::WebRtcVoiceMediaChannel> channel2(
2817 static_cast<cricket::WebRtcVoiceMediaChannel*>( 2820 static_cast<cricket::WebRtcVoiceMediaChannel*>(
2818 engine_.CreateChannel(&call_, cricket::AudioOptions()))); 2821 engine_.CreateChannel(&call_, cricket::AudioOptions())));
2819 2822
2820 // Have to add a stream to make SetSend work. 2823 // Have to add a stream to make SetSend work.
2821 cricket::StreamParams stream1; 2824 cricket::StreamParams stream1;
2822 stream1.ssrcs.push_back(1); 2825 stream1.ssrcs.push_back(1);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
2915 voe_.GetEcStatus(ec_enabled, ec_mode); 2918 voe_.GetEcStatus(ec_enabled, ec_mode);
2916 voe_.GetAgcStatus(agc_enabled, agc_mode); 2919 voe_.GetAgcStatus(agc_enabled, agc_mode);
2917 voe_.GetNsStatus(ns_enabled, ns_mode); 2920 voe_.GetNsStatus(ns_enabled, ns_mode);
2918 EXPECT_TRUE(ec_enabled); 2921 EXPECT_TRUE(ec_enabled);
2919 EXPECT_FALSE(agc_enabled); 2922 EXPECT_FALSE(agc_enabled);
2920 EXPECT_FALSE(ns_enabled); 2923 EXPECT_FALSE(ns_enabled);
2921 } 2924 }
2922 2925
2923 // This test verifies DSCP settings are properly applied on voice media channel. 2926 // This test verifies DSCP settings are properly applied on voice media channel.
2924 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) { 2927 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) {
2925 EXPECT_TRUE(SetupEngine()); 2928 EXPECT_TRUE(SetupEngineWithSendStream());
2926 rtc::scoped_ptr<cricket::VoiceMediaChannel> channel( 2929 rtc::scoped_ptr<cricket::VoiceMediaChannel> channel(
2927 engine_.CreateChannel(&call_, cricket::AudioOptions())); 2930 engine_.CreateChannel(&call_, cricket::AudioOptions()));
2928 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface( 2931 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface(
2929 new cricket::FakeNetworkInterface); 2932 new cricket::FakeNetworkInterface);
2930 channel->SetInterface(network_interface.get()); 2933 channel->SetInterface(network_interface.get());
2931 cricket::AudioSendParameters parameters = send_parameters_; 2934 cricket::AudioSendParameters parameters = send_parameters_;
2932 parameters.options.dscp.Set(true); 2935 parameters.options.dscp.Set(true);
2933 EXPECT_TRUE(channel->SetSendParameters(parameters)); 2936 EXPECT_TRUE(channel->SetSendParameters(parameters));
2934 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp()); 2937 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp());
2935 // Verify previous value is not modified if dscp option is not set. 2938 // Verify previous value is not modified if dscp option is not set.
2936 EXPECT_TRUE(channel->SetSendParameters(send_parameters_)); 2939 EXPECT_TRUE(channel->SetSendParameters(send_parameters_));
2937 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp()); 2940 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp());
2938 parameters.options.dscp.Set(false); 2941 parameters.options.dscp.Set(false);
2939 EXPECT_TRUE(channel->SetSendParameters(parameters)); 2942 EXPECT_TRUE(channel->SetSendParameters(parameters));
2940 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp()); 2943 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp());
2941 } 2944 }
2942 2945
2943 // Test that GetReceiveChannelNum returns the default channel for the first 2946 // Test that GetReceiveChannelNum returns the default channel for the first
2944 // recv stream in 1-1 calls. 2947 // recv stream in 1-1 calls.
2945 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelNumIn1To1Calls) { 2948 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelNum) {
2946 EXPECT_TRUE(SetupEngine()); 2949 EXPECT_TRUE(SetupEngine());
2947 cricket::WebRtcVoiceMediaChannel* media_channel = 2950 cricket::WebRtcVoiceMediaChannel* media_channel =
2948 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 2951 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
2949 // Test that GetChannelNum returns the default channel if the SSRC is unknown. 2952 EXPECT_EQ(-1, media_channel->GetReceiveChannelNum(0));
2950 EXPECT_EQ(media_channel->voe_channel(), 2953 EXPECT_TRUE(channel_->AddRecvStream(
2951 media_channel->GetReceiveChannelNum(0)); 2954 cricket::StreamParams::CreateLegacy(kSsrc1)));
2952 cricket::StreamParams stream; 2955 int channel_id = voe_.GetLastChannel();
2953 stream.ssrcs.push_back(kSsrc2); 2956 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelNum(kSsrc1));
2954 EXPECT_TRUE(channel_->AddRecvStream(stream)); 2957 EXPECT_EQ(-1, media_channel->GetReceiveChannelNum(kSsrc2));
2955 EXPECT_EQ(media_channel->voe_channel(), 2958 EXPECT_TRUE(channel_->AddRecvStream(
2956 media_channel->GetReceiveChannelNum(kSsrc2)); 2959 cricket::StreamParams::CreateLegacy(kSsrc2)));
2957 } 2960 int channel_id2 = voe_.GetLastChannel();
2958 2961 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelNum(kSsrc2));
2959 // Test that GetReceiveChannelNum doesn't return the default channel for the
2960 // first recv stream in conference calls.
2961 TEST_F(WebRtcVoiceEngineTestFake, TestGetChannelNumInConferenceCalls) {
2962 EXPECT_TRUE(SetupEngine());
2963 send_parameters_.options = options_conference_;
2964 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
2965 cricket::StreamParams stream;
2966 stream.ssrcs.push_back(kSsrc2);
2967 EXPECT_TRUE(channel_->AddRecvStream(stream));
2968 cricket::WebRtcVoiceMediaChannel* media_channel =
2969 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
2970 EXPECT_LT(media_channel->voe_channel(),
2971 media_channel->GetReceiveChannelNum(kSsrc2));
2972 } 2962 }
2973 2963
2974 TEST_F(WebRtcVoiceEngineTestFake, SetOutputScaling) { 2964 TEST_F(WebRtcVoiceEngineTestFake, SetOutputScaling) {
2975 EXPECT_TRUE(SetupEngine()); 2965 EXPECT_TRUE(SetupEngineWithRecvStream());
2976 float scale, left, right; 2966 float scale, left, right;
2977 EXPECT_TRUE(channel_->SetOutputScaling(0, 1, 2)); 2967 EXPECT_TRUE(channel_->SetOutputScaling(0, 1, 2));
2978 int channel_id = voe_.GetLastChannel(); 2968 int channel_id = voe_.GetLastChannel();
2979 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); 2969 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale));
2980 EXPECT_EQ(0, voe_.GetOutputVolumePan(channel_id, left, right)); 2970 EXPECT_EQ(0, voe_.GetOutputVolumePan(channel_id, left, right));
2981 EXPECT_DOUBLE_EQ(1, left * scale); 2971 EXPECT_DOUBLE_EQ(1, left * scale);
2982 EXPECT_DOUBLE_EQ(2, right * scale); 2972 EXPECT_DOUBLE_EQ(2, right * scale);
2983 2973
2984 EXPECT_FALSE(channel_->SetOutputScaling(kSsrc2, 1, 2)); 2974 EXPECT_FALSE(channel_->SetOutputScaling(kSsrc2, 1, 2));
2985 cricket::StreamParams stream; 2975 cricket::StreamParams stream;
2986 stream.ssrcs.push_back(kSsrc2); 2976 stream.ssrcs.push_back(kSsrc2);
2987 EXPECT_TRUE(channel_->AddRecvStream(stream)); 2977 EXPECT_TRUE(channel_->AddRecvStream(stream));
2988 2978
2989 EXPECT_TRUE(channel_->SetOutputScaling(kSsrc2, 2, 1)); 2979 EXPECT_TRUE(channel_->SetOutputScaling(kSsrc2, 2, 1));
2990 channel_id = voe_.GetLastChannel(); 2980 channel_id = voe_.GetLastChannel();
2991 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); 2981 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale));
2992 EXPECT_EQ(0, voe_.GetOutputVolumePan(channel_id, left, right)); 2982 EXPECT_EQ(0, voe_.GetOutputVolumePan(channel_id, left, right));
2993 EXPECT_DOUBLE_EQ(2, left * scale); 2983 EXPECT_DOUBLE_EQ(2, left * scale);
2994 EXPECT_DOUBLE_EQ(1, right * scale); 2984 EXPECT_DOUBLE_EQ(1, right * scale);
2995 } 2985 }
2996 2986
2997 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { 2987 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
2998 const uint32 kAudioSsrc = 123; 2988 const uint32 kAudioSsrc = 123;
2999 const std::string kSyncLabel = "AvSyncLabel"; 2989 const std::string kSyncLabel = "AvSyncLabel";
3000 2990
3001 EXPECT_TRUE(SetupEngine()); 2991 EXPECT_TRUE(SetupEngineWithSendStream());
3002 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); 2992 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
3003 sp.sync_label = kSyncLabel; 2993 sp.sync_label = kSyncLabel;
3004 // Creating two channels to make sure that sync label is set properly for both 2994 // Creating two channels to make sure that sync label is set properly for both
3005 // the default voice channel and following ones. 2995 // the default voice channel and following ones.
3006 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2996 EXPECT_TRUE(channel_->AddRecvStream(sp));
3007 sp.ssrcs[0] += 1; 2997 sp.ssrcs[0] += 1;
3008 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2998 EXPECT_TRUE(channel_->AddRecvStream(sp));
3009 2999
3010 ASSERT_EQ(2, call_.GetAudioReceiveStreams().size()); 3000 ASSERT_EQ(2, call_.GetAudioReceiveStreams().size());
3011 EXPECT_EQ(kSyncLabel, 3001 EXPECT_EQ(kSyncLabel,
3012 call_.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group) 3002 call_.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group)
3013 << "SyncGroup should be set based on sync_label"; 3003 << "SyncGroup should be set based on sync_label";
3014 EXPECT_EQ(kSyncLabel, 3004 EXPECT_EQ(kSyncLabel,
3015 call_.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group) 3005 call_.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group)
3016 << "SyncGroup should be set based on sync_label"; 3006 << "SyncGroup should be set based on sync_label";
3017 } 3007 }
3018 3008
3019 TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) { 3009 TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) {
3020 // Test that changing the combined_audio_video_bwe option results in the 3010 // Test that changing the combined_audio_video_bwe option results in the
3021 // expected state changes on an associated Call. 3011 // expected state changes on an associated Call.
3022 std::vector<uint32> ssrcs; 3012 std::vector<uint32> ssrcs;
3023 ssrcs.push_back(223); 3013 ssrcs.push_back(223);
3024 ssrcs.push_back(224); 3014 ssrcs.push_back(224);
3025 3015
3026 EXPECT_TRUE(SetupEngine()); 3016 EXPECT_TRUE(SetupEngineWithSendStream());
3027 cricket::WebRtcVoiceMediaChannel* media_channel = 3017 cricket::WebRtcVoiceMediaChannel* media_channel =
3028 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3018 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3029 for (uint32 ssrc : ssrcs) { 3019 for (uint32 ssrc : ssrcs) {
3030 EXPECT_TRUE(media_channel->AddRecvStream( 3020 EXPECT_TRUE(media_channel->AddRecvStream(
3031 cricket::StreamParams::CreateLegacy(ssrc))); 3021 cricket::StreamParams::CreateLegacy(ssrc)));
3032 } 3022 }
3033 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); 3023 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size());
3034 3024
3035 // Combined BWE should be disabled. 3025 // Combined BWE should be disabled.
3036 for (uint32 ssrc : ssrcs) { 3026 for (uint32 ssrc : ssrcs) {
(...skipping 19 matching lines...) Expand all
3056 EXPECT_NE(nullptr, s); 3046 EXPECT_NE(nullptr, s);
3057 EXPECT_EQ(false, s->GetConfig().combined_audio_video_bwe); 3047 EXPECT_EQ(false, s->GetConfig().combined_audio_video_bwe);
3058 } 3048 }
3059 3049
3060 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); 3050 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size());
3061 } 3051 }
3062 3052
3063 TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) { 3053 TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) {
3064 // Test that adding receive streams after enabling combined bandwidth 3054 // Test that adding receive streams after enabling combined bandwidth
3065 // estimation will correctly configure each channel. 3055 // estimation will correctly configure each channel.
3066 EXPECT_TRUE(SetupEngine()); 3056 EXPECT_TRUE(SetupEngineWithSendStream());
3067 cricket::WebRtcVoiceMediaChannel* media_channel = 3057 cricket::WebRtcVoiceMediaChannel* media_channel =
3068 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3058 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3069 send_parameters_.options.combined_audio_video_bwe.Set(true); 3059 send_parameters_.options.combined_audio_video_bwe.Set(true);
3070 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); 3060 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_));
3071 3061
3072 static const uint32 kSsrcs[] = {1, 2, 3, 4}; 3062 static const uint32 kSsrcs[] = {1, 2, 3, 4};
3073 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) { 3063 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) {
3074 EXPECT_TRUE(media_channel->AddRecvStream( 3064 EXPECT_TRUE(media_channel->AddRecvStream(
3075 cricket::StreamParams::CreateLegacy(kSsrcs[i]))); 3065 cricket::StreamParams::CreateLegacy(kSsrcs[i])));
3076 EXPECT_NE(nullptr, call_.GetAudioReceiveStream(kSsrcs[i])); 3066 EXPECT_NE(nullptr, call_.GetAudioReceiveStream(kSsrcs[i]));
3077 } 3067 }
3078 EXPECT_EQ(ARRAY_SIZE(kSsrcs), call_.GetAudioReceiveStreams().size()); 3068 EXPECT_EQ(ARRAY_SIZE(kSsrcs), call_.GetAudioReceiveStreams().size());
3079 } 3069 }
3080 3070
3081 TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { 3071 TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) {
3082 // Test that setting the header extensions results in the expected state 3072 // Test that setting the header extensions results in the expected state
3083 // changes on an associated Call. 3073 // changes on an associated Call.
3084 std::vector<uint32> ssrcs; 3074 std::vector<uint32> ssrcs;
3085 ssrcs.push_back(223); 3075 ssrcs.push_back(223);
3086 ssrcs.push_back(224); 3076 ssrcs.push_back(224);
3087 3077
3088 EXPECT_TRUE(SetupEngine()); 3078 EXPECT_TRUE(SetupEngineWithSendStream());
3089 cricket::WebRtcVoiceMediaChannel* media_channel = 3079 cricket::WebRtcVoiceMediaChannel* media_channel =
3090 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3080 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3091 send_parameters_.options.combined_audio_video_bwe.Set(true); 3081 send_parameters_.options.combined_audio_video_bwe.Set(true);
3092 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); 3082 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_));
3093 for (uint32 ssrc : ssrcs) { 3083 for (uint32 ssrc : ssrcs) {
3094 EXPECT_TRUE(media_channel->AddRecvStream( 3084 EXPECT_TRUE(media_channel->AddRecvStream(
3095 cricket::StreamParams::CreateLegacy(ssrc))); 3085 cricket::StreamParams::CreateLegacy(ssrc)));
3096 } 3086 }
3097 3087
3098 // Combined BWE should be set up, but with no configured extensions. 3088 // Combined BWE should be set up, but with no configured extensions.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3137 const uint32 kAudioSsrc = 1; 3127 const uint32 kAudioSsrc = 1;
3138 rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3128 rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame));
3139 static const unsigned char kRtcp[] = { 3129 static const unsigned char kRtcp[] = {
3140 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 3130 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
3141 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 3131 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
3142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 3133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
3144 }; 3134 };
3145 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp)); 3135 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp));
3146 3136
3147 EXPECT_TRUE(SetupEngine()); 3137 EXPECT_TRUE(SetupEngineWithSendStream());
3148 cricket::WebRtcVoiceMediaChannel* media_channel = 3138 cricket::WebRtcVoiceMediaChannel* media_channel =
3149 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3139 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3150 send_parameters_.options.combined_audio_video_bwe.Set(true); 3140 send_parameters_.options.combined_audio_video_bwe.Set(true);
3151 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 3141 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
3152 EXPECT_TRUE(media_channel->AddRecvStream( 3142 EXPECT_TRUE(media_channel->AddRecvStream(
3153 cricket::StreamParams::CreateLegacy(kAudioSsrc))); 3143 cricket::StreamParams::CreateLegacy(kAudioSsrc)));
3154 3144
3155 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); 3145 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size());
3156 const cricket::FakeAudioReceiveStream* s = 3146 const cricket::FakeAudioReceiveStream* s =
3157 call_.GetAudioReceiveStream(kAudioSsrc); 3147 call_.GetAudioReceiveStream(kAudioSsrc);
3158 EXPECT_EQ(0, s->received_packets()); 3148 EXPECT_EQ(0, s->received_packets());
3159 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); 3149 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
3160 EXPECT_EQ(1, s->received_packets()); 3150 EXPECT_EQ(1, s->received_packets());
3161 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); 3151 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
3162 EXPECT_EQ(2, s->received_packets()); 3152 EXPECT_EQ(2, s->received_packets());
3163 } 3153 }
3164 3154
3165 // Associate channel should not set on 1:1 call, since the receive channel also 3155 // All receive channels should be associated with the default send channel,
3166 // sends RTCP SR. 3156 // since they do not send RTCP SR.
3167 TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelUnset1On1) {
3168 EXPECT_TRUE(SetupEngine());
3169 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3170 int recv_ch = voe_.GetLastChannel();
3171 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
3172 }
3173
3174 // This test is an extension of AssociateChannelUnset1On1. We create two receive
3175 // channels. The second should be associated with the default channel, since it
3176 // does not send RTCP SR.
3177 TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnSecondRecvChannel) {
3178 EXPECT_TRUE(SetupEngine());
3179 cricket::WebRtcVoiceMediaChannel* media_channel =
3180 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3181 int default_channel = media_channel->voe_channel();
3182 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3183 int recv_ch_1 = voe_.GetLastChannel();
3184 EXPECT_EQ(recv_ch_1, default_channel);
3185 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
3186 int recv_ch_2 = voe_.GetLastChannel();
3187 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
3188 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
3189 // Add send stream, the association remains.
3190 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(3)));
3191 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
3192 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
3193 }
3194
3195 // In conference mode, all receive channels should be associated with the
3196 // default channel, since they do not send RTCP SR.
3197 TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) { 3157 TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) {
3198 EXPECT_TRUE(SetupEngine()); 3158 EXPECT_TRUE(SetupEngineWithSendStream());
3199 send_parameters_.options = options_conference_;
3200 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 3159 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
3201 cricket::WebRtcVoiceMediaChannel* media_channel = 3160 cricket::WebRtcVoiceMediaChannel* media_channel =
3202 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3161 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3203 int default_channel = media_channel->voe_channel(); 3162 int default_channel = media_channel->voe_channel();
3204 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 3163 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3205 int recv_ch = voe_.GetLastChannel(); 3164 int recv_ch = voe_.GetLastChannel();
3206 EXPECT_NE(recv_ch, default_channel); 3165 EXPECT_NE(recv_ch, default_channel);
3207 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel); 3166 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
3208 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); 3167 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
3209 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel); 3168 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
3169 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
3170 recv_ch = voe_.GetLastChannel();
3171 EXPECT_NE(recv_ch, default_channel);
3172 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
3210 } 3173 }
3211 3174
3212 TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) { 3175 TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) {
3213 EXPECT_TRUE(SetupEngine()); 3176 EXPECT_TRUE(SetupEngineWithSendStream());
3214 send_parameters_.options = options_conference_;
3215 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 3177 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
3216 3178
3217 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 3179 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3218 int recv_ch = voe_.GetLastChannel(); 3180 int recv_ch = voe_.GetLastChannel();
3219 3181
3220 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); 3182 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
3221 int send_ch = voe_.GetLastChannel(); 3183 int send_ch = voe_.GetLastChannel();
3222 3184
3223 // Manually associate |recv_ch| to |send_ch|. This test is to verify a 3185 // Manually associate |recv_ch| to |send_ch|. This test is to verify a
3224 // deleting logic, i.e., deleting |send_ch| will reset the associate send 3186 // deleting logic, i.e., deleting |send_ch| will reset the associate send
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3357 break; 3319 break;
3358 channels[num_channels++] = channel; 3320 channels[num_channels++] = channel;
3359 } 3321 }
3360 3322
3361 int expected = ARRAY_SIZE(channels); 3323 int expected = ARRAY_SIZE(channels);
3362 EXPECT_EQ(expected, num_channels); 3324 EXPECT_EQ(expected, num_channels);
3363 3325
3364 while (num_channels > 0) { 3326 while (num_channels > 0) {
3365 delete channels[--num_channels]; 3327 delete channels[--num_channels];
3366 } 3328 }
3367
3368 engine.Terminate(); 3329 engine.Terminate();
3369 } 3330 }
3370 3331
3371 // Test that we set our preferred codecs properly. 3332 // Test that we set our preferred codecs properly.
3372 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) { 3333 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) {
3373 cricket::WebRtcVoiceEngine engine; 3334 cricket::WebRtcVoiceEngine engine;
3374 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); 3335 EXPECT_TRUE(engine.Init(rtc::Thread::Current()));
3375 rtc::scoped_ptr<webrtc::Call> call( 3336 rtc::scoped_ptr<webrtc::Call> call(
3376 webrtc::Call::Create(webrtc::Call::Config())); 3337 webrtc::Call::Create(webrtc::Call::Config()));
3377 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), 3338 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(),
3378 call.get()); 3339 call.get());
3379 cricket::AudioRecvParameters parameters; 3340 cricket::AudioRecvParameters parameters;
3380 parameters.codecs = engine.codecs(); 3341 parameters.codecs = engine.codecs();
3381 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3342 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3382 } 3343 }
OLDNEW
« talk/media/webrtc/webrtcvoiceengine.cc ('K') | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698