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

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

Issue 1327933002: Full impl of NnChannel::SetSendParameters and NnChannel::SetRecvParameters (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 3 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 EXPECT_TRUE(channel_ != nullptr); 170 EXPECT_TRUE(channel_ != nullptr);
171 if (caller) { 171 if (caller) {
172 // if this is a caller, local description will be applied and add the 172 // if this is a caller, local description will be applied and add the
173 // send stream. 173 // send stream.
174 EXPECT_TRUE(channel_->AddSendStream( 174 EXPECT_TRUE(channel_->AddSendStream(
175 cricket::StreamParams::CreateLegacy(kSsrc1))); 175 cricket::StreamParams::CreateLegacy(kSsrc1)));
176 } 176 }
177 int channel_id = voe_.GetLastChannel(); 177 int channel_id = voe_.GetLastChannel();
178 178
179 // Test we can only InsertDtmf when the other side supports telephone-event. 179 // Test we can only InsertDtmf when the other side supports telephone-event.
180 std::vector<cricket::AudioCodec> codecs; 180 cricket::AudioSendParameters parameters;
181 codecs.push_back(kPcmuCodec); 181 parameters.codecs.push_back(kPcmuCodec);
182 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 182 EXPECT_TRUE(channel_->SetSendParameters(parameters));
183 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 183 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
184 EXPECT_FALSE(channel_->CanInsertDtmf()); 184 EXPECT_FALSE(channel_->CanInsertDtmf());
185 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111, cricket::DF_SEND)); 185 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111, cricket::DF_SEND));
186 codecs.push_back(kTelephoneEventCodec); 186 parameters.codecs.push_back(kTelephoneEventCodec);
187 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 187 EXPECT_TRUE(channel_->SetSendParameters(parameters));
188 EXPECT_TRUE(channel_->CanInsertDtmf()); 188 EXPECT_TRUE(channel_->CanInsertDtmf());
189 189
190 if (!caller) { 190 if (!caller) {
191 // There's no active send channel yet. 191 // There's no active send channel yet.
192 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123, cricket::DF_SEND)); 192 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123, cricket::DF_SEND));
193 EXPECT_TRUE(channel_->AddSendStream( 193 EXPECT_TRUE(channel_->AddSendStream(
194 cricket::StreamParams::CreateLegacy(kSsrc1))); 194 cricket::StreamParams::CreateLegacy(kSsrc1)));
195 } 195 }
196 196
197 // Check we fail if the ssrc is invalid. 197 // Check we fail if the ssrc is invalid.
(...skipping 21 matching lines...) Expand all
219 // Test that send bandwidth is set correctly. 219 // Test that send bandwidth is set correctly.
220 // |codec| is the codec under test. 220 // |codec| is the codec under test.
221 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). 221 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth().
222 // |expected_result| is the expected result from SetMaxSendBandwidth(). 222 // |expected_result| is the expected result from SetMaxSendBandwidth().
223 // |expected_bitrate| is the expected audio bitrate afterward. 223 // |expected_bitrate| is the expected audio bitrate afterward.
224 void TestSendBandwidth(const cricket::AudioCodec& codec, 224 void TestSendBandwidth(const cricket::AudioCodec& codec,
225 int max_bitrate, 225 int max_bitrate,
226 bool expected_result, 226 bool expected_result,
227 int expected_bitrate) { 227 int expected_bitrate) {
228 int channel_num = voe_.GetLastChannel(); 228 int channel_num = voe_.GetLastChannel();
229 std::vector<cricket::AudioCodec> codecs; 229 cricket::AudioSendParameters parameters;
230 230 parameters.codecs.push_back(codec);
231 codecs.push_back(codec); 231 parameters.max_bandwidth_bps = max_bitrate;
232 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 232 EXPECT_EQ(expected_result, channel_->SetSendParameters(parameters));
233
234 bool result = channel_->SetMaxSendBandwidth(max_bitrate);
235 EXPECT_EQ(expected_result, result);
236 233
237 webrtc::CodecInst temp_codec; 234 webrtc::CodecInst temp_codec;
238 EXPECT_FALSE(voe_.GetSendCodec(channel_num, temp_codec)); 235 EXPECT_FALSE(voe_.GetSendCodec(channel_num, temp_codec));
239
240 EXPECT_EQ(expected_bitrate, temp_codec.rate); 236 EXPECT_EQ(expected_bitrate, temp_codec.rate);
241 } 237 }
242 238
243 void TestSetSendRtpHeaderExtensions(const std::string& ext) { 239 void TestSetSendRtpHeaderExtensions(const std::string& ext) {
244 EXPECT_TRUE(SetupEngineWithoutStream()); 240 EXPECT_TRUE(SetupEngineWithoutStream());
245 int channel_num = voe_.GetLastChannel(); 241 int channel_num = voe_.GetLastChannel();
246 242
247 // Ensure extensions are off by default. 243 // Ensure extensions are off by default.
248 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 244 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
249 245
250 std::vector<cricket::RtpHeaderExtension> extensions; 246 cricket::AudioSendParameters parameters;
251 // Ensure unknown extensions won't cause an error. 247 // Ensure unknown extensions won't cause an error.
252 extensions.push_back(cricket::RtpHeaderExtension( 248 parameters.extensions.push_back(cricket::RtpHeaderExtension(
253 "urn:ietf:params:unknownextention", 1)); 249 "urn:ietf:params:unknownextention", 1));
254 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 250 EXPECT_TRUE(channel_->SetSendParameters(parameters));
255 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 251 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
256 252
257 // Ensure extensions stay off with an empty list of headers. 253 // Ensure extensions stay off with an empty list of headers.
258 extensions.clear(); 254 parameters.extensions.clear();
259 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 255 EXPECT_TRUE(channel_->SetSendParameters(parameters));
260 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 256 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
261 257
262 // Ensure extension is set properly. 258 // Ensure extension is set properly.
263 const int id = 1; 259 const int id = 1;
264 extensions.push_back(cricket::RtpHeaderExtension(ext, id)); 260 parameters.extensions.push_back(cricket::RtpHeaderExtension(ext, id));
265 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 261 EXPECT_TRUE(channel_->SetSendParameters(parameters));
266 EXPECT_EQ(id, voe_.GetSendRtpExtensionId(channel_num, ext)); 262 EXPECT_EQ(id, voe_.GetSendRtpExtensionId(channel_num, ext));
267 263
268 // Ensure extension is set properly on new channel. 264 // Ensure extension is set properly on new channel.
269 // The first stream to occupy the default channel. 265 // The first stream to occupy the default channel.
270 EXPECT_TRUE(channel_->AddSendStream( 266 EXPECT_TRUE(channel_->AddSendStream(
271 cricket::StreamParams::CreateLegacy(123))); 267 cricket::StreamParams::CreateLegacy(123)));
272 EXPECT_TRUE(channel_->AddSendStream( 268 EXPECT_TRUE(channel_->AddSendStream(
273 cricket::StreamParams::CreateLegacy(234))); 269 cricket::StreamParams::CreateLegacy(234)));
274 int new_channel_num = voe_.GetLastChannel(); 270 int new_channel_num = voe_.GetLastChannel();
275 EXPECT_NE(channel_num, new_channel_num); 271 EXPECT_NE(channel_num, new_channel_num);
276 EXPECT_EQ(id, voe_.GetSendRtpExtensionId(new_channel_num, ext)); 272 EXPECT_EQ(id, voe_.GetSendRtpExtensionId(new_channel_num, ext));
277 273
278 // Ensure all extensions go back off with an empty list. 274 // Ensure all extensions go back off with an empty list.
279 extensions.clear(); 275 parameters.codecs.push_back(kPcmuCodec);
280 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 276 parameters.extensions.clear();
277 EXPECT_TRUE(channel_->SetSendParameters(parameters));
281 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext)); 278 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(channel_num, ext));
282 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(new_channel_num, ext)); 279 EXPECT_EQ(-1, voe_.GetSendRtpExtensionId(new_channel_num, ext));
283 } 280 }
284 281
285 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { 282 void TestSetRecvRtpHeaderExtensions(const std::string& ext) {
286 EXPECT_TRUE(SetupEngineWithoutStream()); 283 EXPECT_TRUE(SetupEngineWithoutStream());
287 int channel_num = voe_.GetLastChannel(); 284 int channel_num = voe_.GetLastChannel();
288 285
289 // Ensure extensions are off by default. 286 // Ensure extensions are off by default.
290 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 287 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
291 288
292 std::vector<cricket::RtpHeaderExtension> extensions; 289 cricket::AudioRecvParameters parameters;
293 // Ensure unknown extensions won't cause an error. 290 // Ensure unknown extensions won't cause an error.
294 extensions.push_back(cricket::RtpHeaderExtension( 291 parameters.extensions.push_back(cricket::RtpHeaderExtension(
295 "urn:ietf:params:unknownextention", 1)); 292 "urn:ietf:params:unknownextention", 1));
296 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 293 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
297 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 294 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
298 295
299 // Ensure extensions stay off with an empty list of headers. 296 // Ensure extensions stay off with an empty list of headers.
300 extensions.clear(); 297 parameters.extensions.clear();
301 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 298 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
302 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 299 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
303 300
304 // Ensure extension is set properly. 301 // Ensure extension is set properly.
305 const int id = 2; 302 const int id = 2;
306 extensions.push_back(cricket::RtpHeaderExtension(ext, id)); 303 parameters.extensions.push_back(cricket::RtpHeaderExtension(ext, id));
307 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 304 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
308 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 305 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(channel_num, ext));
309 306
310 // Ensure extension is set properly on new channel. 307 // Ensure extension is set properly on new channel.
311 // The first stream to occupy the default channel. 308 // The first stream to occupy the default channel.
312 EXPECT_TRUE(channel_->AddRecvStream( 309 EXPECT_TRUE(channel_->AddRecvStream(
313 cricket::StreamParams::CreateLegacy(345))); 310 cricket::StreamParams::CreateLegacy(345)));
314 EXPECT_TRUE(channel_->AddRecvStream( 311 EXPECT_TRUE(channel_->AddRecvStream(
315 cricket::StreamParams::CreateLegacy(456))); 312 cricket::StreamParams::CreateLegacy(456)));
316 int new_channel_num = voe_.GetLastChannel(); 313 int new_channel_num = voe_.GetLastChannel();
317 EXPECT_NE(channel_num, new_channel_num); 314 EXPECT_NE(channel_num, new_channel_num);
318 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 315 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
319 316
320 // Ensure all extensions go back off with an empty list. 317 // Ensure all extensions go back off with an empty list.
321 extensions.clear(); 318 parameters.extensions.clear();
322 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 319 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
323 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 320 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
324 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 321 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
325 } 322 }
326 323
327 protected: 324 protected:
328 cricket::FakeWebRtcVoiceEngine voe_; 325 cricket::FakeWebRtcVoiceEngine voe_;
329 FakeVoETraceWrapper* trace_wrapper_; 326 FakeVoETraceWrapper* trace_wrapper_;
330 cricket::WebRtcVoiceEngine engine_; 327 cricket::WebRtcVoiceEngine engine_;
331 cricket::VoiceMediaChannel* channel_; 328 cricket::VoiceMediaChannel* channel_;
332 329
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 codec.bitrate = 32000; 404 codec.bitrate = 32000;
408 EXPECT_TRUE(engine_.FindWebRtcCodec(codec, &codec_inst)); 405 EXPECT_TRUE(engine_.FindWebRtcCodec(codec, &codec_inst));
409 EXPECT_EQ(codec.id, codec_inst.pltype); 406 EXPECT_EQ(codec.id, codec_inst.pltype);
410 EXPECT_EQ(32000, codec_inst.rate); 407 EXPECT_EQ(32000, codec_inst.rate);
411 } 408 }
412 409
413 // Test that we set our inbound codecs properly, including changing PT. 410 // Test that we set our inbound codecs properly, including changing PT.
414 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { 411 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) {
415 EXPECT_TRUE(SetupEngine()); 412 EXPECT_TRUE(SetupEngine());
416 int channel_num = voe_.GetLastChannel(); 413 int channel_num = voe_.GetLastChannel();
417 std::vector<cricket::AudioCodec> codecs; 414 cricket::AudioRecvParameters parameters;
418 codecs.push_back(kIsacCodec); 415 parameters.codecs.push_back(kIsacCodec);
419 codecs.push_back(kPcmuCodec); 416 parameters.codecs.push_back(kPcmuCodec);
420 codecs.push_back(kTelephoneEventCodec); 417 parameters.codecs.push_back(kTelephoneEventCodec);
421 codecs[0].id = 106; // collide with existing telephone-event 418 parameters.codecs[0].id = 106; // collide with existing telephone-event
422 codecs[2].id = 126; 419 parameters.codecs[2].id = 126;
423 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 420 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
424 webrtc::CodecInst gcodec; 421 webrtc::CodecInst gcodec;
425 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC"); 422 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC");
426 gcodec.plfreq = 16000; 423 gcodec.plfreq = 16000;
427 gcodec.channels = 1; 424 gcodec.channels = 1;
428 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); 425 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec));
429 EXPECT_EQ(106, gcodec.pltype); 426 EXPECT_EQ(106, gcodec.pltype);
430 EXPECT_STREQ("ISAC", gcodec.plname); 427 EXPECT_STREQ("ISAC", gcodec.plname);
431 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), 428 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname),
432 "telephone-event"); 429 "telephone-event");
433 gcodec.plfreq = 8000; 430 gcodec.plfreq = 8000;
434 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); 431 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec));
435 EXPECT_EQ(126, gcodec.pltype); 432 EXPECT_EQ(126, gcodec.pltype);
436 EXPECT_STREQ("telephone-event", gcodec.plname); 433 EXPECT_STREQ("telephone-event", gcodec.plname);
437 } 434 }
438 435
439 // Test that we fail to set an unknown inbound codec. 436 // Test that we fail to set an unknown inbound codec.
440 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) { 437 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) {
441 EXPECT_TRUE(SetupEngine()); 438 EXPECT_TRUE(SetupEngine());
442 std::vector<cricket::AudioCodec> codecs; 439 cricket::AudioRecvParameters parameters;
443 codecs.push_back(kIsacCodec); 440 parameters.codecs.push_back(kIsacCodec);
444 codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1, 0)); 441 parameters.codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1, 0));
445 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 442 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
446 } 443 }
447 444
448 // Test that we fail if we have duplicate types in the inbound list. 445 // Test that we fail if we have duplicate types in the inbound list.
449 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsDuplicatePayloadType) { 446 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsDuplicatePayloadType) {
450 EXPECT_TRUE(SetupEngine()); 447 EXPECT_TRUE(SetupEngine());
451 std::vector<cricket::AudioCodec> codecs; 448 cricket::AudioRecvParameters parameters;
452 codecs.push_back(kIsacCodec); 449 parameters.codecs.push_back(kIsacCodec);
453 codecs.push_back(kCn16000Codec); 450 parameters.codecs.push_back(kCn16000Codec);
454 codecs[1].id = kIsacCodec.id; 451 parameters.codecs[1].id = kIsacCodec.id;
455 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 452 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
456 } 453 }
457 454
458 // Test that we can decode OPUS without stereo parameters. 455 // Test that we can decode OPUS without stereo parameters.
459 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { 456 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) {
460 EXPECT_TRUE(SetupEngine()); 457 EXPECT_TRUE(SetupEngine());
461 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 458 cricket::AudioRecvParameters parameters;
462 std::vector<cricket::AudioCodec> codecs; 459 parameters.codecs.push_back(kIsacCodec);
463 codecs.push_back(kIsacCodec); 460 parameters.codecs.push_back(kPcmuCodec);
464 codecs.push_back(kPcmuCodec); 461 parameters.codecs.push_back(kOpusCodec);
465 codecs.push_back(kOpusCodec); 462 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
466 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
467 EXPECT_TRUE(channel_->AddRecvStream( 463 EXPECT_TRUE(channel_->AddRecvStream(
468 cricket::StreamParams::CreateLegacy(kSsrc1))); 464 cricket::StreamParams::CreateLegacy(kSsrc1)));
469 int channel_num2 = voe_.GetLastChannel(); 465 int channel_num2 = voe_.GetLastChannel();
470 webrtc::CodecInst opus; 466 webrtc::CodecInst opus;
471 engine_.FindWebRtcCodec(kOpusCodec, &opus); 467 engine_.FindWebRtcCodec(kOpusCodec, &opus);
472 // Even without stereo parameters, recv codecs still specify channels = 2. 468 // Even without stereo parameters, recv codecs still specify channels = 2.
473 EXPECT_EQ(2, opus.channels); 469 EXPECT_EQ(2, opus.channels);
474 EXPECT_EQ(111, opus.pltype); 470 EXPECT_EQ(111, opus.pltype);
475 EXPECT_STREQ("opus", opus.plname); 471 EXPECT_STREQ("opus", opus.plname);
476 opus.pltype = 0; 472 opus.pltype = 0;
477 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 473 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus));
478 EXPECT_EQ(111, opus.pltype); 474 EXPECT_EQ(111, opus.pltype);
479 } 475 }
480 476
481 // Test that we can decode OPUS with stereo = 0. 477 // Test that we can decode OPUS with stereo = 0.
482 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { 478 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) {
483 EXPECT_TRUE(SetupEngine()); 479 EXPECT_TRUE(SetupEngine());
484 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 480 cricket::AudioRecvParameters parameters;
485 std::vector<cricket::AudioCodec> codecs; 481 parameters.codecs.push_back(kIsacCodec);
486 codecs.push_back(kIsacCodec); 482 parameters.codecs.push_back(kPcmuCodec);
487 codecs.push_back(kPcmuCodec); 483 parameters.codecs.push_back(kOpusCodec);
488 codecs.push_back(kOpusCodec); 484 parameters.codecs[2].params["stereo"] = "0";
489 codecs[2].params["stereo"] = "0"; 485 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
490 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
491 EXPECT_TRUE(channel_->AddRecvStream( 486 EXPECT_TRUE(channel_->AddRecvStream(
492 cricket::StreamParams::CreateLegacy(kSsrc1))); 487 cricket::StreamParams::CreateLegacy(kSsrc1)));
493 int channel_num2 = voe_.GetLastChannel(); 488 int channel_num2 = voe_.GetLastChannel();
494 webrtc::CodecInst opus; 489 webrtc::CodecInst opus;
495 engine_.FindWebRtcCodec(kOpusCodec, &opus); 490 engine_.FindWebRtcCodec(kOpusCodec, &opus);
496 // Even when stereo is off, recv codecs still specify channels = 2. 491 // Even when stereo is off, recv codecs still specify channels = 2.
497 EXPECT_EQ(2, opus.channels); 492 EXPECT_EQ(2, opus.channels);
498 EXPECT_EQ(111, opus.pltype); 493 EXPECT_EQ(111, opus.pltype);
499 EXPECT_STREQ("opus", opus.plname); 494 EXPECT_STREQ("opus", opus.plname);
500 opus.pltype = 0; 495 opus.pltype = 0;
501 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 496 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus));
502 EXPECT_EQ(111, opus.pltype); 497 EXPECT_EQ(111, opus.pltype);
503 } 498 }
504 499
505 // Test that we can decode OPUS with stereo = 1. 500 // Test that we can decode OPUS with stereo = 1.
506 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { 501 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) {
507 EXPECT_TRUE(SetupEngine()); 502 EXPECT_TRUE(SetupEngine());
508 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 503 cricket::AudioRecvParameters parameters;
509 std::vector<cricket::AudioCodec> codecs; 504 parameters.codecs.push_back(kIsacCodec);
510 codecs.push_back(kIsacCodec); 505 parameters.codecs.push_back(kPcmuCodec);
511 codecs.push_back(kPcmuCodec); 506 parameters.codecs.push_back(kOpusCodec);
512 codecs.push_back(kOpusCodec); 507 parameters.codecs[2].params["stereo"] = "1";
513 codecs[2].params["stereo"] = "1"; 508 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
514 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
515 EXPECT_TRUE(channel_->AddRecvStream( 509 EXPECT_TRUE(channel_->AddRecvStream(
516 cricket::StreamParams::CreateLegacy(kSsrc1))); 510 cricket::StreamParams::CreateLegacy(kSsrc1)));
517 int channel_num2 = voe_.GetLastChannel(); 511 int channel_num2 = voe_.GetLastChannel();
518 webrtc::CodecInst opus; 512 webrtc::CodecInst opus;
519 engine_.FindWebRtcCodec(kOpusCodec, &opus); 513 engine_.FindWebRtcCodec(kOpusCodec, &opus);
520 EXPECT_EQ(2, opus.channels); 514 EXPECT_EQ(2, opus.channels);
521 EXPECT_EQ(111, opus.pltype); 515 EXPECT_EQ(111, opus.pltype);
522 EXPECT_STREQ("opus", opus.plname); 516 EXPECT_STREQ("opus", opus.plname);
523 opus.pltype = 0; 517 opus.pltype = 0;
524 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 518 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus));
525 EXPECT_EQ(111, opus.pltype); 519 EXPECT_EQ(111, opus.pltype);
526 } 520 }
527 521
528 // Test that changes to recv codecs are applied to all streams. 522 // Test that changes to recv codecs are applied to all streams.
529 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { 523 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) {
530 EXPECT_TRUE(SetupEngine()); 524 EXPECT_TRUE(SetupEngine());
531 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 525 cricket::AudioRecvParameters parameters;
532 std::vector<cricket::AudioCodec> codecs; 526 parameters.codecs.push_back(kIsacCodec);
533 codecs.push_back(kIsacCodec); 527 parameters.codecs.push_back(kPcmuCodec);
534 codecs.push_back(kPcmuCodec); 528 parameters.codecs.push_back(kTelephoneEventCodec);
535 codecs.push_back(kTelephoneEventCodec); 529 parameters.codecs[0].id = 106; // collide with existing telephone-event
536 codecs[0].id = 106; // collide with existing telephone-event 530 parameters.codecs[2].id = 126;
537 codecs[2].id = 126; 531 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
538 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
539 EXPECT_TRUE(channel_->AddRecvStream( 532 EXPECT_TRUE(channel_->AddRecvStream(
540 cricket::StreamParams::CreateLegacy(kSsrc1))); 533 cricket::StreamParams::CreateLegacy(kSsrc1)));
541 int channel_num2 = voe_.GetLastChannel(); 534 int channel_num2 = voe_.GetLastChannel();
542 webrtc::CodecInst gcodec; 535 webrtc::CodecInst gcodec;
543 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC"); 536 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC");
544 gcodec.plfreq = 16000; 537 gcodec.plfreq = 16000;
545 gcodec.channels = 1; 538 gcodec.channels = 1;
546 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 539 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
547 EXPECT_EQ(106, gcodec.pltype); 540 EXPECT_EQ(106, gcodec.pltype);
548 EXPECT_STREQ("ISAC", gcodec.plname); 541 EXPECT_STREQ("ISAC", gcodec.plname);
549 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), 542 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname),
550 "telephone-event"); 543 "telephone-event");
551 gcodec.plfreq = 8000; 544 gcodec.plfreq = 8000;
552 gcodec.channels = 1; 545 gcodec.channels = 1;
553 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 546 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
554 EXPECT_EQ(126, gcodec.pltype); 547 EXPECT_EQ(126, gcodec.pltype);
555 EXPECT_STREQ("telephone-event", gcodec.plname); 548 EXPECT_STREQ("telephone-event", gcodec.plname);
556 } 549 }
557 550
558 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { 551 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) {
559 EXPECT_TRUE(SetupEngine()); 552 EXPECT_TRUE(SetupEngine());
560 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 553 cricket::AudioRecvParameters parameters;
561 std::vector<cricket::AudioCodec> codecs; 554 parameters.codecs.push_back(kIsacCodec);
562 codecs.push_back(kIsacCodec); 555 parameters.codecs[0].id = 106; // collide with existing telephone-event
563 codecs[0].id = 106; // collide with existing telephone-event
564
565 EXPECT_TRUE(channel_->AddRecvStream( 556 EXPECT_TRUE(channel_->AddRecvStream(
566 cricket::StreamParams::CreateLegacy(kSsrc1))); 557 cricket::StreamParams::CreateLegacy(kSsrc1)));
567 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 558 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
568 559
569 int channel_num2 = voe_.GetLastChannel(); 560 int channel_num2 = voe_.GetLastChannel();
570 webrtc::CodecInst gcodec; 561 webrtc::CodecInst gcodec;
571 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC"); 562 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "ISAC");
572 gcodec.plfreq = 16000; 563 gcodec.plfreq = 16000;
573 gcodec.channels = 1; 564 gcodec.channels = 1;
574 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 565 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
575 EXPECT_EQ(106, gcodec.pltype); 566 EXPECT_EQ(106, gcodec.pltype);
576 EXPECT_STREQ("ISAC", gcodec.plname); 567 EXPECT_STREQ("ISAC", gcodec.plname);
577 } 568 }
578 569
579 // Test that we can apply the same set of codecs again while playing. 570 // Test that we can apply the same set of codecs again while playing.
580 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { 571 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) {
581 EXPECT_TRUE(SetupEngine()); 572 EXPECT_TRUE(SetupEngine());
582 int channel_num = voe_.GetLastChannel(); 573 cricket::AudioRecvParameters parameters;
583 std::vector<cricket::AudioCodec> codecs; 574 parameters.codecs.push_back(kIsacCodec);
584 codecs.push_back(kIsacCodec); 575 parameters.codecs.push_back(kCn16000Codec);
585 codecs.push_back(kCn16000Codec); 576 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
586 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
587 EXPECT_TRUE(channel_->SetPlayout(true)); 577 EXPECT_TRUE(channel_->SetPlayout(true));
588 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 578 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
589 579
590 // Changing the payload type of a codec should fail. 580 // Changing the payload type of a codec should fail.
591 codecs[0].id = 127; 581 parameters.codecs[0].id = 127;
592 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 582 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
583 int channel_num = voe_.GetLastChannel();
593 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 584 EXPECT_TRUE(voe_.GetPlayout(channel_num));
594 } 585 }
595 586
596 // Test that we can add a codec while playing. 587 // Test that we can add a codec while playing.
597 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { 588 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) {
598 EXPECT_TRUE(SetupEngine()); 589 EXPECT_TRUE(SetupEngine());
599 int channel_num = voe_.GetLastChannel(); 590 cricket::AudioRecvParameters parameters;
600 std::vector<cricket::AudioCodec> codecs; 591 parameters.codecs.push_back(kIsacCodec);
601 codecs.push_back(kIsacCodec); 592 parameters.codecs.push_back(kCn16000Codec);
602 codecs.push_back(kCn16000Codec); 593 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
603 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
604 EXPECT_TRUE(channel_->SetPlayout(true)); 594 EXPECT_TRUE(channel_->SetPlayout(true));
605 595
606 codecs.push_back(kOpusCodec); 596 parameters.codecs.push_back(kOpusCodec);
607 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 597 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
598 int channel_num = voe_.GetLastChannel();
608 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 599 EXPECT_TRUE(voe_.GetPlayout(channel_num));
609 webrtc::CodecInst gcodec; 600 webrtc::CodecInst gcodec;
610 EXPECT_TRUE(engine_.FindWebRtcCodec(kOpusCodec, &gcodec)); 601 EXPECT_TRUE(engine_.FindWebRtcCodec(kOpusCodec, &gcodec));
611 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); 602 EXPECT_EQ(kOpusCodec.id, gcodec.pltype);
612 } 603 }
613 604
614 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { 605 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) {
615 EXPECT_TRUE(SetupEngine()); 606 EXPECT_TRUE(SetupEngine());
616 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 607 cricket::AudioSendParameters parameters;
608 parameters.codecs = engine_.codecs();
609 EXPECT_TRUE(channel_->SetSendParameters(parameters));
617 610
618 // 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
619 // value. autobw is enabled for the following tests because the target 612 // value. autobw is enabled for the following tests because the target
620 // bitrate is <= 0. 613 // bitrate is <= 0.
621 614
622 // ISAC, default bitrate == 32000. 615 // ISAC, default bitrate == 32000.
623 TestSendBandwidth(kIsacCodec, 0, true, 32000); 616 TestSendBandwidth(kIsacCodec, 0, true, 32000);
624 617
625 // PCMU, default bitrate == 64000. 618 // PCMU, default bitrate == 64000.
626 TestSendBandwidth(kPcmuCodec, -1, true, 64000); 619 TestSendBandwidth(kPcmuCodec, -1, true, 64000);
627 620
628 // opus, default bitrate == 64000. 621 // opus, default bitrate == 64000.
629 TestSendBandwidth(kOpusCodec, -1, true, 64000); 622 TestSendBandwidth(kOpusCodec, -1, true, 64000);
630 } 623 }
631 624
632 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { 625 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) {
633 EXPECT_TRUE(SetupEngine()); 626 EXPECT_TRUE(SetupEngine());
634 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 627 cricket::AudioSendParameters parameters;
628 parameters.codecs = engine_.codecs();
629 EXPECT_TRUE(channel_->SetSendParameters(parameters));
635 630
636 // Test that the bitrate of a multi-rate codec is always the maximum. 631 // Test that the bitrate of a multi-rate codec is always the maximum.
637 632
638 // ISAC, default bitrate == 32000. 633 // ISAC, default bitrate == 32000.
639 TestSendBandwidth(kIsacCodec, 128000, true, 128000); 634 TestSendBandwidth(kIsacCodec, 128000, true, 128000);
640 TestSendBandwidth(kIsacCodec, 16000, true, 16000); 635 TestSendBandwidth(kIsacCodec, 16000, true, 16000);
641 636
642 // opus, default bitrate == 64000. 637 // opus, default bitrate == 64000.
643 TestSendBandwidth(kOpusCodec, 96000, true, 96000); 638 TestSendBandwidth(kOpusCodec, 96000, true, 96000);
644 TestSendBandwidth(kOpusCodec, 48000, true, 48000); 639 TestSendBandwidth(kOpusCodec, 48000, true, 48000);
645 } 640 }
646 641
647 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { 642 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) {
648 EXPECT_TRUE(SetupEngine()); 643 EXPECT_TRUE(SetupEngine());
649 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 644 cricket::AudioSendParameters parameters;
645 parameters.codecs = engine_.codecs();
646 EXPECT_TRUE(channel_->SetSendParameters(parameters));
650 647
651 // Test that we can only set a maximum bitrate for a fixed-rate codec 648 // Test that we can only set a maximum bitrate for a fixed-rate codec
652 // if it's bigger than the fixed rate. 649 // if it's bigger than the fixed rate.
653 650
654 // PCMU, fixed bitrate == 64000. 651 // PCMU, fixed bitrate == 64000.
655 TestSendBandwidth(kPcmuCodec, 0, true, 64000); 652 TestSendBandwidth(kPcmuCodec, 0, true, 64000);
656 TestSendBandwidth(kPcmuCodec, 1, false, 64000); 653 TestSendBandwidth(kPcmuCodec, 1, false, 64000);
657 TestSendBandwidth(kPcmuCodec, 128000, true, 64000); 654 TestSendBandwidth(kPcmuCodec, 128000, true, 64000);
658 TestSendBandwidth(kPcmuCodec, 32000, false, 64000); 655 TestSendBandwidth(kPcmuCodec, 32000, false, 64000);
659 TestSendBandwidth(kPcmuCodec, 64000, true, 64000); 656 TestSendBandwidth(kPcmuCodec, 64000, true, 64000);
660 TestSendBandwidth(kPcmuCodec, 63999, false, 64000); 657 TestSendBandwidth(kPcmuCodec, 63999, false, 64000);
661 TestSendBandwidth(kPcmuCodec, 64001, true, 64000); 658 TestSendBandwidth(kPcmuCodec, 64001, true, 64000);
662 } 659 }
663 660
664 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { 661 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) {
665 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 662 EXPECT_TRUE(SetupEngineWithoutStream());
666 channel_ = engine_.CreateChannel(cricket::AudioOptions()); 663 const int kDesiredBitrate = 128000;
667 EXPECT_TRUE(channel_ != nullptr); 664 cricket::AudioSendParameters parameters;
668 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 665 parameters.codecs = engine_.codecs();
669 666 parameters.max_bandwidth_bps = kDesiredBitrate;
670 int desired_bitrate = 128000; 667 EXPECT_TRUE(channel_->SetSendParameters(parameters));
671 EXPECT_TRUE(channel_->SetMaxSendBandwidth(desired_bitrate));
672 668
673 EXPECT_TRUE(channel_->AddSendStream( 669 EXPECT_TRUE(channel_->AddSendStream(
674 cricket::StreamParams::CreateLegacy(kSsrc1))); 670 cricket::StreamParams::CreateLegacy(kSsrc1)));
675 671
676 int channel_num = voe_.GetLastChannel(); 672 int channel_num = voe_.GetLastChannel();
677 webrtc::CodecInst codec; 673 webrtc::CodecInst codec;
678 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 674 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
679 EXPECT_EQ(desired_bitrate, codec.rate); 675 EXPECT_EQ(kDesiredBitrate, codec.rate);
680 } 676 }
681 677
682 // Test that bitrate cannot be set for CBR codecs. 678 // Test that bitrate cannot be set for CBR codecs.
683 // Bitrate is ignored if it is higher than the fixed bitrate. 679 // Bitrate is ignored if it is higher than the fixed bitrate.
684 // Bitrate less then the fixed bitrate is an error. 680 // Bitrate less then the fixed bitrate is an error.
685 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { 681 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) {
686 EXPECT_TRUE(SetupEngine()); 682 EXPECT_TRUE(SetupEngine());
687 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
688 683
689 webrtc::CodecInst codec; 684 cricket::AudioSendParameters parameters;
690 int channel_num = voe_.GetLastChannel(); 685 parameters.codecs.push_back(kPcmuCodec);
691 std::vector<cricket::AudioCodec> codecs;
692 686
693 // PCMU, default bitrate == 64000. 687 // PCMU, default bitrate == 64000.
694 codecs.push_back(kPcmuCodec); 688 EXPECT_TRUE(channel_->SetSendParameters(parameters));
695 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 689 int channel_num = voe_.GetLastChannel();
690 webrtc::CodecInst codec;
696 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 691 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
697 EXPECT_EQ(64000, codec.rate); 692 EXPECT_EQ(64000, codec.rate);
698 EXPECT_TRUE(channel_->SetMaxSendBandwidth(128000)); 693
694 parameters.max_bandwidth_bps = 128000;
695 EXPECT_TRUE(channel_->SetSendParameters(parameters));
699 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 696 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
700 EXPECT_EQ(64000, codec.rate); 697 EXPECT_EQ(64000, codec.rate);
701 EXPECT_FALSE(channel_->SetMaxSendBandwidth(128)); 698
699 parameters.max_bandwidth_bps = 128;
700 EXPECT_FALSE(channel_->SetSendParameters(parameters));
702 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 701 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
703 EXPECT_EQ(64000, codec.rate); 702 EXPECT_EQ(64000, codec.rate);
704 } 703 }
705 704
706 // Test that we apply codecs properly. 705 // Test that we apply codecs properly.
707 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { 706 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) {
708 EXPECT_TRUE(SetupEngine()); 707 EXPECT_TRUE(SetupEngine());
708 cricket::AudioSendParameters parameters;
709 parameters.codecs.push_back(kIsacCodec);
710 parameters.codecs.push_back(kPcmuCodec);
711 parameters.codecs.push_back(kRedCodec);
712 parameters.codecs[0].id = 96;
713 parameters.codecs[0].bitrate = 48000;
714 EXPECT_TRUE(channel_->SetSendParameters(parameters));
715 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
709 int channel_num = voe_.GetLastChannel(); 716 int channel_num = voe_.GetLastChannel();
710 std::vector<cricket::AudioCodec> codecs;
711 codecs.push_back(kIsacCodec);
712 codecs.push_back(kPcmuCodec);
713 codecs.push_back(kRedCodec);
714 codecs[0].id = 96;
715 codecs[0].bitrate = 48000;
716 EXPECT_TRUE(channel_->SetSendCodecs(codecs));
717 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
718 webrtc::CodecInst gcodec; 717 webrtc::CodecInst gcodec;
719 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 718 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
720 EXPECT_EQ(96, gcodec.pltype); 719 EXPECT_EQ(96, gcodec.pltype);
721 EXPECT_EQ(48000, gcodec.rate); 720 EXPECT_EQ(48000, gcodec.rate);
722 EXPECT_STREQ("ISAC", gcodec.plname); 721 EXPECT_STREQ("ISAC", gcodec.plname);
723 EXPECT_FALSE(voe_.GetVAD(channel_num)); 722 EXPECT_FALSE(voe_.GetVAD(channel_num));
724 EXPECT_FALSE(voe_.GetRED(channel_num)); 723 EXPECT_FALSE(voe_.GetRED(channel_num));
725 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 724 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
726 EXPECT_EQ(105, voe_.GetSendCNPayloadType(channel_num, true)); 725 EXPECT_EQ(105, voe_.GetSendCNPayloadType(channel_num, true));
727 EXPECT_EQ(106, voe_.GetSendTelephoneEventPayloadType(channel_num)); 726 EXPECT_EQ(106, voe_.GetSendTelephoneEventPayloadType(channel_num));
728 } 727 }
729 728
730 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 729 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried
731 // to apply. 730 // to apply.
732 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { 731 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) {
733 EXPECT_TRUE(SetupEngine()); 732 EXPECT_TRUE(SetupEngine());
734 std::vector<cricket::AudioCodec> codecs; 733 cricket::AudioSendParameters parameters;
735 codecs.push_back(kIsacCodec); 734 parameters.codecs.push_back(kIsacCodec);
736 codecs.push_back(kPcmuCodec); 735 parameters.codecs.push_back(kPcmuCodec);
737 codecs.push_back(kRedCodec); 736 parameters.codecs.push_back(kRedCodec);
738 codecs[0].id = 96; 737 parameters.codecs[0].id = 96;
739 codecs[0].bitrate = 48000; 738 parameters.codecs[0].bitrate = 48000;
740 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 739 EXPECT_TRUE(channel_->SetSendParameters(parameters));
741 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 740 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
742 // Calling SetSendCodec again with same codec which is already set. 741 // Calling SetSendCodec again with same codec which is already set.
743 // In this case media channel shouldn't send codec to VoE. 742 // In this case media channel shouldn't send codec to VoE.
744 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 743 EXPECT_TRUE(channel_->SetSendParameters(parameters));
745 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 744 EXPECT_EQ(1, voe_.GetNumSetSendCodecs());
746 } 745 }
747 746
748 // Verify that G722 is set with 16000 samples per second to WebRTC. 747 // Verify that G722 is set with 16000 samples per second to WebRTC.
749 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 748 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) {
750 EXPECT_TRUE(SetupEngine()); 749 EXPECT_TRUE(SetupEngine());
751 int channel_num = voe_.GetLastChannel(); 750 int channel_num = voe_.GetLastChannel();
752 std::vector<cricket::AudioCodec> codecs; 751 cricket::AudioSendParameters parameters;
753 codecs.push_back(kG722CodecSdp); 752 parameters.codecs.push_back(kG722CodecSdp);
754 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 753 EXPECT_TRUE(channel_->SetSendParameters(parameters));
755 webrtc::CodecInst gcodec; 754 webrtc::CodecInst gcodec;
756 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 755 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
757 EXPECT_STREQ("G722", gcodec.plname); 756 EXPECT_STREQ("G722", gcodec.plname);
758 EXPECT_EQ(1, gcodec.channels); 757 EXPECT_EQ(1, gcodec.channels);
759 EXPECT_EQ(16000, gcodec.plfreq); 758 EXPECT_EQ(16000, gcodec.plfreq);
760 } 759 }
761 760
762 // Test that if clockrate is not 48000 for opus, we fail. 761 // Test that if clockrate is not 48000 for opus, we fail.
763 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 762 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
764 EXPECT_TRUE(SetupEngine()); 763 EXPECT_TRUE(SetupEngine());
765 std::vector<cricket::AudioCodec> codecs; 764 cricket::AudioSendParameters parameters;
766 codecs.push_back(kOpusCodec); 765 parameters.codecs.push_back(kOpusCodec);
767 codecs[0].bitrate = 0; 766 parameters.codecs[0].bitrate = 0;
768 codecs[0].clockrate = 50000; 767 parameters.codecs[0].clockrate = 50000;
769 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 768 EXPECT_FALSE(channel_->SetSendParameters(parameters));
770 } 769 }
771 770
772 // Test that if channels=0 for opus, we fail. 771 // Test that if channels=0 for opus, we fail.
773 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0ChannelsNoStereo) { 772 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0ChannelsNoStereo) {
774 EXPECT_TRUE(SetupEngine()); 773 EXPECT_TRUE(SetupEngine());
775 std::vector<cricket::AudioCodec> codecs; 774 cricket::AudioSendParameters parameters;
776 codecs.push_back(kOpusCodec); 775 parameters.codecs.push_back(kOpusCodec);
777 codecs[0].bitrate = 0; 776 parameters.codecs[0].bitrate = 0;
778 codecs[0].channels = 0; 777 parameters.codecs[0].channels = 0;
779 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 778 EXPECT_FALSE(channel_->SetSendParameters(parameters));
780 } 779 }
781 780
782 // Test that if channels=0 for opus, we fail. 781 // Test that if channels=0 for opus, we fail.
783 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0Channels1Stereo) { 782 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad0Channels1Stereo) {
784 EXPECT_TRUE(SetupEngine()); 783 EXPECT_TRUE(SetupEngine());
785 std::vector<cricket::AudioCodec> codecs; 784 cricket::AudioSendParameters parameters;
786 codecs.push_back(kOpusCodec); 785 parameters.codecs.push_back(kOpusCodec);
787 codecs[0].bitrate = 0; 786 parameters.codecs[0].bitrate = 0;
788 codecs[0].channels = 0; 787 parameters.codecs[0].channels = 0;
789 codecs[0].params["stereo"] = "1"; 788 parameters.codecs[0].params["stereo"] = "1";
790 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 789 EXPECT_FALSE(channel_->SetSendParameters(parameters));
791 } 790 }
792 791
793 // Test that if channel is 1 for opus and there's no stereo, we fail. 792 // Test that if channel is 1 for opus and there's no stereo, we fail.
794 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpus1ChannelNoStereo) { 793 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpus1ChannelNoStereo) {
795 EXPECT_TRUE(SetupEngine()); 794 EXPECT_TRUE(SetupEngine());
796 std::vector<cricket::AudioCodec> codecs; 795 cricket::AudioSendParameters parameters;
797 codecs.push_back(kOpusCodec); 796 parameters.codecs.push_back(kOpusCodec);
798 codecs[0].bitrate = 0; 797 parameters.codecs[0].bitrate = 0;
799 codecs[0].channels = 1; 798 parameters.codecs[0].channels = 1;
800 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 799 EXPECT_FALSE(channel_->SetSendParameters(parameters));
801 } 800 }
802 801
803 // Test that if channel is 1 for opus and stereo=0, we fail. 802 // Test that if channel is 1 for opus and stereo=0, we fail.
804 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel0Stereo) { 803 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel0Stereo) {
805 EXPECT_TRUE(SetupEngine()); 804 EXPECT_TRUE(SetupEngine());
806 std::vector<cricket::AudioCodec> codecs; 805 cricket::AudioSendParameters parameters;
807 codecs.push_back(kOpusCodec); 806 parameters.codecs.push_back(kOpusCodec);
808 codecs[0].bitrate = 0; 807 parameters.codecs[0].bitrate = 0;
809 codecs[0].channels = 1; 808 parameters.codecs[0].channels = 1;
810 codecs[0].params["stereo"] = "0"; 809 parameters.codecs[0].params["stereo"] = "0";
811 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 810 EXPECT_FALSE(channel_->SetSendParameters(parameters));
812 } 811 }
813 812
814 // Test that if channel is 1 for opus and stereo=1, we fail. 813 // Test that if channel is 1 for opus and stereo=1, we fail.
815 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { 814 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) {
816 EXPECT_TRUE(SetupEngine()); 815 EXPECT_TRUE(SetupEngine());
817 std::vector<cricket::AudioCodec> codecs; 816 cricket::AudioSendParameters parameters;
818 codecs.push_back(kOpusCodec); 817 parameters.codecs.push_back(kOpusCodec);
819 codecs[0].bitrate = 0; 818 parameters.codecs[0].bitrate = 0;
820 codecs[0].channels = 1; 819 parameters.codecs[0].channels = 1;
821 codecs[0].params["stereo"] = "1"; 820 parameters.codecs[0].params["stereo"] = "1";
822 EXPECT_FALSE(channel_->SetSendCodecs(codecs)); 821 EXPECT_FALSE(channel_->SetSendParameters(parameters));
823 } 822 }
824 823
825 // Test that with bitrate=0 and no stereo, 824 // Test that with bitrate=0 and no stereo,
826 // channels and bitrate are 1 and 32000. 825 // channels and bitrate are 1 and 32000.
827 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 826 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
828 EXPECT_TRUE(SetupEngine()); 827 EXPECT_TRUE(SetupEngine());
829 int channel_num = voe_.GetLastChannel(); 828 int channel_num = voe_.GetLastChannel();
830 std::vector<cricket::AudioCodec> codecs; 829 cricket::AudioSendParameters parameters;
831 codecs.push_back(kOpusCodec); 830 parameters.codecs.push_back(kOpusCodec);
832 codecs[0].bitrate = 0; 831 parameters.codecs[0].bitrate = 0;
833 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 832 EXPECT_TRUE(channel_->SetSendParameters(parameters));
834 webrtc::CodecInst gcodec; 833 webrtc::CodecInst gcodec;
835 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 834 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
836 EXPECT_STREQ("opus", gcodec.plname); 835 EXPECT_STREQ("opus", gcodec.plname);
837 EXPECT_EQ(1, gcodec.channels); 836 EXPECT_EQ(1, gcodec.channels);
838 EXPECT_EQ(32000, gcodec.rate); 837 EXPECT_EQ(32000, gcodec.rate);
839 } 838 }
840 839
841 // Test that with bitrate=0 and stereo=0, 840 // Test that with bitrate=0 and stereo=0,
842 // channels and bitrate are 1 and 32000. 841 // channels and bitrate are 1 and 32000.
843 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 842 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
844 EXPECT_TRUE(SetupEngine()); 843 EXPECT_TRUE(SetupEngine());
845 int channel_num = voe_.GetLastChannel(); 844 int channel_num = voe_.GetLastChannel();
846 std::vector<cricket::AudioCodec> codecs; 845 cricket::AudioSendParameters parameters;
847 codecs.push_back(kOpusCodec); 846 parameters.codecs.push_back(kOpusCodec);
848 codecs[0].bitrate = 0; 847 parameters.codecs[0].bitrate = 0;
849 codecs[0].params["stereo"] = "0"; 848 parameters.codecs[0].params["stereo"] = "0";
850 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 849 EXPECT_TRUE(channel_->SetSendParameters(parameters));
851 webrtc::CodecInst gcodec; 850 webrtc::CodecInst gcodec;
852 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 851 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
853 EXPECT_STREQ("opus", gcodec.plname); 852 EXPECT_STREQ("opus", gcodec.plname);
854 EXPECT_EQ(1, gcodec.channels); 853 EXPECT_EQ(1, gcodec.channels);
855 EXPECT_EQ(32000, gcodec.rate); 854 EXPECT_EQ(32000, gcodec.rate);
856 } 855 }
857 856
858 // Test that with bitrate=invalid and stereo=0, 857 // Test that with bitrate=invalid and stereo=0,
859 // channels and bitrate are 1 and 32000. 858 // channels and bitrate are 1 and 32000.
860 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 859 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
861 EXPECT_TRUE(SetupEngine()); 860 EXPECT_TRUE(SetupEngine());
862 int channel_num = voe_.GetLastChannel(); 861 int channel_num = voe_.GetLastChannel();
863 std::vector<cricket::AudioCodec> codecs; 862 cricket::AudioSendParameters parameters;
864 codecs.push_back(kOpusCodec); 863 parameters.codecs.push_back(kOpusCodec);
865 codecs[0].params["stereo"] = "0"; 864 parameters.codecs[0].params["stereo"] = "0";
866 webrtc::CodecInst gcodec; 865 webrtc::CodecInst gcodec;
867 866
868 // bitrate that's out of the range between 6000 and 510000 will be clamped. 867 // bitrate that's out of the range between 6000 and 510000 will be clamped.
869 codecs[0].bitrate = 5999; 868 parameters.codecs[0].bitrate = 5999;
870 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 869 EXPECT_TRUE(channel_->SetSendParameters(parameters));
871 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 870 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
872 EXPECT_STREQ("opus", gcodec.plname); 871 EXPECT_STREQ("opus", gcodec.plname);
873 EXPECT_EQ(1, gcodec.channels); 872 EXPECT_EQ(1, gcodec.channels);
874 EXPECT_EQ(6000, gcodec.rate); 873 EXPECT_EQ(6000, gcodec.rate);
875 874
876 codecs[0].bitrate = 510001; 875 parameters.codecs[0].bitrate = 510001;
877 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 876 EXPECT_TRUE(channel_->SetSendParameters(parameters));
878 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 877 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
879 EXPECT_STREQ("opus", gcodec.plname); 878 EXPECT_STREQ("opus", gcodec.plname);
880 EXPECT_EQ(1, gcodec.channels); 879 EXPECT_EQ(1, gcodec.channels);
881 EXPECT_EQ(510000, gcodec.rate); 880 EXPECT_EQ(510000, gcodec.rate);
882 } 881 }
883 882
884 // Test that with bitrate=0 and stereo=1, 883 // Test that with bitrate=0 and stereo=1,
885 // channels and bitrate are 2 and 64000. 884 // channels and bitrate are 2 and 64000.
886 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 885 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
887 EXPECT_TRUE(SetupEngine()); 886 EXPECT_TRUE(SetupEngine());
888 int channel_num = voe_.GetLastChannel(); 887 int channel_num = voe_.GetLastChannel();
889 std::vector<cricket::AudioCodec> codecs; 888 cricket::AudioSendParameters parameters;
890 codecs.push_back(kOpusCodec); 889 parameters.codecs.push_back(kOpusCodec);
891 codecs[0].bitrate = 0; 890 parameters.codecs[0].bitrate = 0;
892 codecs[0].params["stereo"] = "1"; 891 parameters.codecs[0].params["stereo"] = "1";
893 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 892 EXPECT_TRUE(channel_->SetSendParameters(parameters));
894 webrtc::CodecInst gcodec; 893 webrtc::CodecInst gcodec;
895 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 894 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
896 EXPECT_STREQ("opus", gcodec.plname); 895 EXPECT_STREQ("opus", gcodec.plname);
897 EXPECT_EQ(2, gcodec.channels); 896 EXPECT_EQ(2, gcodec.channels);
898 EXPECT_EQ(64000, gcodec.rate); 897 EXPECT_EQ(64000, gcodec.rate);
899 } 898 }
900 899
901 // Test that with bitrate=invalid and stereo=1, 900 // Test that with bitrate=invalid and stereo=1,
902 // channels and bitrate are 2 and 64000. 901 // channels and bitrate are 2 and 64000.
903 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 902 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
904 EXPECT_TRUE(SetupEngine()); 903 EXPECT_TRUE(SetupEngine());
905 int channel_num = voe_.GetLastChannel(); 904 int channel_num = voe_.GetLastChannel();
906 std::vector<cricket::AudioCodec> codecs; 905 cricket::AudioSendParameters parameters;
907 codecs.push_back(kOpusCodec); 906 parameters.codecs.push_back(kOpusCodec);
908 codecs[0].params["stereo"] = "1"; 907 parameters.codecs[0].params["stereo"] = "1";
909 webrtc::CodecInst gcodec; 908 webrtc::CodecInst gcodec;
910 909
911 // bitrate that's out of the range between 6000 and 510000 will be clamped. 910 // bitrate that's out of the range between 6000 and 510000 will be clamped.
912 codecs[0].bitrate = 5999; 911 parameters.codecs[0].bitrate = 5999;
913 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 912 EXPECT_TRUE(channel_->SetSendParameters(parameters));
914 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 913 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
915 EXPECT_STREQ("opus", gcodec.plname); 914 EXPECT_STREQ("opus", gcodec.plname);
916 EXPECT_EQ(2, gcodec.channels); 915 EXPECT_EQ(2, gcodec.channels);
917 EXPECT_EQ(6000, gcodec.rate); 916 EXPECT_EQ(6000, gcodec.rate);
918 917
919 codecs[0].bitrate = 510001; 918 parameters.codecs[0].bitrate = 510001;
920 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 919 EXPECT_TRUE(channel_->SetSendParameters(parameters));
921 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 920 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
922 EXPECT_STREQ("opus", gcodec.plname); 921 EXPECT_STREQ("opus", gcodec.plname);
923 EXPECT_EQ(2, gcodec.channels); 922 EXPECT_EQ(2, gcodec.channels);
924 EXPECT_EQ(510000, gcodec.rate); 923 EXPECT_EQ(510000, gcodec.rate);
925 } 924 }
926 925
927 // Test that with bitrate=N and stereo unset, 926 // Test that with bitrate=N and stereo unset,
928 // channels and bitrate are 1 and N. 927 // channels and bitrate are 1 and N.
929 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 928 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
930 EXPECT_TRUE(SetupEngine()); 929 EXPECT_TRUE(SetupEngine());
931 int channel_num = voe_.GetLastChannel(); 930 int channel_num = voe_.GetLastChannel();
932 std::vector<cricket::AudioCodec> codecs; 931 cricket::AudioSendParameters parameters;
933 codecs.push_back(kOpusCodec); 932 parameters.codecs.push_back(kOpusCodec);
934 codecs[0].bitrate = 96000; 933 parameters.codecs[0].bitrate = 96000;
935 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 934 EXPECT_TRUE(channel_->SetSendParameters(parameters));
936 webrtc::CodecInst gcodec; 935 webrtc::CodecInst gcodec;
937 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 936 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
938 EXPECT_EQ(111, gcodec.pltype); 937 EXPECT_EQ(111, gcodec.pltype);
939 EXPECT_EQ(96000, gcodec.rate); 938 EXPECT_EQ(96000, gcodec.rate);
940 EXPECT_STREQ("opus", gcodec.plname); 939 EXPECT_STREQ("opus", gcodec.plname);
941 EXPECT_EQ(1, gcodec.channels); 940 EXPECT_EQ(1, gcodec.channels);
942 EXPECT_EQ(48000, gcodec.plfreq); 941 EXPECT_EQ(48000, gcodec.plfreq);
943 } 942 }
944 943
945 // Test that with bitrate=N and stereo=0, 944 // Test that with bitrate=N and stereo=0,
946 // channels and bitrate are 1 and N. 945 // channels and bitrate are 1 and N.
947 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 946 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
948 EXPECT_TRUE(SetupEngine()); 947 EXPECT_TRUE(SetupEngine());
949 int channel_num = voe_.GetLastChannel(); 948 int channel_num = voe_.GetLastChannel();
950 std::vector<cricket::AudioCodec> codecs; 949 cricket::AudioSendParameters parameters;
951 codecs.push_back(kOpusCodec); 950 parameters.codecs.push_back(kOpusCodec);
952 codecs[0].bitrate = 30000; 951 parameters.codecs[0].bitrate = 30000;
953 codecs[0].params["stereo"] = "0"; 952 parameters.codecs[0].params["stereo"] = "0";
954 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 953 EXPECT_TRUE(channel_->SetSendParameters(parameters));
955 webrtc::CodecInst gcodec; 954 webrtc::CodecInst gcodec;
956 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 955 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
957 EXPECT_EQ(1, gcodec.channels); 956 EXPECT_EQ(1, gcodec.channels);
958 EXPECT_EQ(30000, gcodec.rate); 957 EXPECT_EQ(30000, gcodec.rate);
959 EXPECT_STREQ("opus", gcodec.plname); 958 EXPECT_STREQ("opus", gcodec.plname);
960 } 959 }
961 960
962 // Test that with bitrate=N and without any parameters, 961 // Test that with bitrate=N and without any parameters,
963 // channels and bitrate are 1 and N. 962 // channels and bitrate are 1 and N.
964 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 963 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
965 EXPECT_TRUE(SetupEngine()); 964 EXPECT_TRUE(SetupEngine());
966 int channel_num = voe_.GetLastChannel(); 965 int channel_num = voe_.GetLastChannel();
967 std::vector<cricket::AudioCodec> codecs; 966 cricket::AudioSendParameters parameters;
968 codecs.push_back(kOpusCodec); 967 parameters.codecs.push_back(kOpusCodec);
969 codecs[0].bitrate = 30000; 968 parameters.codecs[0].bitrate = 30000;
970 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 969 EXPECT_TRUE(channel_->SetSendParameters(parameters));
971 webrtc::CodecInst gcodec; 970 webrtc::CodecInst gcodec;
972 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 971 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
973 EXPECT_EQ(1, gcodec.channels); 972 EXPECT_EQ(1, gcodec.channels);
974 EXPECT_EQ(30000, gcodec.rate); 973 EXPECT_EQ(30000, gcodec.rate);
975 EXPECT_STREQ("opus", gcodec.plname); 974 EXPECT_STREQ("opus", gcodec.plname);
976 } 975 }
977 976
978 // Test that with bitrate=N and stereo=1, 977 // Test that with bitrate=N and stereo=1,
979 // channels and bitrate are 2 and N. 978 // channels and bitrate are 2 and N.
980 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 979 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
981 EXPECT_TRUE(SetupEngine()); 980 EXPECT_TRUE(SetupEngine());
982 int channel_num = voe_.GetLastChannel(); 981 int channel_num = voe_.GetLastChannel();
983 std::vector<cricket::AudioCodec> codecs; 982 cricket::AudioSendParameters parameters;
984 codecs.push_back(kOpusCodec); 983 parameters.codecs.push_back(kOpusCodec);
985 codecs[0].bitrate = 30000; 984 parameters.codecs[0].bitrate = 30000;
986 codecs[0].params["stereo"] = "1"; 985 parameters.codecs[0].params["stereo"] = "1";
987 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 986 EXPECT_TRUE(channel_->SetSendParameters(parameters));
988 webrtc::CodecInst gcodec; 987 webrtc::CodecInst gcodec;
989 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 988 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
990 EXPECT_EQ(2, gcodec.channels); 989 EXPECT_EQ(2, gcodec.channels);
991 EXPECT_EQ(30000, gcodec.rate); 990 EXPECT_EQ(30000, gcodec.rate);
992 EXPECT_STREQ("opus", gcodec.plname); 991 EXPECT_STREQ("opus", gcodec.plname);
993 } 992 }
994 993
995 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. 994 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
996 // Also test that the "maxaveragebitrate" can't be set to values outside the 995 // Also test that the "maxaveragebitrate" can't be set to values outside the
997 // range of 6000 and 510000 996 // range of 6000 and 510000
998 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { 997 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
999 EXPECT_TRUE(SetupEngine()); 998 EXPECT_TRUE(SetupEngine());
1000 int channel_num = voe_.GetLastChannel(); 999 int channel_num = voe_.GetLastChannel();
1001 std::vector<cricket::AudioCodec> codecs; 1000 cricket::AudioSendParameters parameters;
1002 codecs.push_back(kOpusCodec); 1001 parameters.codecs.push_back(kOpusCodec);
1003 codecs[0].bitrate = 30000; 1002 parameters.codecs[0].bitrate = 30000;
1004 webrtc::CodecInst gcodec; 1003 webrtc::CodecInst gcodec;
1005 1004
1006 // Ignore if less than 6000. 1005 // Ignore if less than 6000.
1007 codecs[0].params["maxaveragebitrate"] = "5999"; 1006 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
1008 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1007 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1009 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1008 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1010 EXPECT_EQ(6000, gcodec.rate); 1009 EXPECT_EQ(6000, gcodec.rate);
1011 1010
1012 // Ignore if larger than 510000. 1011 // Ignore if larger than 510000.
1013 codecs[0].params["maxaveragebitrate"] = "510001"; 1012 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1014 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1013 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1015 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1014 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1016 EXPECT_EQ(510000, gcodec.rate); 1015 EXPECT_EQ(510000, gcodec.rate);
1017 1016
1018 codecs[0].params["maxaveragebitrate"] = "200000"; 1017 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1019 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1018 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1020 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1019 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1021 EXPECT_EQ(200000, gcodec.rate); 1020 EXPECT_EQ(200000, gcodec.rate);
1022 } 1021 }
1023 1022
1024 // Test that we can enable NACK with opus as caller. 1023 // Test that we can enable NACK with opus as caller.
1025 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { 1024 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) {
1026 EXPECT_TRUE(SetupEngine()); 1025 EXPECT_TRUE(SetupEngine());
1027 int channel_num = voe_.GetLastChannel(); 1026 int channel_num = voe_.GetLastChannel();
1028 std::vector<cricket::AudioCodec> codecs; 1027 cricket::AudioSendParameters parameters;
1029 codecs.push_back(kOpusCodec); 1028 parameters.codecs.push_back(kOpusCodec);
1030 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1029 parameters.codecs[0].AddFeedbackParam(
1031 cricket::kParamValueEmpty)); 1030 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1031 cricket::kParamValueEmpty));
1032 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1032 EXPECT_FALSE(voe_.GetNACK(channel_num));
1033 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1033 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1034 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1034 EXPECT_TRUE(voe_.GetNACK(channel_num));
1035 } 1035 }
1036 1036
1037 // Test that we can enable NACK with opus as callee. 1037 // Test that we can enable NACK with opus as callee.
1038 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { 1038 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) {
1039 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 1039 EXPECT_TRUE(SetupEngineWithoutStream());
1040 channel_ = engine_.CreateChannel(cricket::AudioOptions());
1041 EXPECT_TRUE(channel_ != nullptr);
1042
1043 int channel_num = voe_.GetLastChannel(); 1040 int channel_num = voe_.GetLastChannel();
1044 std::vector<cricket::AudioCodec> codecs; 1041 cricket::AudioSendParameters parameters;
1045 codecs.push_back(kOpusCodec); 1042 parameters.codecs.push_back(kOpusCodec);
1046 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1043 parameters.codecs[0].AddFeedbackParam(
1047 cricket::kParamValueEmpty)); 1044 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1045 cricket::kParamValueEmpty));
1048 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1046 EXPECT_FALSE(voe_.GetNACK(channel_num));
1049 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1047 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1050 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1048 EXPECT_FALSE(voe_.GetNACK(channel_num));
1051 1049
1052 EXPECT_TRUE(channel_->AddSendStream( 1050 EXPECT_TRUE(channel_->AddSendStream(
1053 cricket::StreamParams::CreateLegacy(kSsrc1))); 1051 cricket::StreamParams::CreateLegacy(kSsrc1)));
1054 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1052 EXPECT_TRUE(voe_.GetNACK(channel_num));
1055 } 1053 }
1056 1054
1057 // Test that we can enable NACK on receive streams. 1055 // Test that we can enable NACK on receive streams.
1058 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { 1056 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) {
1059 EXPECT_TRUE(SetupEngine()); 1057 EXPECT_TRUE(SetupEngine());
1060 EXPECT_TRUE(channel_->SetOptions(options_conference_));
1061 int channel_num1 = voe_.GetLastChannel(); 1058 int channel_num1 = voe_.GetLastChannel();
1062 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1059 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1063 int channel_num2 = voe_.GetLastChannel(); 1060 int channel_num2 = voe_.GetLastChannel();
1064 std::vector<cricket::AudioCodec> codecs; 1061 cricket::AudioSendParameters parameters;
1065 codecs.push_back(kOpusCodec); 1062 parameters.codecs.push_back(kOpusCodec);
1066 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1063 parameters.codecs[0].AddFeedbackParam(
1067 cricket::kParamValueEmpty)); 1064 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1065 cricket::kParamValueEmpty));
1068 EXPECT_FALSE(voe_.GetNACK(channel_num1)); 1066 EXPECT_FALSE(voe_.GetNACK(channel_num1));
1069 EXPECT_FALSE(voe_.GetNACK(channel_num2)); 1067 EXPECT_FALSE(voe_.GetNACK(channel_num2));
1070 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1068 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1071 EXPECT_TRUE(voe_.GetNACK(channel_num1)); 1069 EXPECT_TRUE(voe_.GetNACK(channel_num1));
1072 EXPECT_TRUE(voe_.GetNACK(channel_num2)); 1070 EXPECT_TRUE(voe_.GetNACK(channel_num2));
1073 } 1071 }
1074 1072
1075 // Test that we can disable NACK. 1073 // Test that we can disable NACK.
1076 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { 1074 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) {
1077 EXPECT_TRUE(SetupEngine()); 1075 EXPECT_TRUE(SetupEngine());
1078 int channel_num = voe_.GetLastChannel(); 1076 int channel_num = voe_.GetLastChannel();
1079 std::vector<cricket::AudioCodec> codecs; 1077 cricket::AudioSendParameters parameters;
1080 codecs.push_back(kOpusCodec); 1078 parameters.codecs.push_back(kOpusCodec);
1081 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1079 parameters.codecs[0].AddFeedbackParam(
1082 cricket::kParamValueEmpty)); 1080 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1083 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1081 cricket::kParamValueEmpty));
1082 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1084 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1083 EXPECT_TRUE(voe_.GetNACK(channel_num));
1085 1084
1086 codecs.clear(); 1085 parameters.codecs.clear();
1087 codecs.push_back(kOpusCodec); 1086 parameters.codecs.push_back(kOpusCodec);
1088 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1087 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1089 EXPECT_FALSE(voe_.GetNACK(channel_num)); 1088 EXPECT_FALSE(voe_.GetNACK(channel_num));
1090 } 1089 }
1091 1090
1092 // Test that we can disable NACK on receive streams. 1091 // Test that we can disable NACK on receive streams.
1093 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { 1092 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) {
1094 EXPECT_TRUE(SetupEngine()); 1093 EXPECT_TRUE(SetupEngine());
1095 EXPECT_TRUE(channel_->SetOptions(options_conference_));
1096 int channel_num1 = voe_.GetLastChannel(); 1094 int channel_num1 = voe_.GetLastChannel();
1097 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1095 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1098 int channel_num2 = voe_.GetLastChannel(); 1096 int channel_num2 = voe_.GetLastChannel();
1099 std::vector<cricket::AudioCodec> codecs; 1097 cricket::AudioSendParameters parameters;
1100 codecs.push_back(kOpusCodec); 1098 parameters.codecs.push_back(kOpusCodec);
1101 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1099 parameters.codecs[0].AddFeedbackParam(
1102 cricket::kParamValueEmpty)); 1100 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1103 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1101 cricket::kParamValueEmpty));
1102 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1104 EXPECT_TRUE(voe_.GetNACK(channel_num1)); 1103 EXPECT_TRUE(voe_.GetNACK(channel_num1));
1105 EXPECT_TRUE(voe_.GetNACK(channel_num2)); 1104 EXPECT_TRUE(voe_.GetNACK(channel_num2));
1106 1105
1107 codecs.clear(); 1106 parameters.codecs.clear();
1108 codecs.push_back(kOpusCodec); 1107 parameters.codecs.push_back(kOpusCodec);
1109 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1108 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1110 EXPECT_FALSE(voe_.GetNACK(channel_num1)); 1109 EXPECT_FALSE(voe_.GetNACK(channel_num1));
1111 EXPECT_FALSE(voe_.GetNACK(channel_num2)); 1110 EXPECT_FALSE(voe_.GetNACK(channel_num2));
1112 } 1111 }
1113 1112
1114 // Test that NACK is enabled on a new receive stream. 1113 // Test that NACK is enabled on a new receive stream.
1115 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { 1114 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) {
1116 EXPECT_TRUE(SetupEngine()); 1115 EXPECT_TRUE(SetupEngine());
1117 EXPECT_TRUE(channel_->SetOptions(options_conference_));
1118 int channel_num = voe_.GetLastChannel(); 1116 int channel_num = voe_.GetLastChannel();
1119 std::vector<cricket::AudioCodec> codecs; 1117 cricket::AudioSendParameters parameters;
1120 codecs.push_back(kIsacCodec); 1118 parameters.codecs.push_back(kIsacCodec);
1121 codecs[0].AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1119 parameters.codecs.push_back(kCn16000Codec);
1122 cricket::kParamValueEmpty)); 1120 parameters.codecs[0].AddFeedbackParam(
1123 codecs.push_back(kCn16000Codec); 1121 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1124 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1122 cricket::kParamValueEmpty));
1123 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1125 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1124 EXPECT_TRUE(voe_.GetNACK(channel_num));
1126 1125
1127 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 1126 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
1128 channel_num = voe_.GetLastChannel(); 1127 channel_num = voe_.GetLastChannel();
1129 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1128 EXPECT_TRUE(voe_.GetNACK(channel_num));
1130 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 1129 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
1131 channel_num = voe_.GetLastChannel(); 1130 channel_num = voe_.GetLastChannel();
1132 EXPECT_TRUE(voe_.GetNACK(channel_num)); 1131 EXPECT_TRUE(voe_.GetNACK(channel_num));
1133 } 1132 }
1134 1133
1135 // Test that without useinbandfec, Opus FEC is off. 1134 // Test that without useinbandfec, Opus FEC is off.
1136 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { 1135 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
1137 EXPECT_TRUE(SetupEngine()); 1136 EXPECT_TRUE(SetupEngine());
1138 int channel_num = voe_.GetLastChannel(); 1137 int channel_num = voe_.GetLastChannel();
1139 std::vector<cricket::AudioCodec> codecs; 1138 cricket::AudioSendParameters parameters;
1140 codecs.push_back(kOpusCodec); 1139 parameters.codecs.push_back(kOpusCodec);
1141 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1140 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1142 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1141 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1143 } 1142 }
1144 1143
1145 // Test that with useinbandfec=0, Opus FEC is off. 1144 // Test that with useinbandfec=0, Opus FEC is off.
1146 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { 1145 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1147 EXPECT_TRUE(SetupEngine()); 1146 EXPECT_TRUE(SetupEngine());
1148 int channel_num = voe_.GetLastChannel(); 1147 int channel_num = voe_.GetLastChannel();
1149 std::vector<cricket::AudioCodec> codecs; 1148 cricket::AudioSendParameters parameters;
1150 codecs.push_back(kOpusCodec); 1149 parameters.codecs.push_back(kOpusCodec);
1151 codecs[0].bitrate = 0; 1150 parameters.codecs[0].bitrate = 0;
1152 codecs[0].params["useinbandfec"] = "0"; 1151 parameters.codecs[0].params["useinbandfec"] = "0";
1153 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1152 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1154 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1153 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1155 webrtc::CodecInst gcodec; 1154 webrtc::CodecInst gcodec;
1156 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1155 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1157 EXPECT_STREQ("opus", gcodec.plname); 1156 EXPECT_STREQ("opus", gcodec.plname);
1158 EXPECT_EQ(1, gcodec.channels); 1157 EXPECT_EQ(1, gcodec.channels);
1159 EXPECT_EQ(32000, gcodec.rate); 1158 EXPECT_EQ(32000, gcodec.rate);
1160 } 1159 }
1161 1160
1162 // Test that with useinbandfec=1, Opus FEC is on. 1161 // Test that with useinbandfec=1, Opus FEC is on.
1163 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { 1162 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1164 EXPECT_TRUE(SetupEngine()); 1163 EXPECT_TRUE(SetupEngine());
1165 int channel_num = voe_.GetLastChannel(); 1164 int channel_num = voe_.GetLastChannel();
1166 std::vector<cricket::AudioCodec> codecs; 1165 cricket::AudioSendParameters parameters;
1167 codecs.push_back(kOpusCodec); 1166 parameters.codecs.push_back(kOpusCodec);
1168 codecs[0].bitrate = 0; 1167 parameters.codecs[0].bitrate = 0;
1169 codecs[0].params["useinbandfec"] = "1"; 1168 parameters.codecs[0].params["useinbandfec"] = "1";
1170 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1169 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1171 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1170 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1172 webrtc::CodecInst gcodec; 1171 webrtc::CodecInst gcodec;
1173 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1172 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1174 EXPECT_STREQ("opus", gcodec.plname); 1173 EXPECT_STREQ("opus", gcodec.plname);
1175 EXPECT_EQ(1, gcodec.channels); 1174 EXPECT_EQ(1, gcodec.channels);
1176 EXPECT_EQ(32000, gcodec.rate); 1175 EXPECT_EQ(32000, gcodec.rate);
1177 } 1176 }
1178 1177
1179 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. 1178 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1180 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { 1179 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1181 EXPECT_TRUE(SetupEngine()); 1180 EXPECT_TRUE(SetupEngine());
1182 int channel_num = voe_.GetLastChannel(); 1181 int channel_num = voe_.GetLastChannel();
1183 std::vector<cricket::AudioCodec> codecs; 1182 cricket::AudioSendParameters parameters;
1184 codecs.push_back(kOpusCodec); 1183 parameters.codecs.push_back(kOpusCodec);
1185 codecs[0].bitrate = 0; 1184 parameters.codecs[0].bitrate = 0;
1186 codecs[0].params["stereo"] = "1"; 1185 parameters.codecs[0].params["stereo"] = "1";
1187 codecs[0].params["useinbandfec"] = "1"; 1186 parameters.codecs[0].params["useinbandfec"] = "1";
1188 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1187 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1189 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1188 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1190 webrtc::CodecInst gcodec; 1189 webrtc::CodecInst gcodec;
1191 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1190 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1192 EXPECT_STREQ("opus", gcodec.plname); 1191 EXPECT_STREQ("opus", gcodec.plname);
1193 EXPECT_EQ(2, gcodec.channels); 1192 EXPECT_EQ(2, gcodec.channels);
1194 EXPECT_EQ(64000, gcodec.rate); 1193 EXPECT_EQ(64000, gcodec.rate);
1195 } 1194 }
1196 1195
1197 // Test that with non-Opus, codec FEC is off. 1196 // Test that with non-Opus, codec FEC is off.
1198 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { 1197 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1199 EXPECT_TRUE(SetupEngine()); 1198 EXPECT_TRUE(SetupEngine());
1200 int channel_num = voe_.GetLastChannel(); 1199 int channel_num = voe_.GetLastChannel();
1201 std::vector<cricket::AudioCodec> codecs; 1200 cricket::AudioSendParameters parameters;
1202 codecs.push_back(kIsacCodec); 1201 parameters.codecs.push_back(kIsacCodec);
1203 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1202 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1204 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1203 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1205 } 1204 }
1206 1205
1207 // Test the with non-Opus, even if useinbandfec=1, FEC is off. 1206 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1208 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { 1207 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1209 EXPECT_TRUE(SetupEngine()); 1208 EXPECT_TRUE(SetupEngine());
1210 int channel_num = voe_.GetLastChannel(); 1209 int channel_num = voe_.GetLastChannel();
1211 std::vector<cricket::AudioCodec> codecs; 1210 cricket::AudioSendParameters parameters;
1212 codecs.push_back(kIsacCodec); 1211 parameters.codecs.push_back(kIsacCodec);
1213 codecs[0].params["useinbandfec"] = "1"; 1212 parameters.codecs[0].params["useinbandfec"] = "1";
1214 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1213 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1215 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1214 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1216 } 1215 }
1217 1216
1218 // Test that Opus FEC status can be changed. 1217 // Test that Opus FEC status can be changed.
1219 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { 1218 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1220 EXPECT_TRUE(SetupEngine()); 1219 EXPECT_TRUE(SetupEngine());
1221 int channel_num = voe_.GetLastChannel(); 1220 int channel_num = voe_.GetLastChannel();
1222 std::vector<cricket::AudioCodec> codecs; 1221 cricket::AudioSendParameters parameters;
1223 codecs.push_back(kOpusCodec); 1222 parameters.codecs.push_back(kOpusCodec);
1224 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1223 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1225 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1224 EXPECT_FALSE(voe_.GetCodecFEC(channel_num));
1226 codecs[0].params["useinbandfec"] = "1"; 1225 parameters.codecs[0].params["useinbandfec"] = "1";
1227 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1226 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1228 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1227 EXPECT_TRUE(voe_.GetCodecFEC(channel_num));
1229 } 1228 }
1230 1229
1231 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. 1230 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
1232 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { 1231 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1233 EXPECT_TRUE(SetupEngine()); 1232 EXPECT_TRUE(SetupEngine());
1234 int channel_num = voe_.GetLastChannel(); 1233 int channel_num = voe_.GetLastChannel();
1235 std::vector<cricket::AudioCodec> codecs; 1234 cricket::AudioSendParameters parameters;
1236 codecs.push_back(kOpusCodec); 1235 parameters.codecs.push_back(kOpusCodec);
1237 codecs[0].bitrate = 0; 1236 parameters.codecs[0].bitrate = 0;
1238 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1237 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1239 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1238 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1240 EXPECT_EQ(cricket::kOpusBandwidthNb, 1239 EXPECT_EQ(cricket::kOpusBandwidthNb,
1241 voe_.GetMaxEncodingBandwidth(channel_num)); 1240 voe_.GetMaxEncodingBandwidth(channel_num));
1242 webrtc::CodecInst gcodec; 1241 webrtc::CodecInst gcodec;
1243 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1242 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1244 EXPECT_STREQ("opus", gcodec.plname); 1243 EXPECT_STREQ("opus", gcodec.plname);
1245 1244
1246 EXPECT_EQ(12000, gcodec.rate); 1245 EXPECT_EQ(12000, gcodec.rate);
1247 codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1246 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1248 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1247 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1249 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1248 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1250 EXPECT_EQ(24000, gcodec.rate); 1249 EXPECT_EQ(24000, gcodec.rate);
1251 } 1250 }
1252 1251
1253 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. 1252 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1254 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { 1253 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1255 EXPECT_TRUE(SetupEngine()); 1254 EXPECT_TRUE(SetupEngine());
1256 int channel_num = voe_.GetLastChannel(); 1255 int channel_num = voe_.GetLastChannel();
1257 std::vector<cricket::AudioCodec> codecs; 1256 cricket::AudioSendParameters parameters;
1258 codecs.push_back(kOpusCodec); 1257 parameters.codecs.push_back(kOpusCodec);
1259 codecs[0].bitrate = 0; 1258 parameters.codecs[0].bitrate = 0;
1260 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); 1259 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1261 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1260 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1262 EXPECT_EQ(cricket::kOpusBandwidthMb, 1261 EXPECT_EQ(cricket::kOpusBandwidthMb,
1263 voe_.GetMaxEncodingBandwidth(channel_num)); 1262 voe_.GetMaxEncodingBandwidth(channel_num));
1264 webrtc::CodecInst gcodec; 1263 webrtc::CodecInst gcodec;
1265 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1264 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1266 EXPECT_STREQ("opus", gcodec.plname); 1265 EXPECT_STREQ("opus", gcodec.plname);
1267 1266
1268 EXPECT_EQ(20000, gcodec.rate); 1267 EXPECT_EQ(20000, gcodec.rate);
1269 codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1268 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1270 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1269 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1271 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1270 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1272 EXPECT_EQ(40000, gcodec.rate); 1271 EXPECT_EQ(40000, gcodec.rate);
1273 } 1272 }
1274 1273
1275 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. 1274 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1276 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { 1275 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1277 EXPECT_TRUE(SetupEngine()); 1276 EXPECT_TRUE(SetupEngine());
1278 int channel_num = voe_.GetLastChannel(); 1277 int channel_num = voe_.GetLastChannel();
1279 std::vector<cricket::AudioCodec> codecs; 1278 cricket::AudioSendParameters parameters;
1280 codecs.push_back(kOpusCodec); 1279 parameters.codecs.push_back(kOpusCodec);
1281 codecs[0].bitrate = 0; 1280 parameters.codecs[0].bitrate = 0;
1282 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); 1281 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1283 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1282 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1284 EXPECT_EQ(cricket::kOpusBandwidthWb, 1283 EXPECT_EQ(cricket::kOpusBandwidthWb,
1285 voe_.GetMaxEncodingBandwidth(channel_num)); 1284 voe_.GetMaxEncodingBandwidth(channel_num));
1286 webrtc::CodecInst gcodec; 1285 webrtc::CodecInst gcodec;
1287 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1286 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1288 EXPECT_STREQ("opus", gcodec.plname); 1287 EXPECT_STREQ("opus", gcodec.plname);
1289 1288
1290 EXPECT_EQ(20000, gcodec.rate); 1289 EXPECT_EQ(20000, gcodec.rate);
1291 codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1290 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1292 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1291 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1293 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1292 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1294 EXPECT_EQ(40000, gcodec.rate); 1293 EXPECT_EQ(40000, gcodec.rate);
1295 } 1294 }
1296 1295
1297 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. 1296 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1298 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { 1297 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1299 EXPECT_TRUE(SetupEngine()); 1298 EXPECT_TRUE(SetupEngine());
1300 int channel_num = voe_.GetLastChannel(); 1299 int channel_num = voe_.GetLastChannel();
1301 std::vector<cricket::AudioCodec> codecs; 1300 cricket::AudioSendParameters parameters;
1302 codecs.push_back(kOpusCodec); 1301 parameters.codecs.push_back(kOpusCodec);
1303 codecs[0].bitrate = 0; 1302 parameters.codecs[0].bitrate = 0;
1304 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); 1303 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1305 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1304 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1306 EXPECT_EQ(cricket::kOpusBandwidthSwb, 1305 EXPECT_EQ(cricket::kOpusBandwidthSwb,
1307 voe_.GetMaxEncodingBandwidth(channel_num)); 1306 voe_.GetMaxEncodingBandwidth(channel_num));
1308 webrtc::CodecInst gcodec; 1307 webrtc::CodecInst gcodec;
1309 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1308 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1310 EXPECT_STREQ("opus", gcodec.plname); 1309 EXPECT_STREQ("opus", gcodec.plname);
1311 1310
1312 EXPECT_EQ(32000, gcodec.rate); 1311 EXPECT_EQ(32000, gcodec.rate);
1313 codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1312 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1314 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1313 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1315 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1314 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1316 EXPECT_EQ(64000, gcodec.rate); 1315 EXPECT_EQ(64000, gcodec.rate);
1317 } 1316 }
1318 1317
1319 // Test 24000 < maxplaybackrate triggers Opus full band mode. 1318 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1320 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { 1319 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1321 EXPECT_TRUE(SetupEngine()); 1320 EXPECT_TRUE(SetupEngine());
1322 int channel_num = voe_.GetLastChannel(); 1321 int channel_num = voe_.GetLastChannel();
1323 std::vector<cricket::AudioCodec> codecs; 1322 cricket::AudioSendParameters parameters;
1324 codecs.push_back(kOpusCodec); 1323 parameters.codecs.push_back(kOpusCodec);
1325 codecs[0].bitrate = 0; 1324 parameters.codecs[0].bitrate = 0;
1326 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); 1325 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1327 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1326 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1328 EXPECT_EQ(cricket::kOpusBandwidthFb, 1327 EXPECT_EQ(cricket::kOpusBandwidthFb,
1329 voe_.GetMaxEncodingBandwidth(channel_num)); 1328 voe_.GetMaxEncodingBandwidth(channel_num));
1330 webrtc::CodecInst gcodec; 1329 webrtc::CodecInst gcodec;
1331 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1330 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1332 EXPECT_STREQ("opus", gcodec.plname); 1331 EXPECT_STREQ("opus", gcodec.plname);
1333 1332
1334 EXPECT_EQ(32000, gcodec.rate); 1333 EXPECT_EQ(32000, gcodec.rate);
1335 codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1334 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1336 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1335 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1337 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1336 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1338 EXPECT_EQ(64000, gcodec.rate); 1337 EXPECT_EQ(64000, gcodec.rate);
1339 } 1338 }
1340 1339
1341 // Test Opus that without maxplaybackrate, default playback rate is used. 1340 // Test Opus that without maxplaybackrate, default playback rate is used.
1342 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { 1341 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1343 EXPECT_TRUE(SetupEngine()); 1342 EXPECT_TRUE(SetupEngine());
1344 int channel_num = voe_.GetLastChannel(); 1343 int channel_num = voe_.GetLastChannel();
1345 std::vector<cricket::AudioCodec> codecs; 1344 cricket::AudioSendParameters parameters;
1346 codecs.push_back(kOpusCodec); 1345 parameters.codecs.push_back(kOpusCodec);
1347 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1346 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1348 EXPECT_EQ(cricket::kOpusBandwidthFb, 1347 EXPECT_EQ(cricket::kOpusBandwidthFb,
1349 voe_.GetMaxEncodingBandwidth(channel_num)); 1348 voe_.GetMaxEncodingBandwidth(channel_num));
1350 } 1349 }
1351 1350
1352 // Test the with non-Opus, maxplaybackrate has no effect. 1351 // Test the with non-Opus, maxplaybackrate has no effect.
1353 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { 1352 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1354 EXPECT_TRUE(SetupEngine()); 1353 EXPECT_TRUE(SetupEngine());
1355 int channel_num = voe_.GetLastChannel(); 1354 int channel_num = voe_.GetLastChannel();
1356 std::vector<cricket::AudioCodec> codecs; 1355 cricket::AudioSendParameters parameters;
1357 codecs.push_back(kIsacCodec); 1356 parameters.codecs.push_back(kIsacCodec);
1358 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); 1357 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1359 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1358 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1360 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num)); 1359 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num));
1361 } 1360 }
1362 1361
1363 // Test maxplaybackrate can be set on two streams. 1362 // Test maxplaybackrate can be set on two streams.
1364 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { 1363 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1365 EXPECT_TRUE(SetupEngine()); 1364 EXPECT_TRUE(SetupEngine());
1366 int channel_num = voe_.GetLastChannel(); 1365 int channel_num = voe_.GetLastChannel();
1367 std::vector<cricket::AudioCodec> codecs; 1366 cricket::AudioSendParameters parameters;
1368 codecs.push_back(kOpusCodec); 1367 parameters.codecs.push_back(kOpusCodec);
1369 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1368 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1370 // Default bandwidth is 24000. 1369 // Default bandwidth is 24000.
1371 EXPECT_EQ(cricket::kOpusBandwidthFb, 1370 EXPECT_EQ(cricket::kOpusBandwidthFb,
1372 voe_.GetMaxEncodingBandwidth(channel_num)); 1371 voe_.GetMaxEncodingBandwidth(channel_num));
1373 1372
1374 codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1373 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1375 1374
1376 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1375 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1377 EXPECT_EQ(cricket::kOpusBandwidthNb, 1376 EXPECT_EQ(cricket::kOpusBandwidthNb,
1378 voe_.GetMaxEncodingBandwidth(channel_num)); 1377 voe_.GetMaxEncodingBandwidth(channel_num));
1379 1378
1380 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); 1379 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2));
1381 channel_num = voe_.GetLastChannel(); 1380 channel_num = voe_.GetLastChannel();
1382 EXPECT_EQ(cricket::kOpusBandwidthNb, 1381 EXPECT_EQ(cricket::kOpusBandwidthNb,
1383 voe_.GetMaxEncodingBandwidth(channel_num)); 1382 voe_.GetMaxEncodingBandwidth(channel_num));
1384 } 1383 }
1385 1384
1386 // Test that with usedtx=0, Opus DTX is off. 1385 // Test that with usedtx=0, Opus DTX is off.
1387 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { 1386 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1388 EXPECT_TRUE(SetupEngine()); 1387 EXPECT_TRUE(SetupEngine());
1389 int channel_num = voe_.GetLastChannel(); 1388 int channel_num = voe_.GetLastChannel();
1390 std::vector<cricket::AudioCodec> codecs; 1389 cricket::AudioSendParameters parameters;
1391 codecs.push_back(kOpusCodec); 1390 parameters.codecs.push_back(kOpusCodec);
1392 codecs[0].params["usedtx"] = "0"; 1391 parameters.codecs[0].params["usedtx"] = "0";
1393 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1392 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1394 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1393 EXPECT_FALSE(voe_.GetOpusDtx(channel_num));
1395 } 1394 }
1396 1395
1397 // Test that with usedtx=1, Opus DTX is on. 1396 // Test that with usedtx=1, Opus DTX is on.
1398 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { 1397 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1399 EXPECT_TRUE(SetupEngine()); 1398 EXPECT_TRUE(SetupEngine());
1400 int channel_num = voe_.GetLastChannel(); 1399 int channel_num = voe_.GetLastChannel();
1401 std::vector<cricket::AudioCodec> codecs; 1400 cricket::AudioSendParameters parameters;
1402 codecs.push_back(kOpusCodec); 1401 parameters.codecs.push_back(kOpusCodec);
1403 codecs[0].params["usedtx"] = "1"; 1402 parameters.codecs[0].params["usedtx"] = "1";
1404 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1403 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1405 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1404 EXPECT_TRUE(voe_.GetOpusDtx(channel_num));
1406 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1405 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1407 } 1406 }
1408 1407
1409 // Test that usedtx=1 works with stereo Opus. 1408 // Test that usedtx=1 works with stereo Opus.
1410 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { 1409 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1411 EXPECT_TRUE(SetupEngine()); 1410 EXPECT_TRUE(SetupEngine());
1412 int channel_num = voe_.GetLastChannel(); 1411 int channel_num = voe_.GetLastChannel();
1413 std::vector<cricket::AudioCodec> codecs; 1412 cricket::AudioSendParameters parameters;
1414 codecs.push_back(kOpusCodec); 1413 parameters.codecs.push_back(kOpusCodec);
1415 codecs[0].params["usedtx"] = "1"; 1414 parameters.codecs[0].params["usedtx"] = "1";
1416 codecs[0].params["stereo"] = "1"; 1415 parameters.codecs[0].params["stereo"] = "1";
1417 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1416 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1418 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1417 EXPECT_TRUE(voe_.GetOpusDtx(channel_num));
1419 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1418 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1420 } 1419 }
1421 1420
1422 // Test that usedtx=1 does not work with non Opus. 1421 // Test that usedtx=1 does not work with non Opus.
1423 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { 1422 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1424 EXPECT_TRUE(SetupEngine()); 1423 EXPECT_TRUE(SetupEngine());
1425 int channel_num = voe_.GetLastChannel(); 1424 int channel_num = voe_.GetLastChannel();
1426 std::vector<cricket::AudioCodec> codecs; 1425 cricket::AudioSendParameters parameters;
1427 codecs.push_back(kIsacCodec); 1426 parameters.codecs.push_back(kIsacCodec);
1428 codecs[0].params["usedtx"] = "1"; 1427 parameters.codecs[0].params["usedtx"] = "1";
1429 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1428 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1430 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1429 EXPECT_FALSE(voe_.GetOpusDtx(channel_num));
1431 } 1430 }
1432 1431
1433 // Test that we can switch back and forth between Opus and ISAC with CN. 1432 // Test that we can switch back and forth between Opus and ISAC with CN.
1434 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1433 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1435 EXPECT_TRUE(SetupEngine()); 1434 EXPECT_TRUE(SetupEngine());
1436 int channel_num = voe_.GetLastChannel(); 1435 int channel_num = voe_.GetLastChannel();
1437 std::vector<cricket::AudioCodec> opus_codecs; 1436 cricket::AudioSendParameters opus_parameters;
1438 opus_codecs.push_back(kOpusCodec); 1437 opus_parameters.codecs.push_back(kOpusCodec);
1439 EXPECT_TRUE(channel_->SetSendCodecs(opus_codecs)); 1438 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1440 webrtc::CodecInst gcodec; 1439 webrtc::CodecInst gcodec;
1441 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1440 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1442 EXPECT_EQ(111, gcodec.pltype); 1441 EXPECT_EQ(111, gcodec.pltype);
1443 EXPECT_STREQ("opus", gcodec.plname); 1442 EXPECT_STREQ("opus", gcodec.plname);
1444 1443
1445 std::vector<cricket::AudioCodec> isac_codecs; 1444 cricket::AudioSendParameters isac_parameters;
1446 isac_codecs.push_back(kIsacCodec); 1445 isac_parameters.codecs.push_back(kIsacCodec);
1447 isac_codecs.push_back(kCn16000Codec); 1446 isac_parameters.codecs.push_back(kCn16000Codec);
1448 isac_codecs.push_back(kOpusCodec); 1447 isac_parameters.codecs.push_back(kOpusCodec);
1449 EXPECT_TRUE(channel_->SetSendCodecs(isac_codecs)); 1448 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters));
1450 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1449 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1451 EXPECT_EQ(103, gcodec.pltype); 1450 EXPECT_EQ(103, gcodec.pltype);
1452 EXPECT_STREQ("ISAC", gcodec.plname); 1451 EXPECT_STREQ("ISAC", gcodec.plname);
1453 1452
1454 EXPECT_TRUE(channel_->SetSendCodecs(opus_codecs)); 1453 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1455 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1454 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1456 EXPECT_EQ(111, gcodec.pltype); 1455 EXPECT_EQ(111, gcodec.pltype);
1457 EXPECT_STREQ("opus", gcodec.plname); 1456 EXPECT_STREQ("opus", gcodec.plname);
1458 } 1457 }
1459 1458
1460 // Test that we handle various ways of specifying bitrate. 1459 // Test that we handle various ways of specifying bitrate.
1461 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1460 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1462 EXPECT_TRUE(SetupEngine()); 1461 EXPECT_TRUE(SetupEngine());
1463 int channel_num = voe_.GetLastChannel(); 1462 int channel_num = voe_.GetLastChannel();
1464 std::vector<cricket::AudioCodec> codecs; 1463 cricket::AudioSendParameters parameters;
1465 codecs.push_back(kIsacCodec); // bitrate == 32000 1464 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1466 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1465 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1467 webrtc::CodecInst gcodec; 1466 webrtc::CodecInst gcodec;
1468 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1467 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1469 EXPECT_EQ(103, gcodec.pltype); 1468 EXPECT_EQ(103, gcodec.pltype);
1470 EXPECT_STREQ("ISAC", gcodec.plname); 1469 EXPECT_STREQ("ISAC", gcodec.plname);
1471 EXPECT_EQ(32000, gcodec.rate); 1470 EXPECT_EQ(32000, gcodec.rate);
1472 1471
1473 codecs[0].bitrate = 0; // bitrate == default 1472 parameters.codecs[0].bitrate = 0; // bitrate == default
1474 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1473 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1475 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1474 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1476 EXPECT_EQ(103, gcodec.pltype); 1475 EXPECT_EQ(103, gcodec.pltype);
1477 EXPECT_STREQ("ISAC", gcodec.plname); 1476 EXPECT_STREQ("ISAC", gcodec.plname);
1478 EXPECT_EQ(-1, gcodec.rate); 1477 EXPECT_EQ(-1, gcodec.rate);
1479 1478
1480 codecs[0].bitrate = 28000; // bitrate == 28000 1479 parameters.codecs[0].bitrate = 28000; // bitrate == 28000
1481 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1480 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1482 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1481 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1483 EXPECT_EQ(103, gcodec.pltype); 1482 EXPECT_EQ(103, gcodec.pltype);
1484 EXPECT_STREQ("ISAC", gcodec.plname); 1483 EXPECT_STREQ("ISAC", gcodec.plname);
1485 EXPECT_EQ(28000, gcodec.rate); 1484 EXPECT_EQ(28000, gcodec.rate);
1486 1485
1487 codecs[0] = kPcmuCodec; // bitrate == 64000 1486 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000
1488 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1487 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1489 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1488 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1490 EXPECT_EQ(0, gcodec.pltype); 1489 EXPECT_EQ(0, gcodec.pltype);
1491 EXPECT_STREQ("PCMU", gcodec.plname); 1490 EXPECT_STREQ("PCMU", gcodec.plname);
1492 EXPECT_EQ(64000, gcodec.rate); 1491 EXPECT_EQ(64000, gcodec.rate);
1493 1492
1494 codecs[0].bitrate = 0; // bitrate == default 1493 parameters.codecs[0].bitrate = 0; // bitrate == default
1495 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1494 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1496 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1495 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1497 EXPECT_EQ(0, gcodec.pltype); 1496 EXPECT_EQ(0, gcodec.pltype);
1498 EXPECT_STREQ("PCMU", gcodec.plname); 1497 EXPECT_STREQ("PCMU", gcodec.plname);
1499 EXPECT_EQ(64000, gcodec.rate); 1498 EXPECT_EQ(64000, gcodec.rate);
1500 1499
1501 codecs[0] = kOpusCodec; 1500 parameters.codecs[0] = kOpusCodec;
1502 codecs[0].bitrate = 0; // bitrate == default 1501 parameters.codecs[0].bitrate = 0; // bitrate == default
1503 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1502 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1504 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1503 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1505 EXPECT_EQ(111, gcodec.pltype); 1504 EXPECT_EQ(111, gcodec.pltype);
1506 EXPECT_STREQ("opus", gcodec.plname); 1505 EXPECT_STREQ("opus", gcodec.plname);
1507 EXPECT_EQ(32000, gcodec.rate); 1506 EXPECT_EQ(32000, gcodec.rate);
1508 } 1507 }
1509 1508
1510 // Test that we could set packet size specified in kCodecParamPTime. 1509 // Test that we could set packet size specified in kCodecParamPTime.
1511 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { 1510 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
1512 EXPECT_TRUE(SetupEngine()); 1511 EXPECT_TRUE(SetupEngine());
1513 int channel_num = voe_.GetLastChannel(); 1512 int channel_num = voe_.GetLastChannel();
1514 std::vector<cricket::AudioCodec> codecs; 1513 cricket::AudioSendParameters parameters;
1515 codecs.push_back(kOpusCodec); 1514 parameters.codecs.push_back(kOpusCodec);
1516 codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Value within range. 1515 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1517 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1516 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1518 webrtc::CodecInst gcodec; 1517 webrtc::CodecInst gcodec;
1519 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1518 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1520 EXPECT_EQ(1920, gcodec.pacsize); // Opus gets 40ms. 1519 EXPECT_EQ(1920, gcodec.pacsize); // Opus gets 40ms.
1521 1520
1522 codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Value below range. 1521 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
1523 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1522 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1524 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1523 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1525 EXPECT_EQ(480, gcodec.pacsize); // Opus gets 10ms. 1524 EXPECT_EQ(480, gcodec.pacsize); // Opus gets 10ms.
1526 1525
1527 codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Value beyond range. 1526 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range.
1528 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1527 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1529 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1528 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1530 EXPECT_EQ(2880, gcodec.pacsize); // Opus gets 60ms. 1529 EXPECT_EQ(2880, gcodec.pacsize); // Opus gets 60ms.
1531 1530
1532 codecs[0] = kIsacCodec; // Also try Isac, and with unsupported size. 1531 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size.
1533 codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Value within range. 1532 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1534 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1533 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1535 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1534 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1536 EXPECT_EQ(480, gcodec.pacsize); // Isac gets 30ms as the next smallest value. 1535 EXPECT_EQ(480, gcodec.pacsize); // Isac gets 30ms as the next smallest value.
1537 1536
1538 codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. 1537 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
1539 codecs[0].SetParam(cricket::kCodecParamPTime, 40); 1538 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
1540 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1539 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1541 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1540 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1542 EXPECT_EQ(640, gcodec.pacsize); // G722 gets 40ms @16kHz as defined in VoE. 1541 EXPECT_EQ(640, gcodec.pacsize); // G722 gets 40ms @16kHz as defined in VoE.
1543 } 1542 }
1544 1543
1545 // Test that we fail if no codecs are specified.
1546 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
1547 EXPECT_TRUE(SetupEngine());
1548 std::vector<cricket::AudioCodec> codecs;
1549 EXPECT_FALSE(channel_->SetSendCodecs(codecs));
1550 }
1551
1552 // Test that we can set send codecs even with telephone-event codec as the first 1544 // Test that we can set send codecs even with telephone-event codec as the first
1553 // one on the list. 1545 // one on the list.
1554 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1546 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
1555 EXPECT_TRUE(SetupEngine()); 1547 EXPECT_TRUE(SetupEngine());
1556 int channel_num = voe_.GetLastChannel(); 1548 int channel_num = voe_.GetLastChannel();
1557 std::vector<cricket::AudioCodec> codecs; 1549 cricket::AudioSendParameters parameters;
1558 codecs.push_back(kTelephoneEventCodec); 1550 parameters.codecs.push_back(kTelephoneEventCodec);
1559 codecs.push_back(kIsacCodec); 1551 parameters.codecs.push_back(kIsacCodec);
1560 codecs.push_back(kPcmuCodec); 1552 parameters.codecs.push_back(kPcmuCodec);
1561 codecs[0].id = 98; // DTMF 1553 parameters.codecs[0].id = 98; // DTMF
1562 codecs[1].id = 96; 1554 parameters.codecs[1].id = 96;
1563 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1555 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1564 webrtc::CodecInst gcodec; 1556 webrtc::CodecInst gcodec;
1565 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1557 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1566 EXPECT_EQ(96, gcodec.pltype); 1558 EXPECT_EQ(96, gcodec.pltype);
1567 EXPECT_STREQ("ISAC", gcodec.plname); 1559 EXPECT_STREQ("ISAC", gcodec.plname);
1568 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1560 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1569 } 1561 }
1570 1562
1571 // Test that we can set send codecs even with CN codec as the first 1563 // Test that we can set send codecs even with CN codec as the first
1572 // one on the list. 1564 // one on the list.
1573 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 1565 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
1574 EXPECT_TRUE(SetupEngine()); 1566 EXPECT_TRUE(SetupEngine());
1575 int channel_num = voe_.GetLastChannel(); 1567 int channel_num = voe_.GetLastChannel();
1576 std::vector<cricket::AudioCodec> codecs; 1568 cricket::AudioSendParameters parameters;
1577 codecs.push_back(kCn16000Codec); 1569 parameters.codecs.push_back(kCn16000Codec);
1578 codecs.push_back(kIsacCodec); 1570 parameters.codecs.push_back(kIsacCodec);
1579 codecs.push_back(kPcmuCodec); 1571 parameters.codecs.push_back(kPcmuCodec);
1580 codecs[0].id = 98; // wideband CN 1572 parameters.codecs[0].id = 98; // wideband CN
1581 codecs[1].id = 96; 1573 parameters.codecs[1].id = 96;
1582 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1574 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1583 webrtc::CodecInst gcodec; 1575 webrtc::CodecInst gcodec;
1584 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1576 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1585 EXPECT_EQ(96, gcodec.pltype); 1577 EXPECT_EQ(96, gcodec.pltype);
1586 EXPECT_STREQ("ISAC", gcodec.plname); 1578 EXPECT_STREQ("ISAC", gcodec.plname);
1587 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true)); 1579 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true));
1588 } 1580 }
1589 1581
1590 // Test that we set VAD and DTMF types correctly as caller. 1582 // Test that we set VAD and DTMF types correctly as caller.
1591 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 1583 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
1592 EXPECT_TRUE(SetupEngine()); 1584 EXPECT_TRUE(SetupEngine());
1593 int channel_num = voe_.GetLastChannel(); 1585 int channel_num = voe_.GetLastChannel();
1594 std::vector<cricket::AudioCodec> codecs; 1586 cricket::AudioSendParameters parameters;
1595 codecs.push_back(kIsacCodec); 1587 parameters.codecs.push_back(kIsacCodec);
1596 codecs.push_back(kPcmuCodec); 1588 parameters.codecs.push_back(kPcmuCodec);
1597 // TODO(juberti): cn 32000 1589 // TODO(juberti): cn 32000
1598 codecs.push_back(kCn16000Codec); 1590 parameters.codecs.push_back(kCn16000Codec);
1599 codecs.push_back(kCn8000Codec); 1591 parameters.codecs.push_back(kCn8000Codec);
1600 codecs.push_back(kTelephoneEventCodec); 1592 parameters.codecs.push_back(kTelephoneEventCodec);
1601 codecs.push_back(kRedCodec); 1593 parameters.codecs.push_back(kRedCodec);
1602 codecs[0].id = 96; 1594 parameters.codecs[0].id = 96;
1603 codecs[2].id = 97; // wideband CN 1595 parameters.codecs[2].id = 97; // wideband CN
1604 codecs[4].id = 98; // DTMF 1596 parameters.codecs[4].id = 98; // DTMF
1605 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1597 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1606 webrtc::CodecInst gcodec; 1598 webrtc::CodecInst gcodec;
1607 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1599 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1608 EXPECT_EQ(96, gcodec.pltype); 1600 EXPECT_EQ(96, gcodec.pltype);
1609 EXPECT_STREQ("ISAC", gcodec.plname); 1601 EXPECT_STREQ("ISAC", gcodec.plname);
1610 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1602 EXPECT_TRUE(voe_.GetVAD(channel_num));
1611 EXPECT_FALSE(voe_.GetRED(channel_num)); 1603 EXPECT_FALSE(voe_.GetRED(channel_num));
1612 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1604 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1613 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1605 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1614 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1606 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1615 } 1607 }
1616 1608
1617 // Test that we set VAD and DTMF types correctly as callee. 1609 // Test that we set VAD and DTMF types correctly as callee.
1618 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { 1610 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) {
1619 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 1611 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
1620 channel_ = engine_.CreateChannel(cricket::AudioOptions()); 1612 channel_ = engine_.CreateChannel(cricket::AudioOptions());
1621 EXPECT_TRUE(channel_ != nullptr); 1613 EXPECT_TRUE(channel_ != nullptr);
1622 1614
1623 int channel_num = voe_.GetLastChannel(); 1615 int channel_num = voe_.GetLastChannel();
1624 std::vector<cricket::AudioCodec> codecs; 1616 cricket::AudioSendParameters parameters;
1625 codecs.push_back(kIsacCodec); 1617 parameters.codecs.push_back(kIsacCodec);
1626 codecs.push_back(kPcmuCodec); 1618 parameters.codecs.push_back(kPcmuCodec);
1627 // TODO(juberti): cn 32000 1619 // TODO(juberti): cn 32000
1628 codecs.push_back(kCn16000Codec); 1620 parameters.codecs.push_back(kCn16000Codec);
1629 codecs.push_back(kCn8000Codec); 1621 parameters.codecs.push_back(kCn8000Codec);
1630 codecs.push_back(kTelephoneEventCodec); 1622 parameters.codecs.push_back(kTelephoneEventCodec);
1631 codecs.push_back(kRedCodec); 1623 parameters.codecs.push_back(kRedCodec);
1632 codecs[0].id = 96; 1624 parameters.codecs[0].id = 96;
1633 codecs[2].id = 97; // wideband CN 1625 parameters.codecs[2].id = 97; // wideband CN
1634 codecs[4].id = 98; // DTMF 1626 parameters.codecs[4].id = 98; // DTMF
1635 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1627 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1636 EXPECT_TRUE(channel_->AddSendStream( 1628 EXPECT_TRUE(channel_->AddSendStream(
1637 cricket::StreamParams::CreateLegacy(kSsrc1))); 1629 cricket::StreamParams::CreateLegacy(kSsrc1)));
1638 1630
1639 webrtc::CodecInst gcodec; 1631 webrtc::CodecInst gcodec;
1640 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1632 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1641 EXPECT_EQ(96, gcodec.pltype); 1633 EXPECT_EQ(96, gcodec.pltype);
1642 EXPECT_STREQ("ISAC", gcodec.plname); 1634 EXPECT_STREQ("ISAC", gcodec.plname);
1643 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1635 EXPECT_TRUE(voe_.GetVAD(channel_num));
1644 EXPECT_FALSE(voe_.GetRED(channel_num)); 1636 EXPECT_FALSE(voe_.GetRED(channel_num));
1645 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1637 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1646 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1638 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1647 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1639 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1648 } 1640 }
1649 1641
1650 // Test that we only apply VAD if we have a CN codec that matches the 1642 // Test that we only apply VAD if we have a CN codec that matches the
1651 // send codec clockrate. 1643 // send codec clockrate.
1652 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 1644 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
1653 EXPECT_TRUE(SetupEngine()); 1645 EXPECT_TRUE(SetupEngine());
1654 int channel_num = voe_.GetLastChannel(); 1646 int channel_num = voe_.GetLastChannel();
1655 std::vector<cricket::AudioCodec> codecs; 1647 cricket::AudioSendParameters parameters;
1656 // Set ISAC(16K) and CN(16K). VAD should be activated. 1648 // Set ISAC(16K) and CN(16K). VAD should be activated.
1657 codecs.push_back(kIsacCodec); 1649 parameters.codecs.push_back(kIsacCodec);
1658 codecs.push_back(kCn16000Codec); 1650 parameters.codecs.push_back(kCn16000Codec);
1659 codecs[1].id = 97; 1651 parameters.codecs[1].id = 97;
1660 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1652 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1661 webrtc::CodecInst gcodec; 1653 webrtc::CodecInst gcodec;
1662 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1654 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1663 EXPECT_STREQ("ISAC", gcodec.plname); 1655 EXPECT_STREQ("ISAC", gcodec.plname);
1664 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1656 EXPECT_TRUE(voe_.GetVAD(channel_num));
1665 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1657 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1666 // Set PCMU(8K) and CN(16K). VAD should not be activated. 1658 // Set PCMU(8K) and CN(16K). VAD should not be activated.
1667 codecs[0] = kPcmuCodec; 1659 parameters.codecs[0] = kPcmuCodec;
1668 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1660 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1669 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1661 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1670 EXPECT_STREQ("PCMU", gcodec.plname); 1662 EXPECT_STREQ("PCMU", gcodec.plname);
1671 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1663 EXPECT_FALSE(voe_.GetVAD(channel_num));
1672 // Set PCMU(8K) and CN(8K). VAD should be activated. 1664 // Set PCMU(8K) and CN(8K). VAD should be activated.
1673 codecs[1] = kCn8000Codec; 1665 parameters.codecs[1] = kCn8000Codec;
1674 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1666 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1675 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1667 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1676 EXPECT_STREQ("PCMU", gcodec.plname); 1668 EXPECT_STREQ("PCMU", gcodec.plname);
1677 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1669 EXPECT_TRUE(voe_.GetVAD(channel_num));
1678 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1670 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1679 // Set ISAC(16K) and CN(8K). VAD should not be activated. 1671 // Set ISAC(16K) and CN(8K). VAD should not be activated.
1680 codecs[0] = kIsacCodec; 1672 parameters.codecs[0] = kIsacCodec;
1681 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1673 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1682 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1674 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1683 EXPECT_STREQ("ISAC", gcodec.plname); 1675 EXPECT_STREQ("ISAC", gcodec.plname);
1684 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1676 EXPECT_FALSE(voe_.GetVAD(channel_num));
1685 } 1677 }
1686 1678
1687 // Test that we perform case-insensitive matching of codec names. 1679 // Test that we perform case-insensitive matching of codec names.
1688 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 1680 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
1689 EXPECT_TRUE(SetupEngine()); 1681 EXPECT_TRUE(SetupEngine());
1690 int channel_num = voe_.GetLastChannel(); 1682 int channel_num = voe_.GetLastChannel();
1691 std::vector<cricket::AudioCodec> codecs; 1683 cricket::AudioSendParameters parameters;
1692 codecs.push_back(kIsacCodec); 1684 parameters.codecs.push_back(kIsacCodec);
1693 codecs.push_back(kPcmuCodec); 1685 parameters.codecs.push_back(kPcmuCodec);
1694 codecs.push_back(kCn16000Codec); 1686 parameters.codecs.push_back(kCn16000Codec);
1695 codecs.push_back(kCn8000Codec); 1687 parameters.codecs.push_back(kCn8000Codec);
1696 codecs.push_back(kTelephoneEventCodec); 1688 parameters.codecs.push_back(kTelephoneEventCodec);
1697 codecs.push_back(kRedCodec); 1689 parameters.codecs.push_back(kRedCodec);
1698 codecs[0].name = "iSaC"; 1690 parameters.codecs[0].name = "iSaC";
1699 codecs[0].id = 96; 1691 parameters.codecs[0].id = 96;
1700 codecs[2].id = 97; // wideband CN 1692 parameters.codecs[2].id = 97; // wideband CN
1701 codecs[4].id = 98; // DTMF 1693 parameters.codecs[4].id = 98; // DTMF
1702 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1694 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1703 webrtc::CodecInst gcodec; 1695 webrtc::CodecInst gcodec;
1704 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1696 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1705 EXPECT_EQ(96, gcodec.pltype); 1697 EXPECT_EQ(96, gcodec.pltype);
1706 EXPECT_STREQ("ISAC", gcodec.plname); 1698 EXPECT_STREQ("ISAC", gcodec.plname);
1707 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1699 EXPECT_TRUE(voe_.GetVAD(channel_num));
1708 EXPECT_FALSE(voe_.GetRED(channel_num)); 1700 EXPECT_FALSE(voe_.GetRED(channel_num));
1709 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1701 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1710 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1702 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1711 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num)); 1703 EXPECT_EQ(98, voe_.GetSendTelephoneEventPayloadType(channel_num));
1712 } 1704 }
1713 1705
1714 // Test that we set up RED correctly as caller. 1706 // Test that we set up RED correctly as caller.
1715 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCaller) { 1707 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCaller) {
1716 EXPECT_TRUE(SetupEngine()); 1708 EXPECT_TRUE(SetupEngine());
1717 int channel_num = voe_.GetLastChannel(); 1709 int channel_num = voe_.GetLastChannel();
1718 std::vector<cricket::AudioCodec> codecs; 1710 cricket::AudioSendParameters parameters;
1719 codecs.push_back(kRedCodec); 1711 parameters.codecs.push_back(kRedCodec);
1720 codecs.push_back(kIsacCodec); 1712 parameters.codecs.push_back(kIsacCodec);
1721 codecs.push_back(kPcmuCodec); 1713 parameters.codecs.push_back(kPcmuCodec);
1722 codecs[0].id = 127; 1714 parameters.codecs[0].id = 127;
1723 codecs[0].params[""] = "96/96"; 1715 parameters.codecs[0].params[""] = "96/96";
1724 codecs[1].id = 96; 1716 parameters.codecs[1].id = 96;
1725 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1717 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1726 webrtc::CodecInst gcodec; 1718 webrtc::CodecInst gcodec;
1727 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1719 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1728 EXPECT_EQ(96, gcodec.pltype); 1720 EXPECT_EQ(96, gcodec.pltype);
1729 EXPECT_STREQ("ISAC", gcodec.plname); 1721 EXPECT_STREQ("ISAC", gcodec.plname);
1730 EXPECT_TRUE(voe_.GetRED(channel_num)); 1722 EXPECT_TRUE(voe_.GetRED(channel_num));
1731 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); 1723 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num));
1732 } 1724 }
1733 1725
1734 // Test that we set up RED correctly as callee. 1726 // Test that we set up RED correctly as callee.
1735 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCallee) { 1727 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCallee) {
1736 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 1728 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
1737 channel_ = engine_.CreateChannel(cricket::AudioOptions()); 1729 channel_ = engine_.CreateChannel(cricket::AudioOptions());
1738 EXPECT_TRUE(channel_ != nullptr); 1730 EXPECT_TRUE(channel_ != nullptr);
1739 1731
1740 int channel_num = voe_.GetLastChannel(); 1732 int channel_num = voe_.GetLastChannel();
1741 std::vector<cricket::AudioCodec> codecs; 1733 cricket::AudioSendParameters parameters;
1742 codecs.push_back(kRedCodec); 1734 parameters.codecs.push_back(kRedCodec);
1743 codecs.push_back(kIsacCodec); 1735 parameters.codecs.push_back(kIsacCodec);
1744 codecs.push_back(kPcmuCodec); 1736 parameters.codecs.push_back(kPcmuCodec);
1745 codecs[0].id = 127; 1737 parameters.codecs[0].id = 127;
1746 codecs[0].params[""] = "96/96"; 1738 parameters.codecs[0].params[""] = "96/96";
1747 codecs[1].id = 96; 1739 parameters.codecs[1].id = 96;
1748 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1740 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1749 EXPECT_TRUE(channel_->AddSendStream( 1741 EXPECT_TRUE(channel_->AddSendStream(
1750 cricket::StreamParams::CreateLegacy(kSsrc1))); 1742 cricket::StreamParams::CreateLegacy(kSsrc1)));
1751 webrtc::CodecInst gcodec; 1743 webrtc::CodecInst gcodec;
1752 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1744 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1753 EXPECT_EQ(96, gcodec.pltype); 1745 EXPECT_EQ(96, gcodec.pltype);
1754 EXPECT_STREQ("ISAC", gcodec.plname); 1746 EXPECT_STREQ("ISAC", gcodec.plname);
1755 EXPECT_TRUE(voe_.GetRED(channel_num)); 1747 EXPECT_TRUE(voe_.GetRED(channel_num));
1756 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); 1748 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num));
1757 } 1749 }
1758 1750
1759 // Test that we set up RED correctly if params are omitted. 1751 // Test that we set up RED correctly if params are omitted.
1760 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDNoParams) { 1752 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDNoParams) {
1761 EXPECT_TRUE(SetupEngine()); 1753 EXPECT_TRUE(SetupEngine());
1762 int channel_num = voe_.GetLastChannel(); 1754 int channel_num = voe_.GetLastChannel();
1763 std::vector<cricket::AudioCodec> codecs; 1755 cricket::AudioSendParameters parameters;
1764 codecs.push_back(kRedCodec); 1756 parameters.codecs.push_back(kRedCodec);
1765 codecs.push_back(kIsacCodec); 1757 parameters.codecs.push_back(kIsacCodec);
1766 codecs.push_back(kPcmuCodec); 1758 parameters.codecs.push_back(kPcmuCodec);
1767 codecs[0].id = 127; 1759 parameters.codecs[0].id = 127;
1768 codecs[1].id = 96; 1760 parameters.codecs[1].id = 96;
1769 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1761 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1770 webrtc::CodecInst gcodec; 1762 webrtc::CodecInst gcodec;
1771 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1763 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1772 EXPECT_EQ(96, gcodec.pltype); 1764 EXPECT_EQ(96, gcodec.pltype);
1773 EXPECT_STREQ("ISAC", gcodec.plname); 1765 EXPECT_STREQ("ISAC", gcodec.plname);
1774 EXPECT_TRUE(voe_.GetRED(channel_num)); 1766 EXPECT_TRUE(voe_.GetRED(channel_num));
1775 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); 1767 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num));
1776 } 1768 }
1777 1769
1778 // Test that we ignore RED if the parameters aren't named the way we expect. 1770 // Test that we ignore RED if the parameters aren't named the way we expect.
1779 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED1) { 1771 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED1) {
1780 EXPECT_TRUE(SetupEngine()); 1772 EXPECT_TRUE(SetupEngine());
1781 int channel_num = voe_.GetLastChannel(); 1773 int channel_num = voe_.GetLastChannel();
1782 std::vector<cricket::AudioCodec> codecs; 1774 cricket::AudioSendParameters parameters;
1783 codecs.push_back(kRedCodec); 1775 parameters.codecs.push_back(kRedCodec);
1784 codecs.push_back(kIsacCodec); 1776 parameters.codecs.push_back(kIsacCodec);
1785 codecs.push_back(kPcmuCodec); 1777 parameters.codecs.push_back(kPcmuCodec);
1786 codecs[0].id = 127; 1778 parameters.codecs[0].id = 127;
1787 codecs[0].params["ABC"] = "96/96"; 1779 parameters.codecs[0].params["ABC"] = "96/96";
1788 codecs[1].id = 96; 1780 parameters.codecs[1].id = 96;
1789 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1781 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1790 webrtc::CodecInst gcodec; 1782 webrtc::CodecInst gcodec;
1791 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1783 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1792 EXPECT_EQ(96, gcodec.pltype); 1784 EXPECT_EQ(96, gcodec.pltype);
1793 EXPECT_STREQ("ISAC", gcodec.plname); 1785 EXPECT_STREQ("ISAC", gcodec.plname);
1794 EXPECT_FALSE(voe_.GetRED(channel_num)); 1786 EXPECT_FALSE(voe_.GetRED(channel_num));
1795 } 1787 }
1796 1788
1797 // Test that we ignore RED if it uses different primary/secondary encoding. 1789 // Test that we ignore RED if it uses different primary/secondary encoding.
1798 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED2) { 1790 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED2) {
1799 EXPECT_TRUE(SetupEngine()); 1791 EXPECT_TRUE(SetupEngine());
1800 int channel_num = voe_.GetLastChannel(); 1792 int channel_num = voe_.GetLastChannel();
1801 std::vector<cricket::AudioCodec> codecs; 1793 cricket::AudioSendParameters parameters;
1802 codecs.push_back(kRedCodec); 1794 parameters.codecs.push_back(kRedCodec);
1803 codecs.push_back(kIsacCodec); 1795 parameters.codecs.push_back(kIsacCodec);
1804 codecs.push_back(kPcmuCodec); 1796 parameters.codecs.push_back(kPcmuCodec);
1805 codecs[0].id = 127; 1797 parameters.codecs[0].id = 127;
1806 codecs[0].params[""] = "96/0"; 1798 parameters.codecs[0].params[""] = "96/0";
1807 codecs[1].id = 96; 1799 parameters.codecs[1].id = 96;
1808 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1800 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1809 webrtc::CodecInst gcodec; 1801 webrtc::CodecInst gcodec;
1810 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1802 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1811 EXPECT_EQ(96, gcodec.pltype); 1803 EXPECT_EQ(96, gcodec.pltype);
1812 EXPECT_STREQ("ISAC", gcodec.plname); 1804 EXPECT_STREQ("ISAC", gcodec.plname);
1813 EXPECT_FALSE(voe_.GetRED(channel_num)); 1805 EXPECT_FALSE(voe_.GetRED(channel_num));
1814 } 1806 }
1815 1807
1816 // Test that we ignore RED if it uses more than 2 encodings. 1808 // Test that we ignore RED if it uses more than 2 encodings.
1817 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED3) { 1809 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED3) {
1818 EXPECT_TRUE(SetupEngine()); 1810 EXPECT_TRUE(SetupEngine());
1819 int channel_num = voe_.GetLastChannel(); 1811 int channel_num = voe_.GetLastChannel();
1820 std::vector<cricket::AudioCodec> codecs; 1812 cricket::AudioSendParameters parameters;
1821 codecs.push_back(kRedCodec); 1813 parameters.codecs.push_back(kRedCodec);
1822 codecs.push_back(kIsacCodec); 1814 parameters.codecs.push_back(kIsacCodec);
1823 codecs.push_back(kPcmuCodec); 1815 parameters.codecs.push_back(kPcmuCodec);
1824 codecs[0].id = 127; 1816 parameters.codecs[0].id = 127;
1825 codecs[0].params[""] = "96/96/96"; 1817 parameters.codecs[0].params[""] = "96/96/96";
1826 codecs[1].id = 96; 1818 parameters.codecs[1].id = 96;
1827 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1819 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1828 webrtc::CodecInst gcodec; 1820 webrtc::CodecInst gcodec;
1829 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1821 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1830 EXPECT_EQ(96, gcodec.pltype); 1822 EXPECT_EQ(96, gcodec.pltype);
1831 EXPECT_STREQ("ISAC", gcodec.plname); 1823 EXPECT_STREQ("ISAC", gcodec.plname);
1832 EXPECT_FALSE(voe_.GetRED(channel_num)); 1824 EXPECT_FALSE(voe_.GetRED(channel_num));
1833 } 1825 }
1834 1826
1835 // Test that we ignore RED if it has bogus codec ids. 1827 // Test that we ignore RED if it has bogus codec ids.
1836 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED4) { 1828 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED4) {
1837 EXPECT_TRUE(SetupEngine()); 1829 EXPECT_TRUE(SetupEngine());
1838 int channel_num = voe_.GetLastChannel(); 1830 int channel_num = voe_.GetLastChannel();
1839 std::vector<cricket::AudioCodec> codecs; 1831 cricket::AudioSendParameters parameters;
1840 codecs.push_back(kRedCodec); 1832 parameters.codecs.push_back(kRedCodec);
1841 codecs.push_back(kIsacCodec); 1833 parameters.codecs.push_back(kIsacCodec);
1842 codecs.push_back(kPcmuCodec); 1834 parameters.codecs.push_back(kPcmuCodec);
1843 codecs[0].id = 127; 1835 parameters.codecs[0].id = 127;
1844 codecs[0].params[""] = "ABC/ABC"; 1836 parameters.codecs[0].params[""] = "ABC/ABC";
1845 codecs[1].id = 96; 1837 parameters.codecs[1].id = 96;
1846 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1838 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1847 webrtc::CodecInst gcodec; 1839 webrtc::CodecInst gcodec;
1848 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1840 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1849 EXPECT_EQ(96, gcodec.pltype); 1841 EXPECT_EQ(96, gcodec.pltype);
1850 EXPECT_STREQ("ISAC", gcodec.plname); 1842 EXPECT_STREQ("ISAC", gcodec.plname);
1851 EXPECT_FALSE(voe_.GetRED(channel_num)); 1843 EXPECT_FALSE(voe_.GetRED(channel_num));
1852 } 1844 }
1853 1845
1854 // Test that we ignore RED if it refers to a codec that is not present. 1846 // Test that we ignore RED if it refers to a codec that is not present.
1855 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED5) { 1847 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED5) {
1856 EXPECT_TRUE(SetupEngine()); 1848 EXPECT_TRUE(SetupEngine());
1857 int channel_num = voe_.GetLastChannel(); 1849 int channel_num = voe_.GetLastChannel();
1858 std::vector<cricket::AudioCodec> codecs; 1850 cricket::AudioSendParameters parameters;
1859 codecs.push_back(kRedCodec); 1851 parameters.codecs.push_back(kRedCodec);
1860 codecs.push_back(kIsacCodec); 1852 parameters.codecs.push_back(kIsacCodec);
1861 codecs.push_back(kPcmuCodec); 1853 parameters.codecs.push_back(kPcmuCodec);
1862 codecs[0].id = 127; 1854 parameters.codecs[0].id = 127;
1863 codecs[0].params[""] = "97/97"; 1855 parameters.codecs[0].params[""] = "97/97";
1864 codecs[1].id = 96; 1856 parameters.codecs[1].id = 96;
1865 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1857 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1866 webrtc::CodecInst gcodec; 1858 webrtc::CodecInst gcodec;
1867 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1859 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1868 EXPECT_EQ(96, gcodec.pltype); 1860 EXPECT_EQ(96, gcodec.pltype);
1869 EXPECT_STREQ("ISAC", gcodec.plname); 1861 EXPECT_STREQ("ISAC", gcodec.plname);
1870 EXPECT_FALSE(voe_.GetRED(channel_num)); 1862 EXPECT_FALSE(voe_.GetRED(channel_num));
1871 } 1863 }
1872 1864
1873 // Test support for audio level header extension. 1865 // Test support for audio level header extension.
1874 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { 1866 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) {
1875 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); 1867 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension);
1876 } 1868 }
1877 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) { 1869 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) {
1878 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); 1870 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension);
1879 } 1871 }
1880 1872
1881 // Test support for absolute send time header extension. 1873 // Test support for absolute send time header extension.
1882 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { 1874 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) {
1883 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 1875 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1884 } 1876 }
1885 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) { 1877 TEST_F(WebRtcVoiceEngineTestFake, RecvAbsoluteSendTimeHeaderExtensions) {
1886 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension); 1878 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension);
1887 } 1879 }
1888 1880
1889 // Test that we can create a channel and start sending/playing out on it. 1881 // Test that we can create a channel and start sending/playing out on it.
1890 TEST_F(WebRtcVoiceEngineTestFake, SendAndPlayout) { 1882 TEST_F(WebRtcVoiceEngineTestFake, SendAndPlayout) {
1891 EXPECT_TRUE(SetupEngine()); 1883 EXPECT_TRUE(SetupEngine());
1892 int channel_num = voe_.GetLastChannel(); 1884 int channel_num = voe_.GetLastChannel();
1893 std::vector<cricket::AudioCodec> codecs; 1885 cricket::AudioSendParameters parameters;
1894 codecs.push_back(kPcmuCodec); 1886 parameters.codecs.push_back(kPcmuCodec);
1895 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1887 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1896 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 1888 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
1897 EXPECT_TRUE(voe_.GetSend(channel_num)); 1889 EXPECT_TRUE(voe_.GetSend(channel_num));
1898 EXPECT_TRUE(channel_->SetPlayout(true)); 1890 EXPECT_TRUE(channel_->SetPlayout(true));
1899 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 1891 EXPECT_TRUE(voe_.GetPlayout(channel_num));
1900 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 1892 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
1901 EXPECT_FALSE(voe_.GetSend(channel_num)); 1893 EXPECT_FALSE(voe_.GetSend(channel_num));
1902 EXPECT_TRUE(channel_->SetPlayout(false)); 1894 EXPECT_TRUE(channel_->SetPlayout(false));
1903 EXPECT_FALSE(voe_.GetPlayout(channel_num)); 1895 EXPECT_FALSE(voe_.GetPlayout(channel_num));
1904 } 1896 }
1905 1897
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1942 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithMultipleSendStreams) { 1934 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithMultipleSendStreams) {
1943 SetupForMultiSendStream(); 1935 SetupForMultiSendStream();
1944 1936
1945 static const uint32 kSsrcs4[] = {1, 2, 3, 4}; 1937 static const uint32 kSsrcs4[] = {1, 2, 3, 4};
1946 // Create send streams. 1938 // Create send streams.
1947 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 1939 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
1948 EXPECT_TRUE(channel_->AddSendStream( 1940 EXPECT_TRUE(channel_->AddSendStream(
1949 cricket::StreamParams::CreateLegacy(kSsrcs4[i]))); 1941 cricket::StreamParams::CreateLegacy(kSsrcs4[i])));
1950 } 1942 }
1951 1943
1952 std::vector<cricket::AudioCodec> codecs; 1944 cricket::AudioSendParameters parameters;
1953 // Set ISAC(16K) and CN(16K). VAD should be activated. 1945 // Set ISAC(16K) and CN(16K). VAD should be activated.
1954 codecs.push_back(kIsacCodec); 1946 parameters.codecs.push_back(kIsacCodec);
1955 codecs.push_back(kCn16000Codec); 1947 parameters.codecs.push_back(kCn16000Codec);
1956 codecs[1].id = 97; 1948 parameters.codecs[1].id = 97;
1957 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1949 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1958 1950
1959 // Verify ISAC and VAD are corrected configured on all send channels. 1951 // Verify ISAC and VAD are corrected configured on all send channels.
1960 webrtc::CodecInst gcodec; 1952 webrtc::CodecInst gcodec;
1961 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 1953 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
1962 int channel_num = voe_.GetChannelFromLocalSsrc(kSsrcs4[i]); 1954 int channel_num = voe_.GetChannelFromLocalSsrc(kSsrcs4[i]);
1963 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1955 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1964 EXPECT_STREQ("ISAC", gcodec.plname); 1956 EXPECT_STREQ("ISAC", gcodec.plname);
1965 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1957 EXPECT_TRUE(voe_.GetVAD(channel_num));
1966 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1958 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true));
1967 } 1959 }
1968 1960
1969 // Change to PCMU(8K) and CN(16K). VAD should not be activated. 1961 // Change to PCMU(8K) and CN(16K). VAD should not be activated.
1970 codecs[0] = kPcmuCodec; 1962 parameters.codecs[0] = kPcmuCodec;
1971 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1963 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1972 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 1964 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
1973 int channel_num = voe_.GetChannelFromLocalSsrc(kSsrcs4[i]); 1965 int channel_num = voe_.GetChannelFromLocalSsrc(kSsrcs4[i]);
1974 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1966 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1975 EXPECT_STREQ("PCMU", gcodec.plname); 1967 EXPECT_STREQ("PCMU", gcodec.plname);
1976 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1968 EXPECT_FALSE(voe_.GetVAD(channel_num));
1977 } 1969 }
1978 } 1970 }
1979 1971
1980 // Test we can SetSend on all send streams correctly. 1972 // Test we can SetSend on all send streams correctly.
1981 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { 1973 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 // Create send streams. 2007 // Create send streams.
2016 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 2008 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
2017 EXPECT_TRUE(channel_->AddSendStream( 2009 EXPECT_TRUE(channel_->AddSendStream(
2018 cricket::StreamParams::CreateLegacy(kSsrcs4[i]))); 2010 cricket::StreamParams::CreateLegacy(kSsrcs4[i])));
2019 } 2011 }
2020 // Create a receive stream to check that none of the send streams end up in 2012 // Create a receive stream to check that none of the send streams end up in
2021 // the receive stream stats. 2013 // the receive stream stats.
2022 EXPECT_TRUE(channel_->AddRecvStream( 2014 EXPECT_TRUE(channel_->AddRecvStream(
2023 cricket::StreamParams::CreateLegacy(kSsrc2))); 2015 cricket::StreamParams::CreateLegacy(kSsrc2)));
2024 // We need send codec to be set to get all stats. 2016 // We need send codec to be set to get all stats.
2025 std::vector<cricket::AudioCodec> codecs; 2017 cricket::AudioSendParameters send_parameters;
2026 codecs.push_back(kPcmuCodec); 2018 cricket::AudioRecvParameters recv_parameters;
2027 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2019 send_parameters.codecs.push_back(kPcmuCodec);
2028 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2020 recv_parameters.codecs.push_back(kPcmuCodec);
2021 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
2022 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
2029 2023
2030 cricket::VoiceMediaInfo info; 2024 cricket::VoiceMediaInfo info;
2031 EXPECT_EQ(true, channel_->GetStats(&info)); 2025 EXPECT_EQ(true, channel_->GetStats(&info));
2032 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size()); 2026 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size());
2033 2027
2034 // Verify the statistic information is correct. 2028 // Verify the statistic information is correct.
2035 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 2029 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
2036 EXPECT_EQ(kSsrcs4[i], info.senders[i].ssrc()); 2030 EXPECT_EQ(kSsrcs4[i], info.senders[i].ssrc());
2037 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name); 2031 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name);
2038 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent); 2032 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent);
(...skipping 30 matching lines...) Expand all
2069 info.receivers[0].preemptive_expand_rate); 2063 info.receivers[0].preemptive_expand_rate);
2070 } 2064 }
2071 2065
2072 // Test that we can add and remove receive streams, and do proper send/playout. 2066 // Test that we can add and remove receive streams, and do proper send/playout.
2073 // We can receive on multiple streams while sending one stream. 2067 // We can receive on multiple streams while sending one stream.
2074 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { 2068 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
2075 EXPECT_TRUE(SetupEngine()); 2069 EXPECT_TRUE(SetupEngine());
2076 int channel_num1 = voe_.GetLastChannel(); 2070 int channel_num1 = voe_.GetLastChannel();
2077 2071
2078 // Start playout on the default channel. 2072 // Start playout on the default channel.
2079 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2073 cricket::AudioSendParameters parameters;
2074 parameters.options = options_conference_;
2075 parameters.codecs.push_back(kPcmuCodec);
2076 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2080 EXPECT_TRUE(channel_->SetPlayout(true)); 2077 EXPECT_TRUE(channel_->SetPlayout(true));
2081 EXPECT_TRUE(voe_.GetPlayout(channel_num1)); 2078 EXPECT_TRUE(voe_.GetPlayout(channel_num1));
2082 2079
2083 // Adding another stream should disable playout on the default channel. 2080 // Adding another stream should disable playout on the default channel.
2084 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2081 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2085 int channel_num2 = voe_.GetLastChannel(); 2082 int channel_num2 = voe_.GetLastChannel();
2086 std::vector<cricket::AudioCodec> codecs;
2087 codecs.push_back(kPcmuCodec);
2088 EXPECT_TRUE(channel_->SetSendCodecs(codecs));
2089 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2083 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2090 EXPECT_TRUE(voe_.GetSend(channel_num1)); 2084 EXPECT_TRUE(voe_.GetSend(channel_num1));
2091 EXPECT_FALSE(voe_.GetSend(channel_num2)); 2085 EXPECT_FALSE(voe_.GetSend(channel_num2));
2092 2086
2093 // Make sure only the new channel is played out. 2087 // Make sure only the new channel is played out.
2094 EXPECT_FALSE(voe_.GetPlayout(channel_num1)); 2088 EXPECT_FALSE(voe_.GetPlayout(channel_num1));
2095 EXPECT_TRUE(voe_.GetPlayout(channel_num2)); 2089 EXPECT_TRUE(voe_.GetPlayout(channel_num2));
2096 2090
2097 // Adding yet another stream should have stream 2 and 3 enabled for playout. 2091 // Adding yet another stream should have stream 2 and 3 enabled for playout.
2098 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2092 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
(...skipping 26 matching lines...) Expand all
2125 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2119 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2126 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2120 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2127 2121
2128 EXPECT_TRUE(voe_.GetPlayout(channel_num1)); 2122 EXPECT_TRUE(voe_.GetPlayout(channel_num1));
2129 } 2123 }
2130 2124
2131 // Test that we can set the devices to use. 2125 // Test that we can set the devices to use.
2132 TEST_F(WebRtcVoiceEngineTestFake, SetDevices) { 2126 TEST_F(WebRtcVoiceEngineTestFake, SetDevices) {
2133 EXPECT_TRUE(SetupEngine()); 2127 EXPECT_TRUE(SetupEngine());
2134 int channel_num = voe_.GetLastChannel(); 2128 int channel_num = voe_.GetLastChannel();
2135 std::vector<cricket::AudioCodec> codecs; 2129 cricket::AudioSendParameters parameters;
2136 codecs.push_back(kPcmuCodec); 2130 parameters.codecs.push_back(kPcmuCodec);
2137 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2131 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2138 2132
2139 cricket::Device default_dev(cricket::kFakeDefaultDeviceName, 2133 cricket::Device default_dev(cricket::kFakeDefaultDeviceName,
2140 cricket::kFakeDefaultDeviceId); 2134 cricket::kFakeDefaultDeviceId);
2141 cricket::Device dev(cricket::kFakeDeviceName, 2135 cricket::Device dev(cricket::kFakeDeviceName,
2142 cricket::kFakeDeviceId); 2136 cricket::kFakeDeviceId);
2143 2137
2144 // Test SetDevices() while not sending or playing. 2138 // Test SetDevices() while not sending or playing.
2145 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev)); 2139 EXPECT_TRUE(engine_.SetDevices(&default_dev, &default_dev));
2146 2140
2147 // Test SetDevices() while sending and playing. 2141 // Test SetDevices() while sending and playing.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 EXPECT_TRUE(voe_.GetRecordingMicrophone()); 2173 EXPECT_TRUE(voe_.GetRecordingMicrophone());
2180 EXPECT_TRUE(voe_.GetSend(channel_num)); 2174 EXPECT_TRUE(voe_.GetSend(channel_num));
2181 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2175 EXPECT_TRUE(voe_.GetPlayout(channel_num));
2182 } 2176 }
2183 2177
2184 // Test that we can set the devices to use even if we failed to 2178 // Test that we can set the devices to use even if we failed to
2185 // open the initial ones. 2179 // open the initial ones.
2186 TEST_F(WebRtcVoiceEngineTestFake, SetDevicesWithInitiallyBadDevices) { 2180 TEST_F(WebRtcVoiceEngineTestFake, SetDevicesWithInitiallyBadDevices) {
2187 EXPECT_TRUE(SetupEngine()); 2181 EXPECT_TRUE(SetupEngine());
2188 int channel_num = voe_.GetLastChannel(); 2182 int channel_num = voe_.GetLastChannel();
2189 std::vector<cricket::AudioCodec> codecs; 2183 cricket::AudioSendParameters parameters;
2190 codecs.push_back(kPcmuCodec); 2184 parameters.codecs.push_back(kPcmuCodec);
2191 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2185 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2192 2186
2193 cricket::Device default_dev(cricket::kFakeDefaultDeviceName, 2187 cricket::Device default_dev(cricket::kFakeDefaultDeviceName,
2194 cricket::kFakeDefaultDeviceId); 2188 cricket::kFakeDefaultDeviceId);
2195 cricket::Device dev(cricket::kFakeDeviceName, 2189 cricket::Device dev(cricket::kFakeDeviceName,
2196 cricket::kFakeDeviceId); 2190 cricket::kFakeDeviceId);
2197 2191
2198 // Test that failure to open devices selected before starting 2192 // Test that failure to open devices selected before starting
2199 // send/play does not prevent opening newly selected ones after that. 2193 // send/play does not prevent opening newly selected ones after that.
2200 voe_.set_fail_start_recording_microphone(true); 2194 voe_.set_fail_start_recording_microphone(true);
2201 voe_.set_playout_fail_channel(channel_num); 2195 voe_.set_playout_fail_channel(channel_num);
(...skipping 17 matching lines...) Expand all
2219 EXPECT_TRUE(voe_.GetRecordingMicrophone()); 2213 EXPECT_TRUE(voe_.GetRecordingMicrophone());
2220 EXPECT_TRUE(voe_.GetSend(channel_num)); 2214 EXPECT_TRUE(voe_.GetSend(channel_num));
2221 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2215 EXPECT_TRUE(voe_.GetPlayout(channel_num));
2222 } 2216 }
2223 2217
2224 // Test that we can create a channel configured for multi-point conferences, 2218 // Test that we can create a channel configured for multi-point conferences,
2225 // and start sending/playing out on it. 2219 // and start sending/playing out on it.
2226 TEST_F(WebRtcVoiceEngineTestFake, ConferenceSendAndPlayout) { 2220 TEST_F(WebRtcVoiceEngineTestFake, ConferenceSendAndPlayout) {
2227 EXPECT_TRUE(SetupEngine()); 2221 EXPECT_TRUE(SetupEngine());
2228 int channel_num = voe_.GetLastChannel(); 2222 int channel_num = voe_.GetLastChannel();
2229 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2223 cricket::AudioSendParameters parameters;
2230 std::vector<cricket::AudioCodec> codecs; 2224 parameters.options = options_conference_;
2231 codecs.push_back(kPcmuCodec); 2225 parameters.codecs.push_back(kPcmuCodec);
2232 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2226 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2233 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2227 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2234 EXPECT_TRUE(voe_.GetSend(channel_num)); 2228 EXPECT_TRUE(voe_.GetSend(channel_num));
2235 } 2229 }
2236 2230
2237 // Test that we can create a channel configured for Codian bridges, 2231 // Test that we can create a channel configured for Codian bridges,
2238 // and start sending/playing out on it. 2232 // and start sending/playing out on it.
2239 TEST_F(WebRtcVoiceEngineTestFake, CodianSendAndPlayout) { 2233 TEST_F(WebRtcVoiceEngineTestFake, CodianSendAndPlayout) {
2240 EXPECT_TRUE(SetupEngine()); 2234 EXPECT_TRUE(SetupEngine());
2241 int channel_num = voe_.GetLastChannel(); 2235 int channel_num = voe_.GetLastChannel();
2242 webrtc::AgcConfig agc_config; 2236 webrtc::AgcConfig agc_config;
2243 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2237 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2244 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2238 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2245 EXPECT_TRUE(channel_->SetOptions(options_adjust_agc_)); 2239 cricket::AudioSendParameters parameters;
2246 std::vector<cricket::AudioCodec> codecs; 2240 parameters.options = options_adjust_agc_;
2247 codecs.push_back(kPcmuCodec); 2241 parameters.codecs.push_back(kPcmuCodec);
2248 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2242 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2249 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2243 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2250 EXPECT_TRUE(voe_.GetSend(channel_num)); 2244 EXPECT_TRUE(voe_.GetSend(channel_num));
2251 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2245 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2252 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated 2246 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated
2253 EXPECT_TRUE(channel_->SetPlayout(true)); 2247 EXPECT_TRUE(channel_->SetPlayout(true));
2254 EXPECT_TRUE(voe_.GetPlayout(channel_num)); 2248 EXPECT_TRUE(voe_.GetPlayout(channel_num));
2255 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING)); 2249 EXPECT_TRUE(channel_->SetSend(cricket::SEND_NOTHING));
2256 EXPECT_FALSE(voe_.GetSend(channel_num)); 2250 EXPECT_FALSE(voe_.GetSend(channel_num));
2257 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2251 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2258 EXPECT_EQ(0, agc_config.targetLeveldBOv); // level was restored 2252 EXPECT_EQ(0, agc_config.targetLeveldBOv); // level was restored
(...skipping 24 matching lines...) Expand all
2283 options.adjust_agc_delta.Set(-10); 2277 options.adjust_agc_delta.Set(-10);
2284 EXPECT_TRUE(engine_.SetOptions(options)); 2278 EXPECT_TRUE(engine_.SetOptions(options));
2285 2279
2286 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2280 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2287 EXPECT_EQ(13, agc_config.targetLeveldBOv); 2281 EXPECT_EQ(13, agc_config.targetLeveldBOv);
2288 } 2282 }
2289 2283
2290 TEST_F(WebRtcVoiceEngineTestFake, RxAgcConfigViaOptions) { 2284 TEST_F(WebRtcVoiceEngineTestFake, RxAgcConfigViaOptions) {
2291 EXPECT_TRUE(SetupEngine()); 2285 EXPECT_TRUE(SetupEngine());
2292 int channel_num = voe_.GetLastChannel(); 2286 int channel_num = voe_.GetLastChannel();
2293 cricket::AudioOptions options; 2287 cricket::AudioSendParameters parameters;
2294 options.rx_agc_target_dbov.Set(6); 2288 parameters.options.rx_agc_target_dbov.Set(6);
2295 options.rx_agc_digital_compression_gain.Set(0); 2289 parameters.options.rx_agc_digital_compression_gain.Set(0);
2296 options.rx_agc_limiter.Set(true); 2290 parameters.options.rx_agc_limiter.Set(true);
2297 options.rx_auto_gain_control.Set(true); 2291 parameters.options.rx_auto_gain_control.Set(true);
2298 EXPECT_TRUE(channel_->SetOptions(options)); 2292 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2299 2293
2300 webrtc::AgcConfig agc_config; 2294 webrtc::AgcConfig agc_config;
2301 EXPECT_EQ(0, engine_.voe()->processing()->GetRxAgcConfig( 2295 EXPECT_EQ(0, engine_.voe()->processing()->GetRxAgcConfig(
2302 channel_num, agc_config)); 2296 channel_num, agc_config));
2303 EXPECT_EQ(6, agc_config.targetLeveldBOv); 2297 EXPECT_EQ(6, agc_config.targetLeveldBOv);
2304 EXPECT_EQ(0, agc_config.digitalCompressionGaindB); 2298 EXPECT_EQ(0, agc_config.digitalCompressionGaindB);
2305 EXPECT_TRUE(agc_config.limiterEnable); 2299 EXPECT_TRUE(agc_config.limiterEnable);
2306 } 2300 }
2307 2301
2308 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) { 2302 TEST_F(WebRtcVoiceEngineTestFake, SampleRatesViaOptions) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2350 EXPECT_EQ(kSsrc1, send_ssrc); 2344 EXPECT_EQ(kSsrc1, send_ssrc);
2351 } 2345 }
2352 2346
2353 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { 2347 TEST_F(WebRtcVoiceEngineTestFake, GetStats) {
2354 // Setup. We need send codec to be set to get all stats. 2348 // Setup. We need send codec to be set to get all stats.
2355 EXPECT_TRUE(SetupEngine()); 2349 EXPECT_TRUE(SetupEngine());
2356 // SetupEngine adds a send stream with kSsrc1, so the receive stream has to 2350 // SetupEngine adds a send stream with kSsrc1, so the receive stream has to
2357 // use a different SSRC. 2351 // use a different SSRC.
2358 EXPECT_TRUE(channel_->AddRecvStream( 2352 EXPECT_TRUE(channel_->AddRecvStream(
2359 cricket::StreamParams::CreateLegacy(kSsrc2))); 2353 cricket::StreamParams::CreateLegacy(kSsrc2)));
2360 std::vector<cricket::AudioCodec> codecs; 2354 cricket::AudioSendParameters send_parameters;
2361 codecs.push_back(kPcmuCodec); 2355 cricket::AudioRecvParameters recv_parameters;
2362 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2356 send_parameters.codecs.push_back(kPcmuCodec);
2363 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2357 recv_parameters.codecs.push_back(kPcmuCodec);
2358 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
2359 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
2364 2360
2365 cricket::VoiceMediaInfo info; 2361 cricket::VoiceMediaInfo info;
2366 EXPECT_EQ(true, channel_->GetStats(&info)); 2362 EXPECT_EQ(true, channel_->GetStats(&info));
2367 EXPECT_EQ(1u, info.senders.size()); 2363 EXPECT_EQ(1u, info.senders.size());
2368 EXPECT_EQ(kSsrc1, info.senders[0].ssrc()); 2364 EXPECT_EQ(kSsrc1, info.senders[0].ssrc());
2369 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name); 2365 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name);
2370 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].bytes_sent); 2366 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].bytes_sent);
2371 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_sent); 2367 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_sent);
2372 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_lost); 2368 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].packets_lost);
2373 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[0].fraction_lost); 2369 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[0].fraction_lost);
(...skipping 26 matching lines...) Expand all
2400 (1 << 14), info.receivers[0].speech_expand_rate); 2396 (1 << 14), info.receivers[0].speech_expand_rate);
2401 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) / 2397 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
2402 (1 << 14), info.receivers[0].secondary_decoded_rate); 2398 (1 << 14), info.receivers[0].secondary_decoded_rate);
2403 // TODO(sriniv): Add testing for more receiver fields. 2399 // TODO(sriniv): Add testing for more receiver fields.
2404 } 2400 }
2405 2401
2406 // Test that we can set the outgoing SSRC properly with multiple streams. 2402 // Test that we can set the outgoing SSRC properly with multiple streams.
2407 // SSRC is set in SetupEngine by calling AddSendStream. 2403 // SSRC is set in SetupEngine by calling AddSendStream.
2408 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { 2404 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) {
2409 EXPECT_TRUE(SetupEngine()); 2405 EXPECT_TRUE(SetupEngine());
2410 EXPECT_TRUE(channel_->SetOptions(options_conference_));
2411 int channel_num1 = voe_.GetLastChannel(); 2406 int channel_num1 = voe_.GetLastChannel();
2412 unsigned int send_ssrc; 2407 unsigned int send_ssrc;
2413 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc)); 2408 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc));
2414 EXPECT_EQ(kSsrc1, send_ssrc); 2409 EXPECT_EQ(kSsrc1, send_ssrc);
2415 2410
2416 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2411 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2417 int channel_num2 = voe_.GetLastChannel(); 2412 int channel_num2 = voe_.GetLastChannel();
2418 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num2, send_ssrc)); 2413 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num2, send_ssrc));
2419 EXPECT_EQ(kSsrc1, send_ssrc); 2414 EXPECT_EQ(kSsrc1, send_ssrc);
2420 } 2415 }
2421 2416
2422 // Test that the local SSRC is the same on sending and receiving channels if the 2417 // Test that the local SSRC is the same on sending and receiving channels if the
2423 // receive channel is created before the send channel. 2418 // receive channel is created before the send channel.
2424 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { 2419 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) {
2425 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); 2420 EXPECT_TRUE(engine_.Init(rtc::Thread::Current()));
2426 channel_ = engine_.CreateChannel(cricket::AudioOptions()); 2421 channel_ = engine_.CreateChannel(cricket::AudioOptions());
2427 EXPECT_TRUE(channel_->SetOptions(options_conference_));
2428 2422
2429 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2423 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2430 int receive_channel_num = voe_.GetLastChannel(); 2424 int receive_channel_num = voe_.GetLastChannel();
2431 EXPECT_TRUE(channel_->AddSendStream( 2425 EXPECT_TRUE(channel_->AddSendStream(
2432 cricket::StreamParams::CreateLegacy(1234))); 2426 cricket::StreamParams::CreateLegacy(1234)));
2433 int send_channel_num = voe_.GetLastChannel(); 2427 int send_channel_num = voe_.GetLastChannel();
2434 2428
2435 unsigned int ssrc = 0; 2429 unsigned int ssrc = 0;
2436 EXPECT_EQ(0, voe_.GetLocalSSRC(send_channel_num, ssrc)); 2430 EXPECT_EQ(0, voe_.GetLocalSSRC(send_channel_num, ssrc));
2437 EXPECT_EQ(1234U, ssrc); 2431 EXPECT_EQ(1234U, ssrc);
2438 ssrc = 0; 2432 ssrc = 0;
2439 EXPECT_EQ(0, voe_.GetLocalSSRC(receive_channel_num, ssrc)); 2433 EXPECT_EQ(0, voe_.GetLocalSSRC(receive_channel_num, ssrc));
2440 EXPECT_EQ(1234U, ssrc); 2434 EXPECT_EQ(1234U, ssrc);
2441 } 2435 }
2442 2436
2443 // Test that we can properly receive packets. 2437 // Test that we can properly receive packets.
2444 TEST_F(WebRtcVoiceEngineTestFake, Recv) { 2438 TEST_F(WebRtcVoiceEngineTestFake, Recv) {
2445 EXPECT_TRUE(SetupEngine()); 2439 EXPECT_TRUE(SetupEngine());
2446 int channel_num = voe_.GetLastChannel(); 2440 int channel_num = voe_.GetLastChannel();
2447 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2441 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2448 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, 2442 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame,
2449 sizeof(kPcmuFrame))); 2443 sizeof(kPcmuFrame)));
2450 } 2444 }
2451 2445
2452 // Test that we can properly receive packets on multiple streams. 2446 // Test that we can properly receive packets on multiple streams.
2453 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { 2447 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) {
2454 EXPECT_TRUE(SetupEngine()); 2448 EXPECT_TRUE(SetupEngine());
2455 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2449 cricket::AudioSendParameters parameters;
2450 parameters.options = options_conference_;
2451 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2456 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2452 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2457 int channel_num1 = voe_.GetLastChannel(); 2453 int channel_num1 = voe_.GetLastChannel();
2458 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2454 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2459 int channel_num2 = voe_.GetLastChannel(); 2455 int channel_num2 = voe_.GetLastChannel();
2460 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2456 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2461 int channel_num3 = voe_.GetLastChannel(); 2457 int channel_num3 = voe_.GetLastChannel();
2462 // Create packets with the right SSRCs. 2458 // Create packets with the right SSRCs.
2463 char packets[4][sizeof(kPcmuFrame)]; 2459 char packets[4][sizeof(kPcmuFrame)];
2464 for (size_t i = 0; i < ARRAY_SIZE(packets); ++i) { 2460 for (size_t i = 0; i < ARRAY_SIZE(packets); ++i) {
2465 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); 2461 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame));
(...skipping 23 matching lines...) Expand all
2489 sizeof(packets[3]))); 2485 sizeof(packets[3])));
2490 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2486 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2491 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2487 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2492 EXPECT_TRUE(channel_->RemoveRecvStream(1)); 2488 EXPECT_TRUE(channel_->RemoveRecvStream(1));
2493 } 2489 }
2494 2490
2495 // Test that we properly handle failures to add a stream. 2491 // Test that we properly handle failures to add a stream.
2496 TEST_F(WebRtcVoiceEngineTestFake, AddStreamFail) { 2492 TEST_F(WebRtcVoiceEngineTestFake, AddStreamFail) {
2497 EXPECT_TRUE(SetupEngine()); 2493 EXPECT_TRUE(SetupEngine());
2498 voe_.set_fail_create_channel(true); 2494 voe_.set_fail_create_channel(true);
2499 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2495 cricket::AudioSendParameters parameters;
2496 parameters.options = options_conference_;
2497 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2500 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2498 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2501 2499
2502 // In 1:1 call, we should not try to create a new channel. 2500 // In 1:1 call, we should not try to create a new channel.
2503 cricket::AudioOptions options_no_conference_; 2501 parameters.options.conference_mode.Set(false);
2504 options_no_conference_.conference_mode.Set(false); 2502 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2505 EXPECT_TRUE(channel_->SetOptions(options_no_conference_));
2506 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2503 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2507 } 2504 }
2508 2505
2509 // Test that AddRecvStream doesn't create new channel for 1:1 call. 2506 // Test that AddRecvStream doesn't create new channel for 1:1 call.
2510 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream1On1) { 2507 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream1On1) {
2511 EXPECT_TRUE(SetupEngine()); 2508 EXPECT_TRUE(SetupEngine());
2512 int channel_num = voe_.GetLastChannel(); 2509 int channel_num = voe_.GetLastChannel();
2513 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2510 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2514 EXPECT_EQ(channel_num, voe_.GetLastChannel()); 2511 EXPECT_EQ(channel_num, voe_.GetLastChannel());
2515 } 2512 }
2516 2513
2517 // Test that after adding a recv stream, we do not decode more codecs than 2514 // Test that after adding a recv stream, we do not decode more codecs than
2518 // those previously passed into SetRecvCodecs. 2515 // those previously passed into SetRecvCodecs.
2519 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { 2516 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) {
2520 EXPECT_TRUE(SetupEngine()); 2517 EXPECT_TRUE(SetupEngine());
2521 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2518 cricket::AudioRecvParameters parameters;
2522 std::vector<cricket::AudioCodec> codecs; 2519 parameters.codecs.push_back(kIsacCodec);
2523 codecs.push_back(kIsacCodec); 2520 parameters.codecs.push_back(kPcmuCodec);
2524 codecs.push_back(kPcmuCodec); 2521 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2525 EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
2526 EXPECT_TRUE(channel_->AddRecvStream( 2522 EXPECT_TRUE(channel_->AddRecvStream(
2527 cricket::StreamParams::CreateLegacy(kSsrc1))); 2523 cricket::StreamParams::CreateLegacy(kSsrc1)));
2528 int channel_num2 = voe_.GetLastChannel(); 2524 int channel_num2 = voe_.GetLastChannel();
2529 webrtc::CodecInst gcodec; 2525 webrtc::CodecInst gcodec;
2530 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "opus"); 2526 rtc::strcpyn(gcodec.plname, ARRAY_SIZE(gcodec.plname), "opus");
2531 gcodec.plfreq = 48000; 2527 gcodec.plfreq = 48000;
2532 gcodec.channels = 2; 2528 gcodec.channels = 2;
2533 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); 2529 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec));
2534 } 2530 }
2535 2531
2536 // Test that we properly clean up any streams that were added, even if 2532 // Test that we properly clean up any streams that were added, even if
2537 // not explicitly removed. 2533 // not explicitly removed.
2538 TEST_F(WebRtcVoiceEngineTestFake, StreamCleanup) { 2534 TEST_F(WebRtcVoiceEngineTestFake, StreamCleanup) {
2539 EXPECT_TRUE(SetupEngine()); 2535 EXPECT_TRUE(SetupEngine());
2540 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2536 cricket::AudioSendParameters parameters;
2537 parameters.options = options_conference_;
2538 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2541 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2539 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2542 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2540 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2543 EXPECT_EQ(3, voe_.GetNumChannels()); // default channel + 2 added 2541 EXPECT_EQ(3, voe_.GetNumChannels()); // default channel + 2 added
2544 delete channel_; 2542 delete channel_;
2545 channel_ = NULL; 2543 channel_ = NULL;
2546 EXPECT_EQ(0, voe_.GetNumChannels()); 2544 EXPECT_EQ(0, voe_.GetNumChannels());
2547 } 2545 }
2548 2546
2549 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) { 2547 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) {
2550 EXPECT_TRUE(SetupEngine()); 2548 EXPECT_TRUE(SetupEngine());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2605 // Check we stop the tone if a packet arrives. 2603 // Check we stop the tone if a packet arrives.
2606 EXPECT_TRUE(channel_->PlayRingbackTone(0, true, true)); 2604 EXPECT_TRUE(channel_->PlayRingbackTone(0, true, true));
2607 EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num)); 2605 EXPECT_EQ(1, voe_.IsPlayingFileLocally(channel_num));
2608 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2606 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2609 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num)); 2607 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
2610 } 2608 }
2611 2609
2612 // Test that we can play a ringback tone properly in a multi-stream call. 2610 // Test that we can play a ringback tone properly in a multi-stream call.
2613 TEST_F(WebRtcVoiceEngineTestFake, PlayRingbackWithMultipleStreams) { 2611 TEST_F(WebRtcVoiceEngineTestFake, PlayRingbackWithMultipleStreams) {
2614 EXPECT_TRUE(SetupEngine()); 2612 EXPECT_TRUE(SetupEngine());
2615 EXPECT_TRUE(channel_->SetOptions(options_conference_));
2616 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 2613 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
2617 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2614 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2618 int channel_num = voe_.GetLastChannel(); 2615 int channel_num = voe_.GetLastChannel();
2619 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num)); 2616 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
2620 // Check we fail if no ringback tone specified. 2617 // Check we fail if no ringback tone specified.
2621 EXPECT_FALSE(channel_->PlayRingbackTone(2, true, true)); 2618 EXPECT_FALSE(channel_->PlayRingbackTone(2, true, true));
2622 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num)); 2619 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
2623 // Check we can set and play a ringback tone on the correct ssrc. 2620 // Check we can set and play a ringback tone on the correct ssrc.
2624 EXPECT_TRUE(channel_->SetRingbackTone( 2621 EXPECT_TRUE(channel_->SetRingbackTone(
2625 kRingbackTone, static_cast<int>(strlen(kRingbackTone)))); 2622 kRingbackTone, static_cast<int>(strlen(kRingbackTone))));
(...skipping 16 matching lines...) Expand all
2642 DeliverPacket(packet, sizeof(packet)); 2639 DeliverPacket(packet, sizeof(packet));
2643 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num)); 2640 EXPECT_EQ(0, voe_.IsPlayingFileLocally(channel_num));
2644 } 2641 }
2645 2642
2646 TEST_F(WebRtcVoiceEngineTestFake, MediaEngineCallbackOnError) { 2643 TEST_F(WebRtcVoiceEngineTestFake, MediaEngineCallbackOnError) {
2647 rtc::scoped_ptr<ChannelErrorListener> listener; 2644 rtc::scoped_ptr<ChannelErrorListener> listener;
2648 cricket::WebRtcVoiceMediaChannel* media_channel; 2645 cricket::WebRtcVoiceMediaChannel* media_channel;
2649 unsigned int ssrc = 0; 2646 unsigned int ssrc = 0;
2650 2647
2651 EXPECT_TRUE(SetupEngine()); 2648 EXPECT_TRUE(SetupEngine());
2652 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2649 cricket::AudioSendParameters parameters;
2650 parameters.options = options_conference_;
2651 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2653 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2652 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2654 2653
2655 media_channel = static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 2654 media_channel = static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
2656 listener.reset(new ChannelErrorListener(channel_)); 2655 listener.reset(new ChannelErrorListener(channel_));
2657 2656
2658 // Test on WebRtc VoE channel. 2657 // Test on WebRtc VoE channel.
2659 voe_.TriggerCallbackOnError(media_channel->voe_channel(), 2658 voe_.TriggerCallbackOnError(media_channel->voe_channel(),
2660 VE_SATURATION_WARNING); 2659 VE_SATURATION_WARNING);
2661 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_SATURATION, 2660 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_SATURATION,
2662 listener->error()); 2661 listener->error());
(...skipping 19 matching lines...) Expand all
2682 2681
2683 // Testing a non-existing channel. 2682 // Testing a non-existing channel.
2684 listener->Reset(); 2683 listener->Reset();
2685 voe_.TriggerCallbackOnError(voe_.GetLastChannel() + 2, 2684 voe_.TriggerCallbackOnError(voe_.GetLastChannel() + 2,
2686 VE_SATURATION_WARNING); 2685 VE_SATURATION_WARNING);
2687 EXPECT_EQ(0, listener->error()); 2686 EXPECT_EQ(0, listener->error());
2688 } 2687 }
2689 2688
2690 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) { 2689 TEST_F(WebRtcVoiceEngineTestFake, TestSetPlayoutError) {
2691 EXPECT_TRUE(SetupEngine()); 2690 EXPECT_TRUE(SetupEngine());
2692 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 2691 cricket::AudioSendParameters parameters;
2693 std::vector<cricket::AudioCodec> codecs; 2692 parameters.options = options_conference_;
2694 codecs.push_back(kPcmuCodec); 2693 parameters.codecs.push_back(kPcmuCodec);
2695 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2694 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2696 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); 2695 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE));
2697 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); 2696 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
2698 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); 2697 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3)));
2699 EXPECT_TRUE(channel_->SetPlayout(true)); 2698 EXPECT_TRUE(channel_->SetPlayout(true));
2700 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1); 2699 voe_.set_playout_fail_channel(voe_.GetLastChannel() - 1);
2701 EXPECT_TRUE(channel_->SetPlayout(false)); 2700 EXPECT_TRUE(channel_->SetPlayout(false));
2702 EXPECT_FALSE(channel_->SetPlayout(true)); 2701 EXPECT_FALSE(channel_->SetPlayout(true));
2703 } 2702 }
2704 2703
2705 // Test that the Registering/Unregistering with the 2704 // Test that the Registering/Unregistering with the
2706 // webrtcvoiceengine works as expected 2705 // webrtcvoiceengine works as expected
2707 TEST_F(WebRtcVoiceEngineTestFake, RegisterVoiceProcessor) { 2706 TEST_F(WebRtcVoiceEngineTestFake, RegisterVoiceProcessor) {
2708 EXPECT_TRUE(SetupEngine()); 2707 EXPECT_TRUE(SetupEngine());
2709 EXPECT_TRUE(channel_->SetOptions(options_conference_));
2710 EXPECT_TRUE(channel_->AddRecvStream( 2708 EXPECT_TRUE(channel_->AddRecvStream(
2711 cricket::StreamParams::CreateLegacy(kSsrc2))); 2709 cricket::StreamParams::CreateLegacy(kSsrc2)));
2712 cricket::FakeMediaProcessor vp_1; 2710 cricket::FakeMediaProcessor vp_1;
2713 cricket::FakeMediaProcessor vp_2; 2711 cricket::FakeMediaProcessor vp_2;
2714 2712
2715 EXPECT_FALSE(engine_.RegisterProcessor(kSsrc2, &vp_1, cricket::MPD_TX)); 2713 EXPECT_FALSE(engine_.RegisterProcessor(kSsrc2, &vp_1, cricket::MPD_TX));
2716 EXPECT_TRUE(engine_.RegisterProcessor(kSsrc2, &vp_1, cricket::MPD_RX)); 2714 EXPECT_TRUE(engine_.RegisterProcessor(kSsrc2, &vp_1, cricket::MPD_RX));
2717 EXPECT_TRUE(engine_.RegisterProcessor(kSsrc2, &vp_2, cricket::MPD_RX)); 2715 EXPECT_TRUE(engine_.RegisterProcessor(kSsrc2, &vp_2, cricket::MPD_RX));
2718 voe_.TriggerProcessPacket(cricket::MPD_RX); 2716 voe_.TriggerProcessPacket(cricket::MPD_RX);
2719 voe_.TriggerProcessPacket(cricket::MPD_TX); 2717 voe_.TriggerProcessPacket(cricket::MPD_TX);
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 2999
3002 // Have to add a stream to make SetSend work. 3000 // Have to add a stream to make SetSend work.
3003 cricket::StreamParams stream1; 3001 cricket::StreamParams stream1;
3004 stream1.ssrcs.push_back(1); 3002 stream1.ssrcs.push_back(1);
3005 channel1->AddSendStream(stream1); 3003 channel1->AddSendStream(stream1);
3006 cricket::StreamParams stream2; 3004 cricket::StreamParams stream2;
3007 stream2.ssrcs.push_back(2); 3005 stream2.ssrcs.push_back(2);
3008 channel2->AddSendStream(stream2); 3006 channel2->AddSendStream(stream2);
3009 3007
3010 // AEC and AGC and NS 3008 // AEC and AGC and NS
3011 cricket::AudioOptions options_all; 3009 cricket::AudioSendParameters parameters_options_all;
3012 options_all.echo_cancellation.Set(true); 3010 parameters_options_all.options.echo_cancellation.Set(true);
3013 options_all.auto_gain_control.Set(true); 3011 parameters_options_all.options.auto_gain_control.Set(true);
3014 options_all.noise_suppression.Set(true); 3012 parameters_options_all.options.noise_suppression.Set(true);
3015 3013 ASSERT_TRUE(channel1->SetSendParameters(parameters_options_all));
3016 ASSERT_TRUE(channel1->SetOptions(options_all)); 3014 EXPECT_EQ(parameters_options_all.options, channel1->options());
3017 cricket::AudioOptions expected_options = options_all; 3015 ASSERT_TRUE(channel2->SetSendParameters(parameters_options_all));
3018 EXPECT_EQ(expected_options, channel1->options()); 3016 EXPECT_EQ(parameters_options_all.options, channel2->options());
3019 ASSERT_TRUE(channel2->SetOptions(options_all));
3020 EXPECT_EQ(expected_options, channel2->options());
3021 3017
3022 // unset NS 3018 // unset NS
3023 cricket::AudioOptions options_no_ns; 3019 cricket::AudioSendParameters parameters_options_no_ns;
3024 options_no_ns.noise_suppression.Set(false); 3020 parameters_options_no_ns.options.noise_suppression.Set(false);
3025 ASSERT_TRUE(channel1->SetOptions(options_no_ns)); 3021 ASSERT_TRUE(channel1->SetSendParameters(parameters_options_no_ns));
3026 3022 cricket::AudioOptions expected_options = parameters_options_all.options;
3027 expected_options.echo_cancellation.Set(true); 3023 expected_options.echo_cancellation.Set(true);
3028 expected_options.auto_gain_control.Set(true); 3024 expected_options.auto_gain_control.Set(true);
3029 expected_options.noise_suppression.Set(false); 3025 expected_options.noise_suppression.Set(false);
3030 EXPECT_EQ(expected_options, channel1->options()); 3026 EXPECT_EQ(expected_options, channel1->options());
3031 3027
3032 // unset AGC 3028 // unset AGC
3033 cricket::AudioOptions options_no_agc; 3029 cricket::AudioSendParameters parameters_options_no_agc;
3034 options_no_agc.auto_gain_control.Set(false); 3030 parameters_options_no_agc.options.auto_gain_control.Set(false);
3035 ASSERT_TRUE(channel2->SetOptions(options_no_agc)); 3031 ASSERT_TRUE(channel2->SetSendParameters(parameters_options_no_agc));
3036
3037 expected_options.echo_cancellation.Set(true); 3032 expected_options.echo_cancellation.Set(true);
3038 expected_options.auto_gain_control.Set(false); 3033 expected_options.auto_gain_control.Set(false);
3039 expected_options.noise_suppression.Set(true); 3034 expected_options.noise_suppression.Set(true);
3040 EXPECT_EQ(expected_options, channel2->options()); 3035 EXPECT_EQ(expected_options, channel2->options());
3041 3036
3042 ASSERT_TRUE(engine_.SetOptions(options_all)); 3037 ASSERT_TRUE(engine_.SetOptions(parameters_options_all.options));
3043 bool ec_enabled; 3038 bool ec_enabled;
3044 webrtc::EcModes ec_mode; 3039 webrtc::EcModes ec_mode;
3045 bool agc_enabled; 3040 bool agc_enabled;
3046 webrtc::AgcModes agc_mode; 3041 webrtc::AgcModes agc_mode;
3047 bool ns_enabled; 3042 bool ns_enabled;
3048 webrtc::NsModes ns_mode; 3043 webrtc::NsModes ns_mode;
3049 voe_.GetEcStatus(ec_enabled, ec_mode); 3044 voe_.GetEcStatus(ec_enabled, ec_mode);
3050 voe_.GetAgcStatus(agc_enabled, agc_mode); 3045 voe_.GetAgcStatus(agc_enabled, agc_mode);
3051 voe_.GetNsStatus(ns_enabled, ns_mode); 3046 voe_.GetNsStatus(ns_enabled, ns_mode);
3052 EXPECT_TRUE(ec_enabled); 3047 EXPECT_TRUE(ec_enabled);
(...skipping 26 matching lines...) Expand all
3079 3074
3080 channel2->SetSend(cricket::SEND_NOTHING); 3075 channel2->SetSend(cricket::SEND_NOTHING);
3081 voe_.GetEcStatus(ec_enabled, ec_mode); 3076 voe_.GetEcStatus(ec_enabled, ec_mode);
3082 voe_.GetAgcStatus(agc_enabled, agc_mode); 3077 voe_.GetAgcStatus(agc_enabled, agc_mode);
3083 voe_.GetNsStatus(ns_enabled, ns_mode); 3078 voe_.GetNsStatus(ns_enabled, ns_mode);
3084 EXPECT_TRUE(ec_enabled); 3079 EXPECT_TRUE(ec_enabled);
3085 EXPECT_TRUE(agc_enabled); 3080 EXPECT_TRUE(agc_enabled);
3086 EXPECT_TRUE(ns_enabled); 3081 EXPECT_TRUE(ns_enabled);
3087 3082
3088 // Make sure settings take effect while we are sending. 3083 // Make sure settings take effect while we are sending.
3089 ASSERT_TRUE(engine_.SetOptions(options_all)); 3084 ASSERT_TRUE(engine_.SetOptions(parameters_options_all.options));
3090 cricket::AudioOptions options_no_agc_nor_ns; 3085 cricket::AudioSendParameters parameters_options_no_agc_nor_ns;
3091 options_no_agc_nor_ns.auto_gain_control.Set(false); 3086 parameters_options_no_agc_nor_ns.options.auto_gain_control.Set(false);
3092 options_no_agc_nor_ns.noise_suppression.Set(false); 3087 parameters_options_no_agc_nor_ns.options.noise_suppression.Set(false);
3093 channel2->SetSend(cricket::SEND_MICROPHONE); 3088 channel2->SetSend(cricket::SEND_MICROPHONE);
3094 channel2->SetOptions(options_no_agc_nor_ns); 3089 channel2->SetSendParameters(parameters_options_no_agc_nor_ns);
3095
3096 expected_options.echo_cancellation.Set(true); 3090 expected_options.echo_cancellation.Set(true);
3097 expected_options.auto_gain_control.Set(false); 3091 expected_options.auto_gain_control.Set(false);
3098 expected_options.noise_suppression.Set(false); 3092 expected_options.noise_suppression.Set(false);
3099 EXPECT_EQ(expected_options, channel2->options()); 3093 EXPECT_EQ(expected_options, channel2->options());
3100 voe_.GetEcStatus(ec_enabled, ec_mode); 3094 voe_.GetEcStatus(ec_enabled, ec_mode);
3101 voe_.GetAgcStatus(agc_enabled, agc_mode); 3095 voe_.GetAgcStatus(agc_enabled, agc_mode);
3102 voe_.GetNsStatus(ns_enabled, ns_mode); 3096 voe_.GetNsStatus(ns_enabled, ns_mode);
3103 EXPECT_TRUE(ec_enabled); 3097 EXPECT_TRUE(ec_enabled);
3104 EXPECT_FALSE(agc_enabled); 3098 EXPECT_FALSE(agc_enabled);
3105 EXPECT_FALSE(ns_enabled); 3099 EXPECT_FALSE(ns_enabled);
3106 } 3100 }
3107 3101
3108 // This test verifies DSCP settings are properly applied on voice media channel. 3102 // This test verifies DSCP settings are properly applied on voice media channel.
3109 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) { 3103 TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) {
3110 EXPECT_TRUE(SetupEngine()); 3104 EXPECT_TRUE(SetupEngine());
3111 rtc::scoped_ptr<cricket::VoiceMediaChannel> channel( 3105 rtc::scoped_ptr<cricket::VoiceMediaChannel> channel(
3112 engine_.CreateChannel(cricket::AudioOptions())); 3106 engine_.CreateChannel(cricket::AudioOptions()));
3113 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface( 3107 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface(
3114 new cricket::FakeNetworkInterface); 3108 new cricket::FakeNetworkInterface);
3115 channel->SetInterface(network_interface.get()); 3109 channel->SetInterface(network_interface.get());
3116 cricket::AudioOptions options; 3110 cricket::AudioSendParameters parameters;
3117 options.dscp.Set(true); 3111 parameters.options.dscp.Set(true);
3118 EXPECT_TRUE(channel->SetOptions(options)); 3112 EXPECT_TRUE(channel->SetSendParameters(parameters));
3119 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp()); 3113 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp());
3120 // Verify previous value is not modified if dscp option is not set. 3114 // Verify previous value is not modified if dscp option is not set.
3121 cricket::AudioOptions options1; 3115 EXPECT_TRUE(channel->SetSendParameters(cricket::AudioSendParameters()));
3122 EXPECT_TRUE(channel->SetOptions(options1));
3123 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp()); 3116 EXPECT_EQ(rtc::DSCP_EF, network_interface->dscp());
3124 options.dscp.Set(false); 3117 parameters.options.dscp.Set(false);
3125 EXPECT_TRUE(channel->SetOptions(options)); 3118 EXPECT_TRUE(channel->SetSendParameters(parameters));
3126 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp()); 3119 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp());
3127 } 3120 }
3128 3121
3129 // Test that GetReceiveChannelNum returns the default channel for the first 3122 // Test that GetReceiveChannelNum returns the default channel for the first
3130 // recv stream in 1-1 calls. 3123 // recv stream in 1-1 calls.
3131 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelNumIn1To1Calls) { 3124 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelNumIn1To1Calls) {
3132 EXPECT_TRUE(SetupEngine()); 3125 EXPECT_TRUE(SetupEngine());
3133 cricket::WebRtcVoiceMediaChannel* media_channel = 3126 cricket::WebRtcVoiceMediaChannel* media_channel =
3134 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3127 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3135 // Test that GetChannelNum returns the default channel if the SSRC is unknown. 3128 // Test that GetChannelNum returns the default channel if the SSRC is unknown.
3136 EXPECT_EQ(media_channel->voe_channel(), 3129 EXPECT_EQ(media_channel->voe_channel(),
3137 media_channel->GetReceiveChannelNum(0)); 3130 media_channel->GetReceiveChannelNum(0));
3138 cricket::StreamParams stream; 3131 cricket::StreamParams stream;
3139 stream.ssrcs.push_back(kSsrc2); 3132 stream.ssrcs.push_back(kSsrc2);
3140 EXPECT_TRUE(channel_->AddRecvStream(stream)); 3133 EXPECT_TRUE(channel_->AddRecvStream(stream));
3141 EXPECT_EQ(media_channel->voe_channel(), 3134 EXPECT_EQ(media_channel->voe_channel(),
3142 media_channel->GetReceiveChannelNum(kSsrc2)); 3135 media_channel->GetReceiveChannelNum(kSsrc2));
3143 } 3136 }
3144 3137
3145 // Test that GetReceiveChannelNum doesn't return the default channel for the 3138 // Test that GetReceiveChannelNum doesn't return the default channel for the
3146 // first recv stream in conference calls. 3139 // first recv stream in conference calls.
3147 TEST_F(WebRtcVoiceEngineTestFake, TestGetChannelNumInConferenceCalls) { 3140 TEST_F(WebRtcVoiceEngineTestFake, TestGetChannelNumInConferenceCalls) {
3148 EXPECT_TRUE(SetupEngine()); 3141 EXPECT_TRUE(SetupEngine());
3149 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 3142 cricket::AudioSendParameters parameters;
3143 parameters.options = options_conference_;
3144 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3150 cricket::StreamParams stream; 3145 cricket::StreamParams stream;
3151 stream.ssrcs.push_back(kSsrc2); 3146 stream.ssrcs.push_back(kSsrc2);
3152 EXPECT_TRUE(channel_->AddRecvStream(stream)); 3147 EXPECT_TRUE(channel_->AddRecvStream(stream));
3153 cricket::WebRtcVoiceMediaChannel* media_channel = 3148 cricket::WebRtcVoiceMediaChannel* media_channel =
3154 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3149 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3155 EXPECT_LT(media_channel->voe_channel(), 3150 EXPECT_LT(media_channel->voe_channel(),
3156 media_channel->GetReceiveChannelNum(kSsrc2)); 3151 media_channel->GetReceiveChannelNum(kSsrc2));
3157 } 3152 }
3158 3153
3159 TEST_F(WebRtcVoiceEngineTestFake, SetOutputScaling) { 3154 TEST_F(WebRtcVoiceEngineTestFake, SetOutputScaling) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3210 TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) { 3205 TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) {
3211 // Test that changing the combined_audio_video_bwe option results in the 3206 // Test that changing the combined_audio_video_bwe option results in the
3212 // expected state changes on an associated Call. 3207 // expected state changes on an associated Call.
3213 cricket::FakeCall call((webrtc::Call::Config())); 3208 cricket::FakeCall call((webrtc::Call::Config()));
3214 const uint32 kAudioSsrc1 = 223; 3209 const uint32 kAudioSsrc1 = 223;
3215 const uint32 kAudioSsrc2 = 224; 3210 const uint32 kAudioSsrc2 = 224;
3216 3211
3217 EXPECT_TRUE(SetupEngine()); 3212 EXPECT_TRUE(SetupEngine());
3218 cricket::WebRtcVoiceMediaChannel* media_channel = 3213 cricket::WebRtcVoiceMediaChannel* media_channel =
3219 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3214 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3220 const auto& rtp_extensions = engine_.rtp_header_extensions(); 3215 cricket::AudioRecvParameters recv_parameters;
3221 media_channel->SetRecvRtpHeaderExtensions(rtp_extensions); 3216 recv_parameters.extensions = engine_.rtp_header_extensions();
3217 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
3222 media_channel->SetCall(&call); 3218 media_channel->SetCall(&call);
3223 EXPECT_TRUE(media_channel->AddRecvStream( 3219 EXPECT_TRUE(media_channel->AddRecvStream(
3224 cricket::StreamParams::CreateLegacy(kAudioSsrc1))); 3220 cricket::StreamParams::CreateLegacy(kAudioSsrc1)));
3225 EXPECT_TRUE(media_channel->AddRecvStream( 3221 EXPECT_TRUE(media_channel->AddRecvStream(
3226 cricket::StreamParams::CreateLegacy(kAudioSsrc2))); 3222 cricket::StreamParams::CreateLegacy(kAudioSsrc2)));
3227 3223
3228 // Combined BWE should not be set up yet. 3224 // Combined BWE should not be set up yet.
3229 EXPECT_EQ(2, call.GetAudioReceiveStreams().size()); 3225 EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
3230 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1) 3226 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
3231 ->GetConfig() 3227 ->GetConfig()
3232 .combined_audio_video_bwe); 3228 .combined_audio_video_bwe);
3233 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2) 3229 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
3234 ->GetConfig() 3230 ->GetConfig()
3235 .combined_audio_video_bwe); 3231 .combined_audio_video_bwe);
3236 3232
3237 // Enable combined BWE option - now it should be set up. 3233 // Enable combined BWE option - now it should be set up.
3238 cricket::AudioOptions options; 3234 cricket::AudioSendParameters send_parameters;
3239 options.combined_audio_video_bwe.Set(true); 3235 send_parameters.options.combined_audio_video_bwe.Set(true);
3240 EXPECT_TRUE(media_channel->SetOptions(options)); 3236 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters));
3241 EXPECT_EQ(2, call.GetAudioReceiveStreams().size()); 3237 EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
3242 EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc1) 3238 EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc1)
3243 ->GetConfig() 3239 ->GetConfig()
3244 .combined_audio_video_bwe); 3240 .combined_audio_video_bwe);
3245 EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc2) 3241 EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc2)
3246 ->GetConfig() 3242 ->GetConfig()
3247 .combined_audio_video_bwe); 3243 .combined_audio_video_bwe);
3248 3244
3249 // Disable combined BWE option - should be disabled again. 3245 // Disable combined BWE option - should be disabled again.
3250 options.combined_audio_video_bwe.Set(false); 3246 send_parameters.options.combined_audio_video_bwe.Set(false);
3251 EXPECT_TRUE(media_channel->SetOptions(options)); 3247 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters));
3252 EXPECT_EQ(2, call.GetAudioReceiveStreams().size()); 3248 EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
3253 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1) 3249 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
3254 ->GetConfig() 3250 ->GetConfig()
3255 .combined_audio_video_bwe); 3251 .combined_audio_video_bwe);
3256 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2) 3252 EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
3257 ->GetConfig() 3253 ->GetConfig()
3258 .combined_audio_video_bwe); 3254 .combined_audio_video_bwe);
3259 3255
3260 media_channel->SetCall(nullptr); 3256 media_channel->SetCall(nullptr);
3261 } 3257 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3299 3295
3300 TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) { 3296 TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) {
3301 // Test that adding receive streams after enabling combined bandwidth 3297 // Test that adding receive streams after enabling combined bandwidth
3302 // estimation will correctly configure each channel. 3298 // estimation will correctly configure each channel.
3303 cricket::FakeCall call((webrtc::Call::Config())); 3299 cricket::FakeCall call((webrtc::Call::Config()));
3304 3300
3305 EXPECT_TRUE(SetupEngine()); 3301 EXPECT_TRUE(SetupEngine());
3306 cricket::WebRtcVoiceMediaChannel* media_channel = 3302 cricket::WebRtcVoiceMediaChannel* media_channel =
3307 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3303 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3308 media_channel->SetCall(&call); 3304 media_channel->SetCall(&call);
3309 cricket::AudioOptions options; 3305 cricket::AudioSendParameters parameters;
3310 options.combined_audio_video_bwe.Set(true); 3306 parameters.options.combined_audio_video_bwe.Set(true);
3311 EXPECT_TRUE(media_channel->SetOptions(options)); 3307 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3312 3308
3313 static const uint32 kSsrcs[] = {1, 2, 3, 4}; 3309 static const uint32 kSsrcs[] = {1, 2, 3, 4};
3314 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) { 3310 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) {
3315 EXPECT_TRUE(media_channel->AddRecvStream( 3311 EXPECT_TRUE(media_channel->AddRecvStream(
3316 cricket::StreamParams::CreateLegacy(kSsrcs[i]))); 3312 cricket::StreamParams::CreateLegacy(kSsrcs[i])));
3317 EXPECT_NE(nullptr, call.GetAudioReceiveStream(kSsrcs[i])); 3313 EXPECT_NE(nullptr, call.GetAudioReceiveStream(kSsrcs[i]));
3318 EXPECT_TRUE(call.GetAudioReceiveStream(kSsrcs[i]) 3314 EXPECT_TRUE(call.GetAudioReceiveStream(kSsrcs[i])
3319 ->GetConfig() 3315 ->GetConfig()
3320 .combined_audio_video_bwe); 3316 .combined_audio_video_bwe);
3321 } 3317 }
(...skipping 22 matching lines...) Expand all
3344 3340
3345 // Combined BWE should be set up, but with no configured extensions. 3341 // Combined BWE should be set up, but with no configured extensions.
3346 EXPECT_EQ(2, call.GetAudioReceiveStreams().size()); 3342 EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
3347 for (uint32 ssrc : ssrcs) { 3343 for (uint32 ssrc : ssrcs) {
3348 const auto* s = call.GetAudioReceiveStream(ssrc); 3344 const auto* s = call.GetAudioReceiveStream(ssrc);
3349 EXPECT_NE(nullptr, s); 3345 EXPECT_NE(nullptr, s);
3350 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size()); 3346 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
3351 } 3347 }
3352 3348
3353 // Set up receive extensions. 3349 // Set up receive extensions.
3350
3354 const auto& e_exts = engine_.rtp_header_extensions(); 3351 const auto& e_exts = engine_.rtp_header_extensions();
3355 channel_->SetRecvRtpHeaderExtensions(e_exts); 3352 cricket::AudioRecvParameters parameters;
3353 parameters.extensions = e_exts;
3354 channel_->SetRecvParameters(parameters);
3356 EXPECT_EQ(2, call.GetAudioReceiveStreams().size()); 3355 EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
3357 for (uint32 ssrc : ssrcs) { 3356 for (uint32 ssrc : ssrcs) {
3358 const auto* s = call.GetAudioReceiveStream(ssrc); 3357 const auto* s = call.GetAudioReceiveStream(ssrc);
3359 EXPECT_NE(nullptr, s); 3358 EXPECT_NE(nullptr, s);
3360 const auto& s_exts = s->GetConfig().rtp.extensions; 3359 const auto& s_exts = s->GetConfig().rtp.extensions;
3361 EXPECT_EQ(e_exts.size(), s_exts.size()); 3360 EXPECT_EQ(e_exts.size(), s_exts.size());
3362 for (const auto& e_ext : e_exts) { 3361 for (const auto& e_ext : e_exts) {
3363 for (const auto& s_ext : s_exts) { 3362 for (const auto& s_ext : s_exts) {
3364 if (e_ext.id == s_ext.id) { 3363 if (e_ext.id == s_ext.id) {
3365 EXPECT_EQ(e_ext.uri, s_ext.name); 3364 EXPECT_EQ(e_ext.uri, s_ext.name);
3366 } 3365 }
3367 } 3366 }
3368 } 3367 }
3369 } 3368 }
3370 3369
3371 // Disable receive extensions. 3370 // Disable receive extensions.
3372 std::vector<cricket::RtpHeaderExtension> extensions; 3371 channel_->SetRecvParameters(cricket::AudioRecvParameters());
3373 channel_->SetRecvRtpHeaderExtensions(extensions);
3374 for (uint32 ssrc : ssrcs) { 3372 for (uint32 ssrc : ssrcs) {
3375 const auto* s = call.GetAudioReceiveStream(ssrc); 3373 const auto* s = call.GetAudioReceiveStream(ssrc);
3376 EXPECT_NE(nullptr, s); 3374 EXPECT_NE(nullptr, s);
3377 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size()); 3375 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
3378 } 3376 }
3379 3377
3380 media_channel->SetCall(nullptr); 3378 media_channel->SetCall(nullptr);
3381 } 3379 }
3382 3380
3383 TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) { 3381 TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) {
3384 // Test that packets are forwarded to the Call when configured accordingly. 3382 // Test that packets are forwarded to the Call when configured accordingly.
3385 cricket::FakeCall call((webrtc::Call::Config())); 3383 cricket::FakeCall call((webrtc::Call::Config()));
3386 const uint32 kAudioSsrc = 1; 3384 const uint32 kAudioSsrc = 1;
3387 rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3385 rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame));
3388 static const unsigned char kRtcp[] = { 3386 static const unsigned char kRtcp[] = {
3389 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 3387 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
3390 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 3388 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
3391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3389 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 3390 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
3393 }; 3391 };
3394 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp)); 3392 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp));
3395 3393
3396 EXPECT_TRUE(SetupEngine()); 3394 EXPECT_TRUE(SetupEngine());
3397 cricket::WebRtcVoiceMediaChannel* media_channel = 3395 cricket::WebRtcVoiceMediaChannel* media_channel =
3398 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3396 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3399 cricket::AudioOptions options; 3397 cricket::AudioSendParameters parameters;
3400 options.combined_audio_video_bwe.Set(true); 3398 parameters.options.combined_audio_video_bwe.Set(true);
3401 EXPECT_TRUE(media_channel->SetOptions(options)); 3399 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3402 EXPECT_TRUE(media_channel->AddRecvStream( 3400 EXPECT_TRUE(media_channel->AddRecvStream(
3403 cricket::StreamParams::CreateLegacy(kAudioSsrc))); 3401 cricket::StreamParams::CreateLegacy(kAudioSsrc)));
3404 3402
3405 // Call not set on media channel, so no packets can be forwarded. 3403 // Call not set on media channel, so no packets can be forwarded.
3406 EXPECT_EQ(0, call.GetAudioReceiveStreams().size()); 3404 EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
3407 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); 3405 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
3408 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); 3406 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
3409 EXPECT_EQ(0, call.GetAudioReceiveStreams().size()); 3407 EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
3410 3408
3411 // Set Call, now there should be a receive stream which is forwarded packets. 3409 // Set Call, now there should be a receive stream which is forwarded packets.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3449 // Add send stream, the association remains. 3447 // Add send stream, the association remains.
3450 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(3))); 3448 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(3)));
3451 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1); 3449 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
3452 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel); 3450 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
3453 } 3451 }
3454 3452
3455 // In conference mode, all receive channels should be associated with the 3453 // In conference mode, all receive channels should be associated with the
3456 // default channel, since they do not send RTCP SR. 3454 // default channel, since they do not send RTCP SR.
3457 TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) { 3455 TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) {
3458 EXPECT_TRUE(SetupEngine()); 3456 EXPECT_TRUE(SetupEngine());
3459 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 3457 cricket::AudioSendParameters parameters;
3458 parameters.options = options_conference_;
3459 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3460 cricket::WebRtcVoiceMediaChannel* media_channel = 3460 cricket::WebRtcVoiceMediaChannel* media_channel =
3461 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3461 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3462 int default_channel = media_channel->voe_channel(); 3462 int default_channel = media_channel->voe_channel();
3463 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 3463 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3464 int recv_ch = voe_.GetLastChannel(); 3464 int recv_ch = voe_.GetLastChannel();
3465 EXPECT_NE(recv_ch, default_channel); 3465 EXPECT_NE(recv_ch, default_channel);
3466 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel); 3466 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
3467 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); 3467 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
3468 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel); 3468 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
3469 } 3469 }
3470 3470
3471 TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) { 3471 TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) {
3472 EXPECT_TRUE(SetupEngine()); 3472 EXPECT_TRUE(SetupEngine());
3473 EXPECT_TRUE(channel_->SetOptions(options_conference_)); 3473 cricket::AudioSendParameters parameters;
3474 parameters.options = options_conference_;
3475 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3474 3476
3475 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); 3477 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
3476 int recv_ch = voe_.GetLastChannel(); 3478 int recv_ch = voe_.GetLastChannel();
3477 3479
3478 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); 3480 EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
3479 int send_ch = voe_.GetLastChannel(); 3481 int send_ch = voe_.GetLastChannel();
3480 3482
3481 // Manually associate |recv_ch| to |send_ch|. This test is to verify a 3483 // Manually associate |recv_ch| to |send_ch|. This test is to verify a
3482 // deleting logic, i.e., deleting |send_ch| will reset the associate send 3484 // deleting logic, i.e., deleting |send_ch| will reset the associate send
3483 // channel of |recv_ch|.This is not a common case, since, normally, only the 3485 // channel of |recv_ch|.This is not a common case, since, normally, only the
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3621 delete channels[--num_channels]; 3623 delete channels[--num_channels];
3622 } 3624 }
3623 3625
3624 engine.Terminate(); 3626 engine.Terminate();
3625 } 3627 }
3626 3628
3627 // Test that we set our preferred codecs properly. 3629 // Test that we set our preferred codecs properly.
3628 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) { 3630 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) {
3629 cricket::WebRtcVoiceEngine engine; 3631 cricket::WebRtcVoiceEngine engine;
3630 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); 3632 EXPECT_TRUE(engine.Init(rtc::Thread::Current()));
3631 cricket::WebRtcVoiceMediaChannel channel(&engine); 3633 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions());
3632 EXPECT_TRUE(channel.SetRecvCodecs(engine.codecs())); 3634 cricket::AudioRecvParameters parameters;
3635 parameters.codecs = engine.codecs();
3636 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3633 } 3637 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698