OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |