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 11 matching lines...) Expand all Loading... |
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #include "webrtc/base/arraysize.h" | 28 #include "webrtc/base/arraysize.h" |
29 #include "webrtc/base/byteorder.h" | 29 #include "webrtc/base/byteorder.h" |
30 #include "webrtc/base/gunit.h" | 30 #include "webrtc/base/gunit.h" |
31 #include "webrtc/call.h" | 31 #include "webrtc/call.h" |
| 32 #include "webrtc/p2p/base/faketransportcontroller.h" |
| 33 #include "webrtc/test/field_trial.h" |
32 #include "talk/media/base/constants.h" | 34 #include "talk/media/base/constants.h" |
33 #include "talk/media/base/fakemediaengine.h" | 35 #include "talk/media/base/fakemediaengine.h" |
34 #include "talk/media/base/fakenetworkinterface.h" | 36 #include "talk/media/base/fakenetworkinterface.h" |
35 #include "talk/media/base/fakertp.h" | 37 #include "talk/media/base/fakertp.h" |
36 #include "talk/media/webrtc/fakewebrtccall.h" | 38 #include "talk/media/webrtc/fakewebrtccall.h" |
37 #include "talk/media/webrtc/fakewebrtcvoiceengine.h" | 39 #include "talk/media/webrtc/fakewebrtcvoiceengine.h" |
38 #include "talk/media/webrtc/webrtcvoiceengine.h" | 40 #include "talk/media/webrtc/webrtcvoiceengine.h" |
39 #include "webrtc/p2p/base/faketransportcontroller.h" | |
40 #include "talk/session/media/channel.h" | 41 #include "talk/session/media/channel.h" |
41 | 42 |
42 using cricket::kRtpAudioLevelHeaderExtension; | 43 using cricket::kRtpAudioLevelHeaderExtension; |
43 using cricket::kRtpAbsoluteSenderTimeHeaderExtension; | 44 using cricket::kRtpAbsoluteSenderTimeHeaderExtension; |
44 | 45 |
45 namespace { | 46 namespace { |
46 | 47 |
47 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0); | 48 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0); |
48 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); | 49 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); |
49 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); | 50 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); |
(...skipping 17 matching lines...) Expand all Loading... |
67 engine, // hw | 68 engine, // hw |
68 engine, // network | 69 engine, // network |
69 engine, // rtp | 70 engine, // rtp |
70 engine) { // volume | 71 engine) { // volume |
71 } | 72 } |
72 }; | 73 }; |
73 } // namespace | 74 } // namespace |
74 | 75 |
75 class WebRtcVoiceEngineTestFake : public testing::Test { | 76 class WebRtcVoiceEngineTestFake : public testing::Test { |
76 public: | 77 public: |
77 WebRtcVoiceEngineTestFake() | 78 explicit WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} |
| 79 |
| 80 explicit WebRtcVoiceEngineTestFake(const char* field_trials) |
78 : call_(webrtc::Call::Config()), | 81 : call_(webrtc::Call::Config()), |
79 engine_(new FakeVoEWrapper(&voe_)), | 82 engine_(new FakeVoEWrapper(&voe_)), |
80 channel_(nullptr) { | 83 channel_(nullptr), |
| 84 override_field_trials_(field_trials) { |
81 send_parameters_.codecs.push_back(kPcmuCodec); | 85 send_parameters_.codecs.push_back(kPcmuCodec); |
82 recv_parameters_.codecs.push_back(kPcmuCodec); | 86 recv_parameters_.codecs.push_back(kPcmuCodec); |
83 } | 87 } |
84 bool SetupEngine() { | 88 bool SetupEngine() { |
85 if (!engine_.Init(rtc::Thread::Current())) { | 89 if (!engine_.Init(rtc::Thread::Current())) { |
86 return false; | 90 return false; |
87 } | 91 } |
88 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); | 92 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); |
89 return (channel_ != nullptr); | 93 return (channel_ != nullptr); |
90 } | 94 } |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].name); | 278 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].name); |
275 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); | 279 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); |
276 | 280 |
277 // Ensure all extensions go back off with an empty list. | 281 // Ensure all extensions go back off with an empty list. |
278 recv_parameters_.extensions.clear(); | 282 recv_parameters_.extensions.clear(); |
279 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 283 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
280 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); | 284 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); |
281 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); | 285 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); |
282 } | 286 } |
283 | 287 |
| 288 void TestExtensionFilter(const std::vector<std::string>& extensions, |
| 289 const std::string& expected_extension) { |
| 290 EXPECT_TRUE(SetupEngineWithSendStream()); |
| 291 cricket::AudioSendParameters parameters = send_parameters_; |
| 292 int expected_id = -1; |
| 293 int id = 1; |
| 294 for (const std::string& extension : extensions) { |
| 295 if (extension == expected_extension) |
| 296 expected_id = id; |
| 297 parameters.extensions.push_back( |
| 298 cricket::RtpHeaderExtension(extension, id++)); |
| 299 } |
| 300 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| 301 const cricket::FakeAudioSendStream send_stream = GetSendStream(kSsrc1); |
| 302 |
| 303 // Verify that only one of them has been set, and that it is the one with |
| 304 // highest priority (transport sequence number). |
| 305 ASSERT_EQ(1u, send_stream.GetConfig().rtp.extensions.size()); |
| 306 EXPECT_EQ(expected_id, send_stream.GetConfig().rtp.extensions[0].id); |
| 307 EXPECT_EQ(expected_extension, |
| 308 send_stream.GetConfig().rtp.extensions[0].name); |
| 309 } |
| 310 |
284 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { | 311 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { |
285 webrtc::AudioSendStream::Stats stats; | 312 webrtc::AudioSendStream::Stats stats; |
286 stats.local_ssrc = 12; | 313 stats.local_ssrc = 12; |
287 stats.bytes_sent = 345; | 314 stats.bytes_sent = 345; |
288 stats.packets_sent = 678; | 315 stats.packets_sent = 678; |
289 stats.packets_lost = 9012; | 316 stats.packets_lost = 9012; |
290 stats.fraction_lost = 34.56f; | 317 stats.fraction_lost = 34.56f; |
291 stats.codec_name = "codec_name_send"; | 318 stats.codec_name = "codec_name_send"; |
292 stats.ext_seqnum = 789; | 319 stats.ext_seqnum = 789; |
293 stats.jitter_ms = 12; | 320 stats.jitter_ms = 12; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); | 419 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); |
393 } | 420 } |
394 | 421 |
395 protected: | 422 protected: |
396 cricket::FakeCall call_; | 423 cricket::FakeCall call_; |
397 cricket::FakeWebRtcVoiceEngine voe_; | 424 cricket::FakeWebRtcVoiceEngine voe_; |
398 cricket::WebRtcVoiceEngine engine_; | 425 cricket::WebRtcVoiceEngine engine_; |
399 cricket::VoiceMediaChannel* channel_; | 426 cricket::VoiceMediaChannel* channel_; |
400 cricket::AudioSendParameters send_parameters_; | 427 cricket::AudioSendParameters send_parameters_; |
401 cricket::AudioRecvParameters recv_parameters_; | 428 cricket::AudioRecvParameters recv_parameters_; |
| 429 |
| 430 private: |
| 431 webrtc::test::ScopedFieldTrials override_field_trials_; |
402 }; | 432 }; |
403 | 433 |
404 // Tests that our stub library "works". | 434 // Tests that our stub library "works". |
405 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { | 435 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { |
406 EXPECT_FALSE(voe_.IsInited()); | 436 EXPECT_FALSE(voe_.IsInited()); |
407 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 437 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); |
408 EXPECT_TRUE(voe_.IsInited()); | 438 EXPECT_TRUE(voe_.IsInited()); |
409 engine_.Terminate(); | 439 engine_.Terminate(); |
410 EXPECT_FALSE(voe_.IsInited()); | 440 EXPECT_FALSE(voe_.IsInited()); |
411 } | 441 } |
(...skipping 14 matching lines...) Expand all Loading... |
426 EXPECT_EQ(48000, codecs[0].clockrate); | 456 EXPECT_EQ(48000, codecs[0].clockrate); |
427 EXPECT_EQ(2, codecs[0].channels); | 457 EXPECT_EQ(2, codecs[0].channels); |
428 EXPECT_EQ(64000, codecs[0].bitrate); | 458 EXPECT_EQ(64000, codecs[0].bitrate); |
429 int pref = codecs[0].preference; | 459 int pref = codecs[0].preference; |
430 for (size_t i = 1; i < codecs.size(); ++i) { | 460 for (size_t i = 1; i < codecs.size(); ++i) { |
431 EXPECT_GT(pref, codecs[i].preference); | 461 EXPECT_GT(pref, codecs[i].preference); |
432 pref = codecs[i].preference; | 462 pref = codecs[i].preference; |
433 } | 463 } |
434 } | 464 } |
435 | 465 |
| 466 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { |
| 467 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); |
| 468 bool opus_found = false; |
| 469 for (cricket::AudioCodec codec : codecs) { |
| 470 if (codec.name == "opus") { |
| 471 EXPECT_TRUE(HasTransportCc(codec)); |
| 472 opus_found = true; |
| 473 } |
| 474 } |
| 475 EXPECT_TRUE(opus_found); |
| 476 } |
| 477 |
436 // Tests that we can find codecs by name or id, and that we interpret the | 478 // Tests that we can find codecs by name or id, and that we interpret the |
437 // clockrate and bitrate fields properly. | 479 // clockrate and bitrate fields properly. |
438 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { | 480 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { |
439 cricket::AudioCodec codec; | 481 cricket::AudioCodec codec; |
440 webrtc::CodecInst codec_inst; | 482 webrtc::CodecInst codec_inst; |
441 // Find PCMU with explicit clockrate and bitrate. | 483 // Find PCMU with explicit clockrate and bitrate. |
442 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); | 484 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); |
443 // Find ISAC with explicit clockrate and 0 bitrate. | 485 // Find ISAC with explicit clockrate and 0 bitrate. |
444 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); | 486 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); |
445 // Find telephone-event with explicit clockrate and 0 bitrate. | 487 // Find telephone-event with explicit clockrate and 0 bitrate. |
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1269 int channel_num = voe_.GetLastChannel(); | 1311 int channel_num = voe_.GetLastChannel(); |
1270 cricket::AudioSendParameters parameters; | 1312 cricket::AudioSendParameters parameters; |
1271 parameters.codecs.push_back(kOpusCodec); | 1313 parameters.codecs.push_back(kOpusCodec); |
1272 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1314 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1273 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); | 1315 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); |
1274 parameters.codecs[0].params["useinbandfec"] = "1"; | 1316 parameters.codecs[0].params["useinbandfec"] = "1"; |
1275 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1317 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1276 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); | 1318 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); |
1277 } | 1319 } |
1278 | 1320 |
| 1321 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
| 1322 EXPECT_TRUE(SetupEngine()); |
| 1323 cricket::AudioSendParameters send_parameters; |
| 1324 send_parameters.codecs.push_back(kOpusCodec); |
| 1325 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
| 1326 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); |
| 1327 |
| 1328 cricket::AudioRecvParameters recv_parameters; |
| 1329 recv_parameters.codecs.push_back(kOpusCodec); |
| 1330 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
| 1331 EXPECT_TRUE( |
| 1332 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); |
| 1333 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
| 1334 EXPECT_FALSE( |
| 1335 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
| 1336 |
| 1337 send_parameters.codecs = engine_.codecs(); |
| 1338 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); |
| 1339 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
| 1340 EXPECT_TRUE( |
| 1341 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
| 1342 } |
| 1343 |
1279 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | 1344 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. |
1280 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | 1345 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { |
1281 EXPECT_TRUE(SetupEngineWithSendStream()); | 1346 EXPECT_TRUE(SetupEngineWithSendStream()); |
1282 int channel_num = voe_.GetLastChannel(); | 1347 int channel_num = voe_.GetLastChannel(); |
1283 cricket::AudioSendParameters parameters; | 1348 cricket::AudioSendParameters parameters; |
1284 parameters.codecs.push_back(kOpusCodec); | 1349 parameters.codecs.push_back(kOpusCodec); |
1285 parameters.codecs[0].bitrate = 0; | 1350 parameters.codecs[0].bitrate = 0; |
1286 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1351 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1287 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1352 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1288 EXPECT_EQ(cricket::kOpusBandwidthNb, | 1353 EXPECT_EQ(cricket::kOpusBandwidthNb, |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1911 parameters.codecs[0].params[""] = "97/97"; | 1976 parameters.codecs[0].params[""] = "97/97"; |
1912 parameters.codecs[1].id = 96; | 1977 parameters.codecs[1].id = 96; |
1913 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1978 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1914 webrtc::CodecInst gcodec; | 1979 webrtc::CodecInst gcodec; |
1915 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); | 1980 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); |
1916 EXPECT_EQ(96, gcodec.pltype); | 1981 EXPECT_EQ(96, gcodec.pltype); |
1917 EXPECT_STREQ("ISAC", gcodec.plname); | 1982 EXPECT_STREQ("ISAC", gcodec.plname); |
1918 EXPECT_FALSE(voe_.GetRED(channel_num)); | 1983 EXPECT_FALSE(voe_.GetRED(channel_num)); |
1919 } | 1984 } |
1920 | 1985 |
| 1986 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
| 1987 public: |
| 1988 WebRtcVoiceEngineWithSendSideBweTest() |
| 1989 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} |
| 1990 }; |
| 1991 |
| 1992 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, |
| 1993 SupportsTransportSequenceNumberHeaderExtension) { |
| 1994 cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); |
| 1995 ASSERT_FALSE(capabilities.header_extensions.empty()); |
| 1996 for (const cricket::RtpHeaderExtension& extension : |
| 1997 capabilities.header_extensions) { |
| 1998 if (extension.uri == cricket::kRtpTransportSequenceNumberHeaderExtension) { |
| 1999 EXPECT_EQ(cricket::kRtpTransportSequenceNumberHeaderExtensionDefaultId, |
| 2000 extension.id); |
| 2001 return; |
| 2002 } |
| 2003 } |
| 2004 FAIL() << "Transport sequence number extension not in header-extension list."; |
| 2005 } |
| 2006 |
| 2007 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, |
| 2008 FiltersExtensionsPicksTransportSeqNum) { |
| 2009 // Enable three redundant extensions. |
| 2010 std::vector<std::string> extensions; |
| 2011 extensions.push_back(cricket::kRtpAbsoluteSenderTimeHeaderExtension); |
| 2012 extensions.push_back(cricket::kRtpTransportSequenceNumberHeaderExtension); |
| 2013 TestExtensionFilter(extensions, |
| 2014 cricket::kRtpTransportSequenceNumberHeaderExtension); |
| 2015 } |
| 2016 |
1921 // Test support for audio level header extension. | 2017 // Test support for audio level header extension. |
1922 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { | 2018 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { |
1923 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); | 2019 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); |
1924 } | 2020 } |
1925 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) { | 2021 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) { |
1926 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); | 2022 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); |
1927 } | 2023 } |
1928 | 2024 |
1929 // Test support for absolute send time header extension. | 2025 // Test support for absolute send time header extension. |
1930 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { | 2026 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { |
(...skipping 1307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3238 cricket::WebRtcVoiceEngine engine; | 3334 cricket::WebRtcVoiceEngine engine; |
3239 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3335 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); |
3240 rtc::scoped_ptr<webrtc::Call> call( | 3336 rtc::scoped_ptr<webrtc::Call> call( |
3241 webrtc::Call::Create(webrtc::Call::Config())); | 3337 webrtc::Call::Create(webrtc::Call::Config())); |
3242 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), | 3338 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), |
3243 call.get()); | 3339 call.get()); |
3244 cricket::AudioRecvParameters parameters; | 3340 cricket::AudioRecvParameters parameters; |
3245 parameters.codecs = engine.codecs(); | 3341 parameters.codecs = engine.codecs(); |
3246 EXPECT_TRUE(channel.SetRecvParameters(parameters)); | 3342 EXPECT_TRUE(channel.SetRecvParameters(parameters)); |
3247 } | 3343 } |
OLD | NEW |