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

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

Issue 2685893002: Support N unsignaled audio streams (Closed)
Patch Set: comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 29 matching lines...) Expand all
40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2);
41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1);
42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1);
43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1);
44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1);
45 const cricket::AudioCodec 45 const cricket::AudioCodec
46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1);
47 const cricket::AudioCodec 47 const cricket::AudioCodec
48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1);
49 49
50 const uint32_t kSsrc1 = 0x99; 50 const uint32_t kSsrc1 = 1;
51 const uint32_t kSsrc2 = 2; 51 const uint32_t kSsrc2 = 2;
52 const uint32_t kSsrc3 = 3; 52 const uint32_t kSsrc3 = 3;
53 const uint32_t kSsrc4 = 0x42; 53 const uint32_t kSsrc4 = 0x42;
54 const uint32_t kSsrc9 = 0x9;
54 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; 55 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 };
55 56
56 constexpr int kRtpHistoryMs = 5000; 57 constexpr int kRtpHistoryMs = 5000;
57 58
58 class FakeVoEWrapper : public cricket::VoEWrapper { 59 class FakeVoEWrapper : public cricket::VoEWrapper {
59 public: 60 public:
60 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) 61 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine)
61 : cricket::VoEWrapper(engine, // processing 62 : cricket::VoEWrapper(engine, // processing
62 engine, // base 63 engine, // base
63 engine, // codec 64 engine, // codec
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); 131 EXPECT_CALL(apm_, SetExtraOptions(testing::_));
131 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), 132 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(),
132 cricket::AudioOptions()); 133 cricket::AudioOptions());
133 return (channel_ != nullptr); 134 return (channel_ != nullptr);
134 } 135 }
135 136
136 bool SetupRecvStream() { 137 bool SetupRecvStream() {
137 if (!SetupChannel()) { 138 if (!SetupChannel()) {
138 return false; 139 return false;
139 } 140 }
140 return AddRecvStream(kSsrc1); 141 return AddRecvStream(kSsrc9);
Taylor Brandstetter 2017/02/17 10:34:46 What was the motivation for changing to kSsrc9? I
the sun 2017/02/17 11:22:47 kPcmuFrame has hard coded SSRC=1, so it is sometim
Taylor Brandstetter 2017/02/17 16:10:53 I'd suggest fixing that problem by either renaming
141 } 142 }
142 143
143 bool SetupSendStream() { 144 bool SetupSendStream() {
144 if (!SetupChannel()) { 145 if (!SetupChannel()) {
145 return false; 146 return false;
146 } 147 }
147 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) { 148 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc9))) {
148 return false; 149 return false;
149 } 150 }
150 EXPECT_CALL(apm_, set_output_will_be_muted(false)); 151 EXPECT_CALL(apm_, set_output_will_be_muted(false));
151 return channel_->SetAudioSend(kSsrc1, true, nullptr, &fake_source_); 152 return channel_->SetAudioSend(kSsrc9, true, nullptr, &fake_source_);
152 } 153 }
153 154
154 bool AddRecvStream(uint32_t ssrc) { 155 bool AddRecvStream(uint32_t ssrc) {
155 EXPECT_TRUE(channel_); 156 EXPECT_TRUE(channel_);
156 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc)); 157 return channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(ssrc));
157 } 158 }
158 159
159 void SetupForMultiSendStream() { 160 void SetupForMultiSendStream() {
160 EXPECT_TRUE(SetupSendStream()); 161 EXPECT_TRUE(SetupSendStream());
161 // Remove stream added in Setup. 162 // Remove stream added in Setup.
162 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); 163 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9));
163 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc1)); 164 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc9));
164 // Verify the channel does not exist. 165 // Verify the channel does not exist.
165 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc1)); 166 EXPECT_FALSE(call_.GetAudioSendStream(kSsrc9));
166 } 167 }
167 168
168 void DeliverPacket(const void* data, int len) { 169 void DeliverPacket(const void* data, int len) {
169 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len); 170 rtc::CopyOnWriteBuffer packet(reinterpret_cast<const uint8_t*>(data), len);
170 channel_->OnPacketReceived(&packet, rtc::PacketTime()); 171 channel_->OnPacketReceived(&packet, rtc::PacketTime());
171 } 172 }
172 173
173 void TearDown() override { 174 void TearDown() override {
174 delete channel_; 175 delete channel_;
175 } 176 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source)); 225 EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source));
225 } 226 }
226 227
227 void TestInsertDtmf(uint32_t ssrc, bool caller, 228 void TestInsertDtmf(uint32_t ssrc, bool caller,
228 const cricket::AudioCodec& codec) { 229 const cricket::AudioCodec& codec) {
229 EXPECT_TRUE(SetupChannel()); 230 EXPECT_TRUE(SetupChannel());
230 if (caller) { 231 if (caller) {
231 // If this is a caller, local description will be applied and add the 232 // If this is a caller, local description will be applied and add the
232 // send stream. 233 // send stream.
233 EXPECT_TRUE(channel_->AddSendStream( 234 EXPECT_TRUE(channel_->AddSendStream(
234 cricket::StreamParams::CreateLegacy(kSsrc1))); 235 cricket::StreamParams::CreateLegacy(kSsrc9)));
235 } 236 }
236 237
237 // Test we can only InsertDtmf when the other side supports telephone-event. 238 // Test we can only InsertDtmf when the other side supports telephone-event.
238 SetSendParameters(send_parameters_); 239 SetSendParameters(send_parameters_);
239 SetSend(true); 240 SetSend(true);
240 EXPECT_FALSE(channel_->CanInsertDtmf()); 241 EXPECT_FALSE(channel_->CanInsertDtmf());
241 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); 242 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111));
242 send_parameters_.codecs.push_back(codec); 243 send_parameters_.codecs.push_back(codec);
243 SetSendParameters(send_parameters_); 244 SetSendParameters(send_parameters_);
244 EXPECT_TRUE(channel_->CanInsertDtmf()); 245 EXPECT_TRUE(channel_->CanInsertDtmf());
245 246
246 if (!caller) { 247 if (!caller) {
247 // If this is callee, there's no active send channel yet. 248 // If this is callee, there's no active send channel yet.
248 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); 249 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123));
249 EXPECT_TRUE(channel_->AddSendStream( 250 EXPECT_TRUE(channel_->AddSendStream(
250 cricket::StreamParams::CreateLegacy(kSsrc1))); 251 cricket::StreamParams::CreateLegacy(kSsrc9)));
251 } 252 }
252 253
253 // Check we fail if the ssrc is invalid. 254 // Check we fail if the ssrc is invalid.
254 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); 255 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111));
255 256
256 // Test send. 257 // Test send.
257 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = 258 cricket::FakeAudioSendStream::TelephoneEvent telephone_event =
258 GetSendStream(kSsrc1).GetLatestTelephoneEvent(); 259 GetSendStream(kSsrc9).GetLatestTelephoneEvent();
259 EXPECT_EQ(-1, telephone_event.payload_type); 260 EXPECT_EQ(-1, telephone_event.payload_type);
260 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); 261 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123));
261 telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); 262 telephone_event = GetSendStream(kSsrc9).GetLatestTelephoneEvent();
262 EXPECT_EQ(codec.id, telephone_event.payload_type); 263 EXPECT_EQ(codec.id, telephone_event.payload_type);
263 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency); 264 EXPECT_EQ(codec.clockrate, telephone_event.payload_frequency);
264 EXPECT_EQ(2, telephone_event.event_code); 265 EXPECT_EQ(2, telephone_event.event_code);
265 EXPECT_EQ(123, telephone_event.duration_ms); 266 EXPECT_EQ(123, telephone_event.duration_ms);
266 } 267 }
267 268
268 // Test that send bandwidth is set correctly. 269 // Test that send bandwidth is set correctly.
269 // |codec| is the codec under test. 270 // |codec| is the codec under test.
270 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). 271 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth().
271 // |expected_result| is the expected result from SetMaxSendBandwidth(). 272 // |expected_result| is the expected result from SetMaxSendBandwidth().
272 // |expected_bitrate| is the expected audio bitrate afterward. 273 // |expected_bitrate| is the expected audio bitrate afterward.
273 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, 274 void TestMaxSendBandwidth(const cricket::AudioCodec& codec,
274 int max_bitrate, 275 int max_bitrate,
275 bool expected_result, 276 bool expected_result,
276 int expected_bitrate) { 277 int expected_bitrate) {
277 cricket::AudioSendParameters parameters; 278 cricket::AudioSendParameters parameters;
278 parameters.codecs.push_back(codec); 279 parameters.codecs.push_back(codec);
279 parameters.max_bandwidth_bps = max_bitrate; 280 parameters.max_bandwidth_bps = max_bitrate;
280 if (expected_result) { 281 if (expected_result) {
281 SetSendParameters(parameters); 282 SetSendParameters(parameters);
282 } else { 283 } else {
283 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 284 EXPECT_FALSE(channel_->SetSendParameters(parameters));
284 } 285 }
285 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrc1)); 286 EXPECT_EQ(expected_bitrate, GetCodecBitrate(kSsrc9));
286 } 287 }
287 288
288 // Sets the per-stream maximum bitrate limit for the specified SSRC. 289 // Sets the per-stream maximum bitrate limit for the specified SSRC.
289 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { 290 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) {
290 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); 291 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc);
291 EXPECT_EQ(1UL, parameters.encodings.size()); 292 EXPECT_EQ(1UL, parameters.encodings.size());
292 293
293 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate); 294 parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate);
294 return channel_->SetRtpSendParameters(ssrc, parameters); 295 return channel_->SetRtpSendParameters(ssrc, parameters);
295 } 296 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { 335 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) {
335 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; 336 return GetSendStreamConfig(ssrc).audio_network_adaptor_config;
336 } 337 }
337 338
338 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, 339 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec,
339 int global_max, 340 int global_max,
340 int stream_max, 341 int stream_max,
341 bool expected_result, 342 bool expected_result,
342 int expected_codec_bitrate) { 343 int expected_codec_bitrate) {
343 // Clear the bitrate limit from the previous test case. 344 // Clear the bitrate limit from the previous test case.
344 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc1, -1)); 345 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc9, -1));
345 346
346 // Attempt to set the requested bitrate limits. 347 // Attempt to set the requested bitrate limits.
347 SetGlobalMaxBitrate(codec, global_max); 348 SetGlobalMaxBitrate(codec, global_max);
348 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc1, stream_max)); 349 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc9, stream_max));
349 350
350 // Verify that reading back the parameters gives results 351 // Verify that reading back the parameters gives results
351 // consistent with the Set() result. 352 // consistent with the Set() result.
352 webrtc::RtpParameters resulting_parameters = 353 webrtc::RtpParameters resulting_parameters =
353 channel_->GetRtpSendParameters(kSsrc1); 354 channel_->GetRtpSendParameters(kSsrc9);
354 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); 355 EXPECT_EQ(1UL, resulting_parameters.encodings.size());
355 EXPECT_EQ(expected_result ? stream_max : -1, 356 EXPECT_EQ(expected_result ? stream_max : -1,
356 resulting_parameters.encodings[0].max_bitrate_bps); 357 resulting_parameters.encodings[0].max_bitrate_bps);
357 358
358 // Verify that the codec settings have the expected bitrate. 359 // Verify that the codec settings have the expected bitrate.
359 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc1)); 360 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc9));
360 } 361 }
361 362
362 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, 363 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps,
363 int expected_min_bitrate_bps, 364 int expected_min_bitrate_bps,
364 const char* start_bitrate_kbps, 365 const char* start_bitrate_kbps,
365 int expected_start_bitrate_bps, 366 int expected_start_bitrate_bps,
366 const char* max_bitrate_kbps, 367 const char* max_bitrate_kbps,
367 int expected_max_bitrate_bps) { 368 int expected_max_bitrate_bps) {
368 EXPECT_TRUE(SetupSendStream()); 369 EXPECT_TRUE(SetupSendStream());
369 auto& codecs = send_parameters_.codecs; 370 auto& codecs = send_parameters_.codecs;
370 codecs.clear(); 371 codecs.clear();
371 codecs.push_back(kOpusCodec); 372 codecs.push_back(kOpusCodec);
372 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps; 373 codecs[0].params[cricket::kCodecParamMinBitrate] = min_bitrate_kbps;
373 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps; 374 codecs[0].params[cricket::kCodecParamStartBitrate] = start_bitrate_kbps;
374 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps; 375 codecs[0].params[cricket::kCodecParamMaxBitrate] = max_bitrate_kbps;
375 SetSendParameters(send_parameters_); 376 SetSendParameters(send_parameters_);
376 377
377 EXPECT_EQ(expected_min_bitrate_bps, 378 EXPECT_EQ(expected_min_bitrate_bps,
378 call_.GetConfig().bitrate_config.min_bitrate_bps); 379 call_.GetConfig().bitrate_config.min_bitrate_bps);
379 EXPECT_EQ(expected_start_bitrate_bps, 380 EXPECT_EQ(expected_start_bitrate_bps,
380 call_.GetConfig().bitrate_config.start_bitrate_bps); 381 call_.GetConfig().bitrate_config.start_bitrate_bps);
381 EXPECT_EQ(expected_max_bitrate_bps, 382 EXPECT_EQ(expected_max_bitrate_bps,
382 call_.GetConfig().bitrate_config.max_bitrate_bps); 383 call_.GetConfig().bitrate_config.max_bitrate_bps);
383 } 384 }
384 385
385 void TestSetSendRtpHeaderExtensions(const std::string& ext) { 386 void TestSetSendRtpHeaderExtensions(const std::string& ext) {
386 EXPECT_TRUE(SetupSendStream()); 387 EXPECT_TRUE(SetupSendStream());
387 388
388 // Ensure extensions are off by default. 389 // Ensure extensions are off by default.
389 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 390 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size());
390 391
391 // Ensure unknown extensions won't cause an error. 392 // Ensure unknown extensions won't cause an error.
392 send_parameters_.extensions.push_back( 393 send_parameters_.extensions.push_back(
393 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); 394 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1));
394 SetSendParameters(send_parameters_); 395 SetSendParameters(send_parameters_);
395 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 396 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size());
396 397
397 // Ensure extensions stay off with an empty list of headers. 398 // Ensure extensions stay off with an empty list of headers.
398 send_parameters_.extensions.clear(); 399 send_parameters_.extensions.clear();
399 SetSendParameters(send_parameters_); 400 SetSendParameters(send_parameters_);
400 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 401 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size());
401 402
402 // Ensure extension is set properly. 403 // Ensure extension is set properly.
403 const int id = 1; 404 const int id = 1;
404 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); 405 send_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id));
405 SetSendParameters(send_parameters_); 406 SetSendParameters(send_parameters_);
406 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 407 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc9).rtp.extensions.size());
407 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc1).rtp.extensions[0].uri); 408 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc9).rtp.extensions[0].uri);
408 EXPECT_EQ(id, GetSendStreamConfig(kSsrc1).rtp.extensions[0].id); 409 EXPECT_EQ(id, GetSendStreamConfig(kSsrc9).rtp.extensions[0].id);
409 410
410 // Ensure extension is set properly on new stream. 411 // Ensure extension is set properly on new stream.
411 EXPECT_TRUE(channel_->AddSendStream( 412 EXPECT_TRUE(channel_->AddSendStream(
412 cricket::StreamParams::CreateLegacy(kSsrc2))); 413 cricket::StreamParams::CreateLegacy(kSsrc2)));
413 EXPECT_NE(call_.GetAudioSendStream(kSsrc1), 414 EXPECT_NE(call_.GetAudioSendStream(kSsrc9),
414 call_.GetAudioSendStream(kSsrc2)); 415 call_.GetAudioSendStream(kSsrc2));
415 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); 416 EXPECT_EQ(1u, GetSendStreamConfig(kSsrc2).rtp.extensions.size());
416 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri); 417 EXPECT_EQ(ext, GetSendStreamConfig(kSsrc2).rtp.extensions[0].uri);
417 EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id); 418 EXPECT_EQ(id, GetSendStreamConfig(kSsrc2).rtp.extensions[0].id);
418 419
419 // Ensure all extensions go back off with an empty list. 420 // Ensure all extensions go back off with an empty list.
420 send_parameters_.codecs.push_back(kPcmuCodec); 421 send_parameters_.codecs.push_back(kPcmuCodec);
421 send_parameters_.extensions.clear(); 422 send_parameters_.extensions.clear();
422 SetSendParameters(send_parameters_); 423 SetSendParameters(send_parameters_);
423 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 424 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc9).rtp.extensions.size());
424 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc2).rtp.extensions.size()); 425 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc2).rtp.extensions.size());
425 } 426 }
426 427
427 void TestSetRecvRtpHeaderExtensions(const std::string& ext) { 428 void TestSetRecvRtpHeaderExtensions(const std::string& ext) {
428 EXPECT_TRUE(SetupRecvStream()); 429 EXPECT_TRUE(SetupRecvStream());
429 430
430 // Ensure extensions are off by default. 431 // Ensure extensions are off by default.
431 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); 432 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size());
432 433
433 // Ensure unknown extensions won't cause an error. 434 // Ensure unknown extensions won't cause an error.
434 recv_parameters_.extensions.push_back( 435 recv_parameters_.extensions.push_back(
435 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1)); 436 webrtc::RtpExtension("urn:ietf:params:unknownextention", 1));
436 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 437 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
437 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); 438 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size());
438 439
439 // Ensure extensions stay off with an empty list of headers. 440 // Ensure extensions stay off with an empty list of headers.
440 recv_parameters_.extensions.clear(); 441 recv_parameters_.extensions.clear();
441 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 442 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
442 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); 443 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size());
443 444
444 // Ensure extension is set properly. 445 // Ensure extension is set properly.
445 const int id = 2; 446 const int id = 2;
446 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id)); 447 recv_parameters_.extensions.push_back(webrtc::RtpExtension(ext, id));
447 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 448 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
448 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); 449 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size());
449 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].uri); 450 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc9).rtp.extensions[0].uri);
450 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc1).rtp.extensions[0].id); 451 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc9).rtp.extensions[0].id);
451 452
452 // Ensure extension is set properly on new stream. 453 // Ensure extension is set properly on new stream.
453 EXPECT_TRUE(AddRecvStream(kSsrc2)); 454 EXPECT_TRUE(AddRecvStream(kSsrc2));
454 EXPECT_NE(call_.GetAudioReceiveStream(kSsrc1), 455 EXPECT_NE(call_.GetAudioReceiveStream(kSsrc9),
455 call_.GetAudioReceiveStream(kSsrc2)); 456 call_.GetAudioReceiveStream(kSsrc2));
456 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); 457 EXPECT_EQ(1u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size());
457 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri); 458 EXPECT_EQ(ext, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].uri);
458 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id); 459 EXPECT_EQ(id, GetRecvStreamConfig(kSsrc2).rtp.extensions[0].id);
459 460
460 // Ensure all extensions go back off with an empty list. 461 // Ensure all extensions go back off with an empty list.
461 recv_parameters_.extensions.clear(); 462 recv_parameters_.extensions.clear();
462 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 463 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
463 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc1).rtp.extensions.size()); 464 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc9).rtp.extensions.size());
464 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size()); 465 EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size());
465 } 466 }
466 467
467 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const { 468 webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const {
468 webrtc::AudioSendStream::Stats stats; 469 webrtc::AudioSendStream::Stats stats;
469 stats.local_ssrc = 12; 470 stats.local_ssrc = 12;
470 stats.bytes_sent = 345; 471 stats.bytes_sent = 345;
471 stats.packets_sent = 678; 472 stats.packets_sent = 678;
472 stats.packets_lost = 9012; 473 stats.packets_lost = 9012;
473 stats.fraction_lost = 34.56f; 474 stats.fraction_lost = 34.56f;
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 622
622 // Tests that we can create and destroy a channel. 623 // Tests that we can create and destroy a channel.
623 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { 624 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) {
624 EXPECT_TRUE(SetupChannel()); 625 EXPECT_TRUE(SetupChannel());
625 } 626 }
626 627
627 // Test that we can add a send stream and that it has the correct defaults. 628 // Test that we can add a send stream and that it has the correct defaults.
628 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) { 629 TEST_F(WebRtcVoiceEngineTestFake, CreateSendStream) {
629 EXPECT_TRUE(SetupChannel()); 630 EXPECT_TRUE(SetupChannel());
630 EXPECT_TRUE( 631 EXPECT_TRUE(
631 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))); 632 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc9)));
632 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrc1); 633 const webrtc::AudioSendStream::Config& config = GetSendStreamConfig(kSsrc9);
633 EXPECT_EQ(kSsrc1, config.rtp.ssrc); 634 EXPECT_EQ(kSsrc9, config.rtp.ssrc);
634 EXPECT_EQ("", config.rtp.c_name); 635 EXPECT_EQ("", config.rtp.c_name);
635 EXPECT_EQ(0u, config.rtp.extensions.size()); 636 EXPECT_EQ(0u, config.rtp.extensions.size());
636 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), 637 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_),
637 config.send_transport); 638 config.send_transport);
638 } 639 }
639 640
640 // Test that we can add a receive stream and that it has the correct defaults. 641 // Test that we can add a receive stream and that it has the correct defaults.
641 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) { 642 TEST_F(WebRtcVoiceEngineTestFake, CreateRecvStream) {
642 EXPECT_TRUE(SetupChannel()); 643 EXPECT_TRUE(SetupChannel());
643 EXPECT_TRUE(AddRecvStream(kSsrc1)); 644 EXPECT_TRUE(AddRecvStream(kSsrc9));
644 const webrtc::AudioReceiveStream::Config& config = 645 const webrtc::AudioReceiveStream::Config& config =
645 GetRecvStreamConfig(kSsrc1); 646 GetRecvStreamConfig(kSsrc9);
646 EXPECT_EQ(kSsrc1, config.rtp.remote_ssrc); 647 EXPECT_EQ(kSsrc9, config.rtp.remote_ssrc);
647 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); 648 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc);
648 EXPECT_FALSE(config.rtp.transport_cc); 649 EXPECT_FALSE(config.rtp.transport_cc);
649 EXPECT_EQ(0u, config.rtp.extensions.size()); 650 EXPECT_EQ(0u, config.rtp.extensions.size());
650 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), 651 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_),
651 config.rtcp_send_transport); 652 config.rtcp_send_transport);
652 EXPECT_EQ("", config.sync_group); 653 EXPECT_EQ("", config.sync_group);
653 } 654 }
654 655
655 // Tests that the list of supported codecs is created properly and ordered 656 // Tests that the list of supported codecs is created properly and ordered
656 // correctly (such that opus appears first). 657 // correctly (such that opus appears first).
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { 722 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) {
722 EXPECT_TRUE(SetupChannel()); 723 EXPECT_TRUE(SetupChannel());
723 cricket::AudioRecvParameters parameters; 724 cricket::AudioRecvParameters parameters;
724 parameters.codecs.push_back(kIsacCodec); 725 parameters.codecs.push_back(kIsacCodec);
725 parameters.codecs.push_back(kPcmuCodec); 726 parameters.codecs.push_back(kPcmuCodec);
726 parameters.codecs.push_back(kTelephoneEventCodec1); 727 parameters.codecs.push_back(kTelephoneEventCodec1);
727 parameters.codecs.push_back(kTelephoneEventCodec2); 728 parameters.codecs.push_back(kTelephoneEventCodec2);
728 parameters.codecs[0].id = 106; // collide with existing CN 32k 729 parameters.codecs[0].id = 106; // collide with existing CN 32k
729 parameters.codecs[2].id = 126; 730 parameters.codecs[2].id = 126;
730 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 731 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
731 EXPECT_TRUE(AddRecvStream(kSsrc1)); 732 EXPECT_TRUE(AddRecvStream(kSsrc9));
732 int channel_num = voe_.GetLastChannel(); 733 int channel_num = voe_.GetLastChannel();
733 734
734 webrtc::CodecInst gcodec; 735 webrtc::CodecInst gcodec;
735 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); 736 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC");
736 gcodec.plfreq = 16000; 737 gcodec.plfreq = 16000;
737 gcodec.channels = 1; 738 gcodec.channels = 1;
738 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); 739 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec));
739 EXPECT_EQ(106, gcodec.pltype); 740 EXPECT_EQ(106, gcodec.pltype);
740 EXPECT_STREQ("ISAC", gcodec.plname); 741 EXPECT_STREQ("ISAC", gcodec.plname);
741 742
(...skipping 29 matching lines...) Expand all
771 } 772 }
772 773
773 // Test that we can decode OPUS without stereo parameters. 774 // Test that we can decode OPUS without stereo parameters.
774 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { 775 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) {
775 EXPECT_TRUE(SetupChannel()); 776 EXPECT_TRUE(SetupChannel());
776 cricket::AudioRecvParameters parameters; 777 cricket::AudioRecvParameters parameters;
777 parameters.codecs.push_back(kIsacCodec); 778 parameters.codecs.push_back(kIsacCodec);
778 parameters.codecs.push_back(kPcmuCodec); 779 parameters.codecs.push_back(kPcmuCodec);
779 parameters.codecs.push_back(kOpusCodec); 780 parameters.codecs.push_back(kOpusCodec);
780 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 781 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
781 EXPECT_TRUE(AddRecvStream(kSsrc1)); 782 EXPECT_TRUE(AddRecvStream(kSsrc9));
782 int channel_num = voe_.GetLastChannel(); 783 int channel_num = voe_.GetLastChannel();
783 webrtc::CodecInst opus; 784 webrtc::CodecInst opus;
784 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); 785 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus);
785 // Even without stereo parameters, recv codecs still specify channels = 2. 786 // Even without stereo parameters, recv codecs still specify channels = 2.
786 EXPECT_EQ(2, opus.channels); 787 EXPECT_EQ(2, opus.channels);
787 EXPECT_EQ(111, opus.pltype); 788 EXPECT_EQ(111, opus.pltype);
788 EXPECT_STREQ("opus", opus.plname); 789 EXPECT_STREQ("opus", opus.plname);
789 opus.pltype = 0; 790 opus.pltype = 0;
790 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); 791 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus));
791 EXPECT_EQ(111, opus.pltype); 792 EXPECT_EQ(111, opus.pltype);
792 } 793 }
793 794
794 // Test that we can decode OPUS with stereo = 0. 795 // Test that we can decode OPUS with stereo = 0.
795 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { 796 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) {
796 EXPECT_TRUE(SetupChannel()); 797 EXPECT_TRUE(SetupChannel());
797 cricket::AudioRecvParameters parameters; 798 cricket::AudioRecvParameters parameters;
798 parameters.codecs.push_back(kIsacCodec); 799 parameters.codecs.push_back(kIsacCodec);
799 parameters.codecs.push_back(kPcmuCodec); 800 parameters.codecs.push_back(kPcmuCodec);
800 parameters.codecs.push_back(kOpusCodec); 801 parameters.codecs.push_back(kOpusCodec);
801 parameters.codecs[2].params["stereo"] = "0"; 802 parameters.codecs[2].params["stereo"] = "0";
802 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 803 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
803 EXPECT_TRUE(AddRecvStream(kSsrc1)); 804 EXPECT_TRUE(AddRecvStream(kSsrc9));
804 int channel_num2 = voe_.GetLastChannel(); 805 int channel_num2 = voe_.GetLastChannel();
805 webrtc::CodecInst opus; 806 webrtc::CodecInst opus;
806 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); 807 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus);
807 // Even when stereo is off, recv codecs still specify channels = 2. 808 // Even when stereo is off, recv codecs still specify channels = 2.
808 EXPECT_EQ(2, opus.channels); 809 EXPECT_EQ(2, opus.channels);
809 EXPECT_EQ(111, opus.pltype); 810 EXPECT_EQ(111, opus.pltype);
810 EXPECT_STREQ("opus", opus.plname); 811 EXPECT_STREQ("opus", opus.plname);
811 opus.pltype = 0; 812 opus.pltype = 0;
812 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 813 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus));
813 EXPECT_EQ(111, opus.pltype); 814 EXPECT_EQ(111, opus.pltype);
814 } 815 }
815 816
816 // Test that we can decode OPUS with stereo = 1. 817 // Test that we can decode OPUS with stereo = 1.
817 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { 818 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) {
818 EXPECT_TRUE(SetupChannel()); 819 EXPECT_TRUE(SetupChannel());
819 cricket::AudioRecvParameters parameters; 820 cricket::AudioRecvParameters parameters;
820 parameters.codecs.push_back(kIsacCodec); 821 parameters.codecs.push_back(kIsacCodec);
821 parameters.codecs.push_back(kPcmuCodec); 822 parameters.codecs.push_back(kPcmuCodec);
822 parameters.codecs.push_back(kOpusCodec); 823 parameters.codecs.push_back(kOpusCodec);
823 parameters.codecs[2].params["stereo"] = "1"; 824 parameters.codecs[2].params["stereo"] = "1";
824 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 825 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
825 EXPECT_TRUE(AddRecvStream(kSsrc1)); 826 EXPECT_TRUE(AddRecvStream(kSsrc9));
826 int channel_num2 = voe_.GetLastChannel(); 827 int channel_num2 = voe_.GetLastChannel();
827 webrtc::CodecInst opus; 828 webrtc::CodecInst opus;
828 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); 829 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus);
829 EXPECT_EQ(2, opus.channels); 830 EXPECT_EQ(2, opus.channels);
830 EXPECT_EQ(111, opus.pltype); 831 EXPECT_EQ(111, opus.pltype);
831 EXPECT_STREQ("opus", opus.plname); 832 EXPECT_STREQ("opus", opus.plname);
832 opus.pltype = 0; 833 opus.pltype = 0;
833 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); 834 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus));
834 EXPECT_EQ(111, opus.pltype); 835 EXPECT_EQ(111, opus.pltype);
835 } 836 }
836 837
837 // Test that changes to recv codecs are applied to all streams. 838 // Test that changes to recv codecs are applied to all streams.
838 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { 839 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) {
839 EXPECT_TRUE(SetupChannel()); 840 EXPECT_TRUE(SetupChannel());
840 cricket::AudioRecvParameters parameters; 841 cricket::AudioRecvParameters parameters;
841 parameters.codecs.push_back(kIsacCodec); 842 parameters.codecs.push_back(kIsacCodec);
842 parameters.codecs.push_back(kPcmuCodec); 843 parameters.codecs.push_back(kPcmuCodec);
843 parameters.codecs.push_back(kTelephoneEventCodec1); 844 parameters.codecs.push_back(kTelephoneEventCodec1);
844 parameters.codecs.push_back(kTelephoneEventCodec2); 845 parameters.codecs.push_back(kTelephoneEventCodec2);
845 parameters.codecs[0].id = 106; // collide with existing CN 32k 846 parameters.codecs[0].id = 106; // collide with existing CN 32k
846 parameters.codecs[2].id = 126; 847 parameters.codecs[2].id = 126;
847 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 848 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
848 EXPECT_TRUE(AddRecvStream(kSsrc1)); 849 EXPECT_TRUE(AddRecvStream(kSsrc9));
849 int channel_num2 = voe_.GetLastChannel(); 850 int channel_num2 = voe_.GetLastChannel();
850 851
851 webrtc::CodecInst gcodec; 852 webrtc::CodecInst gcodec;
852 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); 853 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC");
853 gcodec.plfreq = 16000; 854 gcodec.plfreq = 16000;
854 gcodec.channels = 1; 855 gcodec.channels = 1;
855 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); 856 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec));
856 EXPECT_EQ(106, gcodec.pltype); 857 EXPECT_EQ(106, gcodec.pltype);
857 EXPECT_STREQ("ISAC", gcodec.plname); 858 EXPECT_STREQ("ISAC", gcodec.plname);
858 859
(...skipping 10 matching lines...) Expand all
869 EXPECT_STREQ("telephone-event", gcodec.plname); 870 EXPECT_STREQ("telephone-event", gcodec.plname);
870 } 871 }
871 872
872 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { 873 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) {
873 EXPECT_TRUE(SetupRecvStream()); 874 EXPECT_TRUE(SetupRecvStream());
874 cricket::AudioRecvParameters parameters; 875 cricket::AudioRecvParameters parameters;
875 parameters.codecs.push_back(kIsacCodec); 876 parameters.codecs.push_back(kIsacCodec);
876 parameters.codecs[0].id = 106; // collide with existing CN 32k 877 parameters.codecs[0].id = 106; // collide with existing CN 32k
877 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 878 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
878 879
879 const auto& dm = GetRecvStreamConfig(kSsrc1).decoder_map; 880 const auto& dm = GetRecvStreamConfig(kSsrc9).decoder_map;
880 ASSERT_EQ(1, dm.count(106)); 881 ASSERT_EQ(1, dm.count(106));
881 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106)); 882 EXPECT_EQ(webrtc::SdpAudioFormat("isac", 16000, 1), dm.at(106));
882 } 883 }
883 884
884 // Test that we can apply the same set of codecs again while playing. 885 // Test that we can apply the same set of codecs again while playing.
885 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) { 886 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWhilePlaying) {
886 EXPECT_TRUE(SetupRecvStream()); 887 EXPECT_TRUE(SetupRecvStream());
887 cricket::AudioRecvParameters parameters; 888 cricket::AudioRecvParameters parameters;
888 parameters.codecs.push_back(kIsacCodec); 889 parameters.codecs.push_back(kIsacCodec);
889 parameters.codecs.push_back(kCn16000Codec); 890 parameters.codecs.push_back(kCn16000Codec);
890 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 891 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
891 channel_->SetPlayout(true); 892 channel_->SetPlayout(true);
892 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 893 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
893 894
894 // Changing the payload type of a codec should fail. 895 // Changing the payload type of a codec should fail.
895 parameters.codecs[0].id = 127; 896 parameters.codecs[0].id = 127;
896 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); 897 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
897 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); 898 EXPECT_TRUE(GetRecvStream(kSsrc9).started());
898 } 899 }
899 900
900 // Test that we can add a codec while playing. 901 // Test that we can add a codec while playing.
901 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) { 902 TEST_F(WebRtcVoiceEngineTestFake, AddRecvCodecsWhilePlaying) {
902 EXPECT_TRUE(SetupRecvStream()); 903 EXPECT_TRUE(SetupRecvStream());
903 cricket::AudioRecvParameters parameters; 904 cricket::AudioRecvParameters parameters;
904 parameters.codecs.push_back(kIsacCodec); 905 parameters.codecs.push_back(kIsacCodec);
905 parameters.codecs.push_back(kCn16000Codec); 906 parameters.codecs.push_back(kCn16000Codec);
906 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 907 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
907 channel_->SetPlayout(true); 908 channel_->SetPlayout(true);
908 909
909 parameters.codecs.push_back(kOpusCodec); 910 parameters.codecs.push_back(kOpusCodec);
910 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 911 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
911 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); 912 EXPECT_TRUE(GetRecvStream(kSsrc9).started());
912 webrtc::CodecInst gcodec; 913 webrtc::CodecInst gcodec;
913 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec)); 914 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec));
914 EXPECT_EQ(kOpusCodec.id, gcodec.pltype); 915 EXPECT_EQ(kOpusCodec.id, gcodec.pltype);
915 } 916 }
916 917
917 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { 918 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) {
918 EXPECT_TRUE(SetupSendStream()); 919 EXPECT_TRUE(SetupSendStream());
919 920
920 // Test that when autobw is enabled, bitrate is kept as the default 921 // Test that when autobw is enabled, bitrate is kept as the default
921 // value. autobw is enabled for the following tests because the target 922 // value. autobw is enabled for the following tests because the target
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 968
968 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { 969 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) {
969 EXPECT_TRUE(SetupChannel()); 970 EXPECT_TRUE(SetupChannel());
970 const int kDesiredBitrate = 128000; 971 const int kDesiredBitrate = 128000;
971 cricket::AudioSendParameters parameters; 972 cricket::AudioSendParameters parameters;
972 parameters.codecs = engine_->send_codecs(); 973 parameters.codecs = engine_->send_codecs();
973 parameters.max_bandwidth_bps = kDesiredBitrate; 974 parameters.max_bandwidth_bps = kDesiredBitrate;
974 SetSendParameters(parameters); 975 SetSendParameters(parameters);
975 976
976 EXPECT_TRUE(channel_->AddSendStream( 977 EXPECT_TRUE(channel_->AddSendStream(
977 cricket::StreamParams::CreateLegacy(kSsrc1))); 978 cricket::StreamParams::CreateLegacy(kSsrc9)));
978 979
979 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrc1)); 980 EXPECT_EQ(kDesiredBitrate, GetCodecBitrate(kSsrc9));
980 } 981 }
981 982
982 // Test that bitrate cannot be set for CBR codecs. 983 // Test that bitrate cannot be set for CBR codecs.
983 // Bitrate is ignored if it is higher than the fixed bitrate. 984 // Bitrate is ignored if it is higher than the fixed bitrate.
984 // Bitrate less then the fixed bitrate is an error. 985 // Bitrate less then the fixed bitrate is an error.
985 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { 986 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) {
986 EXPECT_TRUE(SetupSendStream()); 987 EXPECT_TRUE(SetupSendStream());
987 988
988 // PCMU, default bitrate == 64000. 989 // PCMU, default bitrate == 64000.
989 SetSendParameters(send_parameters_); 990 SetSendParameters(send_parameters_);
990 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); 991 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9));
991 992
992 send_parameters_.max_bandwidth_bps = 128000; 993 send_parameters_.max_bandwidth_bps = 128000;
993 SetSendParameters(send_parameters_); 994 SetSendParameters(send_parameters_);
994 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); 995 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9));
995 996
996 send_parameters_.max_bandwidth_bps = 128; 997 send_parameters_.max_bandwidth_bps = 128;
997 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); 998 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
998 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); 999 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9));
999 } 1000 }
1000 1001
1001 // Test that the per-stream bitrate limit and the global 1002 // Test that the per-stream bitrate limit and the global
1002 // bitrate limit both apply. 1003 // bitrate limit both apply.
1003 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { 1004 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) {
1004 EXPECT_TRUE(SetupSendStream()); 1005 EXPECT_TRUE(SetupSendStream());
1005 1006
1006 // opus, default bitrate == 64000. 1007 // opus, default bitrate == 64000.
1007 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); 1008 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000);
1008 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); 1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000);
1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); 1010 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000);
1010 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); 1011 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000);
1011 1012
1012 // CBR codecs allow both maximums to exceed the bitrate. 1013 // CBR codecs allow both maximums to exceed the bitrate.
1013 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); 1014 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000);
1014 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); 1015 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000);
1015 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); 1016 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000);
1016 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); 1017 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000);
1017 1018
1018 // CBR codecs don't allow per stream maximums to be too low. 1019 // CBR codecs don't allow per stream maximums to be too low.
1019 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000); 1020 SetAndExpectMaxBitrate(kPcmuCodec, 0, 63999, false, 64000);
1020 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000); 1021 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 63999, false, 64000);
1021 } 1022 }
1022 1023
1023 // Test that an attempt to set RtpParameters for a stream that does not exist 1024 // Test that an attempt to set RtpParameters for a stream that does not exist
1024 // fails. 1025 // fails.
1025 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) { 1026 TEST_F(WebRtcVoiceEngineTestFake, CannotSetMaxBitrateForNonexistentStream) {
1026 EXPECT_TRUE(SetupChannel()); 1027 EXPECT_TRUE(SetupChannel());
1027 webrtc::RtpParameters nonexistent_parameters = 1028 webrtc::RtpParameters nonexistent_parameters =
1028 channel_->GetRtpSendParameters(kSsrc1); 1029 channel_->GetRtpSendParameters(kSsrc9);
1029 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); 1030 EXPECT_EQ(0, nonexistent_parameters.encodings.size());
1030 1031
1031 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); 1032 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters());
1032 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, nonexistent_parameters)); 1033 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, nonexistent_parameters));
1033 } 1034 }
1034 1035
1035 TEST_F(WebRtcVoiceEngineTestFake, 1036 TEST_F(WebRtcVoiceEngineTestFake,
1036 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) { 1037 CannotSetRtpSendParametersWithIncorrectNumberOfEncodings) {
1037 // This test verifies that setting RtpParameters succeeds only if 1038 // This test verifies that setting RtpParameters succeeds only if
1038 // the structure contains exactly one encoding. 1039 // the structure contains exactly one encoding.
1039 // TODO(skvlad): Update this test when we start supporting setting parameters 1040 // TODO(skvlad): Update this test when we start supporting setting parameters
1040 // for each encoding individually. 1041 // for each encoding individually.
1041 1042
1042 EXPECT_TRUE(SetupSendStream()); 1043 EXPECT_TRUE(SetupSendStream());
1043 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); 1044 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9);
1044 // Two or more encodings should result in failure. 1045 // Two or more encodings should result in failure.
1045 parameters.encodings.push_back(webrtc::RtpEncodingParameters()); 1046 parameters.encodings.push_back(webrtc::RtpEncodingParameters());
1046 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); 1047 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters));
1047 // Zero encodings should also fail. 1048 // Zero encodings should also fail.
1048 parameters.encodings.clear(); 1049 parameters.encodings.clear();
1049 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); 1050 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters));
1050 } 1051 }
1051 1052
1052 // Changing the SSRC through RtpParameters is not allowed. 1053 // Changing the SSRC through RtpParameters is not allowed.
1053 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) { 1054 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) {
1054 EXPECT_TRUE(SetupSendStream()); 1055 EXPECT_TRUE(SetupSendStream());
1055 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); 1056 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9);
1056 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef); 1057 parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef);
1057 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc1, parameters)); 1058 EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrc9, parameters));
1058 } 1059 }
1059 1060
1060 // Test that a stream will not be sending if its encoding is made 1061 // Test that a stream will not be sending if its encoding is made
1061 // inactive through SetRtpSendParameters. 1062 // inactive through SetRtpSendParameters.
1062 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { 1063 TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) {
1063 EXPECT_TRUE(SetupSendStream()); 1064 EXPECT_TRUE(SetupSendStream());
1064 SetSend(true); 1065 SetSend(true);
1065 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 1066 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
1066 // Get current parameters and change "active" to false. 1067 // Get current parameters and change "active" to false.
1067 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc1); 1068 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrc9);
1068 ASSERT_EQ(1u, parameters.encodings.size()); 1069 ASSERT_EQ(1u, parameters.encodings.size());
1069 ASSERT_TRUE(parameters.encodings[0].active); 1070 ASSERT_TRUE(parameters.encodings[0].active);
1070 parameters.encodings[0].active = false; 1071 parameters.encodings[0].active = false;
1071 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); 1072 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, parameters));
1072 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 1073 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
1073 1074
1074 // Now change it back to active and verify we resume sending. 1075 // Now change it back to active and verify we resume sending.
1075 parameters.encodings[0].active = true; 1076 parameters.encodings[0].active = true;
1076 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, parameters)); 1077 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, parameters));
1077 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 1078 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
1078 } 1079 }
1079 1080
1080 // Test that SetRtpSendParameters configures the correct encoding channel for 1081 // Test that SetRtpSendParameters configures the correct encoding channel for
1081 // each SSRC. 1082 // each SSRC.
1082 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { 1083 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) {
1083 SetupForMultiSendStream(); 1084 SetupForMultiSendStream();
1084 // Create send streams. 1085 // Create send streams.
1085 for (uint32_t ssrc : kSsrcs4) { 1086 for (uint32_t ssrc : kSsrcs4) {
1086 EXPECT_TRUE( 1087 EXPECT_TRUE(
1087 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); 1088 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc)));
(...skipping 19 matching lines...) Expand all
1107 } 1108 }
1108 1109
1109 // Test that GetRtpSendParameters returns the currently configured codecs. 1110 // Test that GetRtpSendParameters returns the currently configured codecs.
1110 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { 1111 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) {
1111 EXPECT_TRUE(SetupSendStream()); 1112 EXPECT_TRUE(SetupSendStream());
1112 cricket::AudioSendParameters parameters; 1113 cricket::AudioSendParameters parameters;
1113 parameters.codecs.push_back(kIsacCodec); 1114 parameters.codecs.push_back(kIsacCodec);
1114 parameters.codecs.push_back(kPcmuCodec); 1115 parameters.codecs.push_back(kPcmuCodec);
1115 SetSendParameters(parameters); 1116 SetSendParameters(parameters);
1116 1117
1117 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); 1118 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc9);
1118 ASSERT_EQ(2u, rtp_parameters.codecs.size()); 1119 ASSERT_EQ(2u, rtp_parameters.codecs.size());
1119 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); 1120 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]);
1120 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); 1121 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]);
1121 } 1122 }
1122 1123
1123 // Test that GetRtpSendParameters returns an SSRC. 1124 // Test that GetRtpSendParameters returns an SSRC.
1124 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) { 1125 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersSsrc) {
1125 EXPECT_TRUE(SetupSendStream()); 1126 EXPECT_TRUE(SetupSendStream());
1126 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc1); 1127 webrtc::RtpParameters rtp_parameters = channel_->GetRtpSendParameters(kSsrc9);
1127 ASSERT_EQ(1u, rtp_parameters.encodings.size()); 1128 ASSERT_EQ(1u, rtp_parameters.encodings.size());
1128 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); 1129 EXPECT_EQ(kSsrc9, rtp_parameters.encodings[0].ssrc);
1129 } 1130 }
1130 1131
1131 // Test that if we set/get parameters multiple times, we get the same results. 1132 // Test that if we set/get parameters multiple times, we get the same results.
1132 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) { 1133 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpSendParameters) {
1133 EXPECT_TRUE(SetupSendStream()); 1134 EXPECT_TRUE(SetupSendStream());
1134 cricket::AudioSendParameters parameters; 1135 cricket::AudioSendParameters parameters;
1135 parameters.codecs.push_back(kIsacCodec); 1136 parameters.codecs.push_back(kIsacCodec);
1136 parameters.codecs.push_back(kPcmuCodec); 1137 parameters.codecs.push_back(kPcmuCodec);
1137 SetSendParameters(parameters); 1138 SetSendParameters(parameters);
1138 1139
1139 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrc1); 1140 webrtc::RtpParameters initial_params = channel_->GetRtpSendParameters(kSsrc9);
1140 1141
1141 // We should be able to set the params we just got. 1142 // We should be able to set the params we just got.
1142 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc1, initial_params)); 1143 EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrc9, initial_params));
1143 1144
1144 // ... And this shouldn't change the params returned by GetRtpSendParameters. 1145 // ... And this shouldn't change the params returned by GetRtpSendParameters.
1145 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrc1); 1146 webrtc::RtpParameters new_params = channel_->GetRtpSendParameters(kSsrc9);
1146 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrc1)); 1147 EXPECT_EQ(initial_params, channel_->GetRtpSendParameters(kSsrc9));
1147 } 1148 }
1148 1149
1149 // Test that GetRtpReceiveParameters returns the currently configured codecs. 1150 // Test that GetRtpReceiveParameters returns the currently configured codecs.
1150 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) { 1151 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersCodecs) {
1151 EXPECT_TRUE(SetupRecvStream()); 1152 EXPECT_TRUE(SetupRecvStream());
1152 cricket::AudioRecvParameters parameters; 1153 cricket::AudioRecvParameters parameters;
1153 parameters.codecs.push_back(kIsacCodec); 1154 parameters.codecs.push_back(kIsacCodec);
1154 parameters.codecs.push_back(kPcmuCodec); 1155 parameters.codecs.push_back(kPcmuCodec);
1155 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 1156 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1156 1157
1157 webrtc::RtpParameters rtp_parameters = 1158 webrtc::RtpParameters rtp_parameters =
1158 channel_->GetRtpReceiveParameters(kSsrc1); 1159 channel_->GetRtpReceiveParameters(kSsrc9);
1159 ASSERT_EQ(2u, rtp_parameters.codecs.size()); 1160 ASSERT_EQ(2u, rtp_parameters.codecs.size());
1160 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]); 1161 EXPECT_EQ(kIsacCodec.ToCodecParameters(), rtp_parameters.codecs[0]);
1161 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]); 1162 EXPECT_EQ(kPcmuCodec.ToCodecParameters(), rtp_parameters.codecs[1]);
1162 } 1163 }
1163 1164
1164 // Test that GetRtpReceiveParameters returns an SSRC. 1165 // Test that GetRtpReceiveParameters returns an SSRC.
1165 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) { 1166 TEST_F(WebRtcVoiceEngineTestFake, GetRtpReceiveParametersSsrc) {
1166 EXPECT_TRUE(SetupRecvStream()); 1167 EXPECT_TRUE(SetupRecvStream());
1167 webrtc::RtpParameters rtp_parameters = 1168 webrtc::RtpParameters rtp_parameters =
1168 channel_->GetRtpReceiveParameters(kSsrc1); 1169 channel_->GetRtpReceiveParameters(kSsrc9);
1169 ASSERT_EQ(1u, rtp_parameters.encodings.size()); 1170 ASSERT_EQ(1u, rtp_parameters.encodings.size());
1170 EXPECT_EQ(kSsrc1, rtp_parameters.encodings[0].ssrc); 1171 EXPECT_EQ(kSsrc9, rtp_parameters.encodings[0].ssrc);
1171 } 1172 }
1172 1173
1173 // Test that if we set/get parameters multiple times, we get the same results. 1174 // Test that if we set/get parameters multiple times, we get the same results.
1174 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) { 1175 TEST_F(WebRtcVoiceEngineTestFake, SetAndGetRtpReceiveParameters) {
1175 EXPECT_TRUE(SetupRecvStream()); 1176 EXPECT_TRUE(SetupRecvStream());
1176 cricket::AudioRecvParameters parameters; 1177 cricket::AudioRecvParameters parameters;
1177 parameters.codecs.push_back(kIsacCodec); 1178 parameters.codecs.push_back(kIsacCodec);
1178 parameters.codecs.push_back(kPcmuCodec); 1179 parameters.codecs.push_back(kPcmuCodec);
1179 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 1180 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1180 1181
1181 webrtc::RtpParameters initial_params = 1182 webrtc::RtpParameters initial_params =
1182 channel_->GetRtpReceiveParameters(kSsrc1); 1183 channel_->GetRtpReceiveParameters(kSsrc9);
1183 1184
1184 // We should be able to set the params we just got. 1185 // We should be able to set the params we just got.
1185 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrc1, initial_params)); 1186 EXPECT_TRUE(channel_->SetRtpReceiveParameters(kSsrc9, initial_params));
1186 1187
1187 // ... And this shouldn't change the params returned by 1188 // ... And this shouldn't change the params returned by
1188 // GetRtpReceiveParameters. 1189 // GetRtpReceiveParameters.
1189 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrc1); 1190 webrtc::RtpParameters new_params = channel_->GetRtpReceiveParameters(kSsrc9);
1190 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrc1)); 1191 EXPECT_EQ(initial_params, channel_->GetRtpReceiveParameters(kSsrc9));
1191 } 1192 }
1192 1193
1193 // Test that we apply codecs properly. 1194 // Test that we apply codecs properly.
1194 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { 1195 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) {
1195 EXPECT_TRUE(SetupSendStream()); 1196 EXPECT_TRUE(SetupSendStream());
1196 cricket::AudioSendParameters parameters; 1197 cricket::AudioSendParameters parameters;
1197 parameters.codecs.push_back(kIsacCodec); 1198 parameters.codecs.push_back(kIsacCodec);
1198 parameters.codecs.push_back(kPcmuCodec); 1199 parameters.codecs.push_back(kPcmuCodec);
1199 parameters.codecs.push_back(kCn8000Codec); 1200 parameters.codecs.push_back(kCn8000Codec);
1200 parameters.codecs[0].id = 96; 1201 parameters.codecs[0].id = 96;
1201 parameters.codecs[0].bitrate = 48000; 1202 parameters.codecs[0].bitrate = 48000;
1202 const int initial_num = call_.GetNumCreatedSendStreams(); 1203 const int initial_num = call_.GetNumCreatedSendStreams();
1203 SetSendParameters(parameters); 1204 SetSendParameters(parameters);
1204 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 1205 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1205 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 1206 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
1206 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1207 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1207 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); 1208 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate);
1208 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1209 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1209 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 1210 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1210 EXPECT_EQ(13, send_codec_spec.cng_payload_type); 1211 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
1211 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); 1212 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
1212 EXPECT_FALSE(channel_->CanInsertDtmf()); 1213 EXPECT_FALSE(channel_->CanInsertDtmf());
1213 } 1214 }
1214 1215
1215 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 1216 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried
(...skipping 14 matching lines...) Expand all
1230 SetSendParameters(parameters); 1231 SetSendParameters(parameters);
1231 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 1232 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1232 } 1233 }
1233 1234
1234 // Verify that G722 is set with 16000 samples per second to WebRTC. 1235 // Verify that G722 is set with 16000 samples per second to WebRTC.
1235 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 1236 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) {
1236 EXPECT_TRUE(SetupSendStream()); 1237 EXPECT_TRUE(SetupSendStream());
1237 cricket::AudioSendParameters parameters; 1238 cricket::AudioSendParameters parameters;
1238 parameters.codecs.push_back(kG722CodecSdp); 1239 parameters.codecs.push_back(kG722CodecSdp);
1239 SetSendParameters(parameters); 1240 SetSendParameters(parameters);
1240 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1241 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1241 EXPECT_STREQ("G722", gcodec.plname); 1242 EXPECT_STREQ("G722", gcodec.plname);
1242 EXPECT_EQ(1, gcodec.channels); 1243 EXPECT_EQ(1, gcodec.channels);
1243 EXPECT_EQ(16000, gcodec.plfreq); 1244 EXPECT_EQ(16000, gcodec.plfreq);
1244 } 1245 }
1245 1246
1246 // Test that if clockrate is not 48000 for opus, we fail. 1247 // Test that if clockrate is not 48000 for opus, we fail.
1247 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 1248 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
1248 EXPECT_TRUE(SetupSendStream()); 1249 EXPECT_TRUE(SetupSendStream());
1249 cricket::AudioSendParameters parameters; 1250 cricket::AudioSendParameters parameters;
1250 parameters.codecs.push_back(kOpusCodec); 1251 parameters.codecs.push_back(kOpusCodec);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 } 1308 }
1308 1309
1309 // Test that with bitrate=0 and no stereo, 1310 // Test that with bitrate=0 and no stereo,
1310 // channels and bitrate are 1 and 32000. 1311 // channels and bitrate are 1 and 32000.
1311 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 1312 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
1312 EXPECT_TRUE(SetupSendStream()); 1313 EXPECT_TRUE(SetupSendStream());
1313 cricket::AudioSendParameters parameters; 1314 cricket::AudioSendParameters parameters;
1314 parameters.codecs.push_back(kOpusCodec); 1315 parameters.codecs.push_back(kOpusCodec);
1315 parameters.codecs[0].bitrate = 0; 1316 parameters.codecs[0].bitrate = 0;
1316 SetSendParameters(parameters); 1317 SetSendParameters(parameters);
1317 CheckSendCodec(kSsrc1, "opus", 1, 32000); 1318 CheckSendCodec(kSsrc9, "opus", 1, 32000);
1318 } 1319 }
1319 1320
1320 // Test that with bitrate=0 and stereo=0, 1321 // Test that with bitrate=0 and stereo=0,
1321 // channels and bitrate are 1 and 32000. 1322 // channels and bitrate are 1 and 32000.
1322 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 1323 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
1323 EXPECT_TRUE(SetupSendStream()); 1324 EXPECT_TRUE(SetupSendStream());
1324 cricket::AudioSendParameters parameters; 1325 cricket::AudioSendParameters parameters;
1325 parameters.codecs.push_back(kOpusCodec); 1326 parameters.codecs.push_back(kOpusCodec);
1326 parameters.codecs[0].bitrate = 0; 1327 parameters.codecs[0].bitrate = 0;
1327 parameters.codecs[0].params["stereo"] = "0"; 1328 parameters.codecs[0].params["stereo"] = "0";
1328 SetSendParameters(parameters); 1329 SetSendParameters(parameters);
1329 CheckSendCodec(kSsrc1, "opus", 1, 32000); 1330 CheckSendCodec(kSsrc9, "opus", 1, 32000);
1330 } 1331 }
1331 1332
1332 // Test that with bitrate=invalid and stereo=0, 1333 // Test that with bitrate=invalid and stereo=0,
1333 // channels and bitrate are 1 and 32000. 1334 // channels and bitrate are 1 and 32000.
1334 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 1335 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
1335 EXPECT_TRUE(SetupSendStream()); 1336 EXPECT_TRUE(SetupSendStream());
1336 cricket::AudioSendParameters parameters; 1337 cricket::AudioSendParameters parameters;
1337 parameters.codecs.push_back(kOpusCodec); 1338 parameters.codecs.push_back(kOpusCodec);
1338 parameters.codecs[0].params["stereo"] = "0"; 1339 parameters.codecs[0].params["stereo"] = "0";
1339 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1340 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1340 parameters.codecs[0].bitrate = 5999; 1341 parameters.codecs[0].bitrate = 5999;
1341 SetSendParameters(parameters); 1342 SetSendParameters(parameters);
1342 CheckSendCodec(kSsrc1, "opus", 1, 6000); 1343 CheckSendCodec(kSsrc9, "opus", 1, 6000);
1343 1344
1344 parameters.codecs[0].bitrate = 510001; 1345 parameters.codecs[0].bitrate = 510001;
1345 SetSendParameters(parameters); 1346 SetSendParameters(parameters);
1346 CheckSendCodec(kSsrc1, "opus", 1, 510000); 1347 CheckSendCodec(kSsrc9, "opus", 1, 510000);
1347 } 1348 }
1348 1349
1349 // Test that with bitrate=0 and stereo=1, 1350 // Test that with bitrate=0 and stereo=1,
1350 // channels and bitrate are 2 and 64000. 1351 // channels and bitrate are 2 and 64000.
1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 1352 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
1352 EXPECT_TRUE(SetupSendStream()); 1353 EXPECT_TRUE(SetupSendStream());
1353 cricket::AudioSendParameters parameters; 1354 cricket::AudioSendParameters parameters;
1354 parameters.codecs.push_back(kOpusCodec); 1355 parameters.codecs.push_back(kOpusCodec);
1355 parameters.codecs[0].bitrate = 0; 1356 parameters.codecs[0].bitrate = 0;
1356 parameters.codecs[0].params["stereo"] = "1"; 1357 parameters.codecs[0].params["stereo"] = "1";
1357 SetSendParameters(parameters); 1358 SetSendParameters(parameters);
1358 CheckSendCodec(kSsrc1, "opus", 2, 64000); 1359 CheckSendCodec(kSsrc9, "opus", 2, 64000);
1359 } 1360 }
1360 1361
1361 // Test that with bitrate=invalid and stereo=1, 1362 // Test that with bitrate=invalid and stereo=1,
1362 // channels and bitrate are 2 and 64000. 1363 // channels and bitrate are 2 and 64000.
1363 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 1364 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
1364 EXPECT_TRUE(SetupSendStream()); 1365 EXPECT_TRUE(SetupSendStream());
1365 cricket::AudioSendParameters parameters; 1366 cricket::AudioSendParameters parameters;
1366 parameters.codecs.push_back(kOpusCodec); 1367 parameters.codecs.push_back(kOpusCodec);
1367 parameters.codecs[0].params["stereo"] = "1"; 1368 parameters.codecs[0].params["stereo"] = "1";
1368 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1369 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1369 parameters.codecs[0].bitrate = 5999; 1370 parameters.codecs[0].bitrate = 5999;
1370 SetSendParameters(parameters); 1371 SetSendParameters(parameters);
1371 CheckSendCodec(kSsrc1, "opus", 2, 6000); 1372 CheckSendCodec(kSsrc9, "opus", 2, 6000);
1372 1373
1373 parameters.codecs[0].bitrate = 510001; 1374 parameters.codecs[0].bitrate = 510001;
1374 SetSendParameters(parameters); 1375 SetSendParameters(parameters);
1375 CheckSendCodec(kSsrc1, "opus", 2, 510000); 1376 CheckSendCodec(kSsrc9, "opus", 2, 510000);
1376 } 1377 }
1377 1378
1378 // Test that with bitrate=N and stereo unset, 1379 // Test that with bitrate=N and stereo unset,
1379 // channels and bitrate are 1 and N. 1380 // channels and bitrate are 1 and N.
1380 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 1381 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
1381 EXPECT_TRUE(SetupSendStream()); 1382 EXPECT_TRUE(SetupSendStream());
1382 cricket::AudioSendParameters parameters; 1383 cricket::AudioSendParameters parameters;
1383 parameters.codecs.push_back(kOpusCodec); 1384 parameters.codecs.push_back(kOpusCodec);
1384 parameters.codecs[0].bitrate = 96000; 1385 parameters.codecs[0].bitrate = 96000;
1385 SetSendParameters(parameters); 1386 SetSendParameters(parameters);
1386 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1387 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1387 EXPECT_EQ(111, gcodec.pltype); 1388 EXPECT_EQ(111, gcodec.pltype);
1388 EXPECT_EQ(96000, gcodec.rate); 1389 EXPECT_EQ(96000, gcodec.rate);
1389 EXPECT_STREQ("opus", gcodec.plname); 1390 EXPECT_STREQ("opus", gcodec.plname);
1390 EXPECT_EQ(1, gcodec.channels); 1391 EXPECT_EQ(1, gcodec.channels);
1391 EXPECT_EQ(48000, gcodec.plfreq); 1392 EXPECT_EQ(48000, gcodec.plfreq);
1392 } 1393 }
1393 1394
1394 // Test that with bitrate=N and stereo=0, 1395 // Test that with bitrate=N and stereo=0,
1395 // channels and bitrate are 1 and N. 1396 // channels and bitrate are 1 and N.
1396 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 1397 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
1397 EXPECT_TRUE(SetupSendStream()); 1398 EXPECT_TRUE(SetupSendStream());
1398 cricket::AudioSendParameters parameters; 1399 cricket::AudioSendParameters parameters;
1399 parameters.codecs.push_back(kOpusCodec); 1400 parameters.codecs.push_back(kOpusCodec);
1400 parameters.codecs[0].bitrate = 30000; 1401 parameters.codecs[0].bitrate = 30000;
1401 parameters.codecs[0].params["stereo"] = "0"; 1402 parameters.codecs[0].params["stereo"] = "0";
1402 SetSendParameters(parameters); 1403 SetSendParameters(parameters);
1403 CheckSendCodec(kSsrc1, "opus", 1, 30000); 1404 CheckSendCodec(kSsrc9, "opus", 1, 30000);
1404 } 1405 }
1405 1406
1406 // Test that with bitrate=N and without any parameters, 1407 // Test that with bitrate=N and without any parameters,
1407 // channels and bitrate are 1 and N. 1408 // channels and bitrate are 1 and N.
1408 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 1409 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
1409 EXPECT_TRUE(SetupSendStream()); 1410 EXPECT_TRUE(SetupSendStream());
1410 cricket::AudioSendParameters parameters; 1411 cricket::AudioSendParameters parameters;
1411 parameters.codecs.push_back(kOpusCodec); 1412 parameters.codecs.push_back(kOpusCodec);
1412 parameters.codecs[0].bitrate = 30000; 1413 parameters.codecs[0].bitrate = 30000;
1413 SetSendParameters(parameters); 1414 SetSendParameters(parameters);
1414 CheckSendCodec(kSsrc1, "opus", 1, 30000); 1415 CheckSendCodec(kSsrc9, "opus", 1, 30000);
1415 } 1416 }
1416 1417
1417 // Test that with bitrate=N and stereo=1, 1418 // Test that with bitrate=N and stereo=1,
1418 // channels and bitrate are 2 and N. 1419 // channels and bitrate are 2 and N.
1419 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 1420 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
1420 EXPECT_TRUE(SetupSendStream()); 1421 EXPECT_TRUE(SetupSendStream());
1421 cricket::AudioSendParameters parameters; 1422 cricket::AudioSendParameters parameters;
1422 parameters.codecs.push_back(kOpusCodec); 1423 parameters.codecs.push_back(kOpusCodec);
1423 parameters.codecs[0].bitrate = 30000; 1424 parameters.codecs[0].bitrate = 30000;
1424 parameters.codecs[0].params["stereo"] = "1"; 1425 parameters.codecs[0].params["stereo"] = "1";
1425 SetSendParameters(parameters); 1426 SetSendParameters(parameters);
1426 CheckSendCodec(kSsrc1, "opus", 2, 30000); 1427 CheckSendCodec(kSsrc9, "opus", 2, 30000);
1427 } 1428 }
1428 1429
1429 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. 1430 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
1430 // Also test that the "maxaveragebitrate" can't be set to values outside the 1431 // Also test that the "maxaveragebitrate" can't be set to values outside the
1431 // range of 6000 and 510000 1432 // range of 6000 and 510000
1432 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { 1433 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
1433 EXPECT_TRUE(SetupSendStream()); 1434 EXPECT_TRUE(SetupSendStream());
1434 cricket::AudioSendParameters parameters; 1435 cricket::AudioSendParameters parameters;
1435 parameters.codecs.push_back(kOpusCodec); 1436 parameters.codecs.push_back(kOpusCodec);
1436 parameters.codecs[0].bitrate = 30000; 1437 parameters.codecs[0].bitrate = 30000;
1437 // Ignore if less than 6000. 1438 // Ignore if less than 6000.
1438 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; 1439 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
1439 SetSendParameters(parameters); 1440 SetSendParameters(parameters);
1440 EXPECT_EQ(6000, GetCodecBitrate(kSsrc1)); 1441 EXPECT_EQ(6000, GetCodecBitrate(kSsrc9));
1441 1442
1442 // Ignore if larger than 510000. 1443 // Ignore if larger than 510000.
1443 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; 1444 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1444 SetSendParameters(parameters); 1445 SetSendParameters(parameters);
1445 EXPECT_EQ(510000, GetCodecBitrate(kSsrc1)); 1446 EXPECT_EQ(510000, GetCodecBitrate(kSsrc9));
1446 1447
1447 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; 1448 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1448 SetSendParameters(parameters); 1449 SetSendParameters(parameters);
1449 EXPECT_EQ(200000, GetCodecBitrate(kSsrc1)); 1450 EXPECT_EQ(200000, GetCodecBitrate(kSsrc9));
1450 } 1451 }
1451 1452
1452 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { 1453 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) {
1453 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 1454 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
1454 200000); 1455 200000);
1455 } 1456 }
1456 1457
1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { 1458 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) {
1458 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); 1459 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
1459 } 1460 }
(...skipping 21 matching lines...) Expand all
1481 } 1482 }
1482 1483
1483 // Test that we can enable NACK with opus as caller. 1484 // Test that we can enable NACK with opus as caller.
1484 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { 1485 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) {
1485 EXPECT_TRUE(SetupSendStream()); 1486 EXPECT_TRUE(SetupSendStream());
1486 cricket::AudioSendParameters parameters; 1487 cricket::AudioSendParameters parameters;
1487 parameters.codecs.push_back(kOpusCodec); 1488 parameters.codecs.push_back(kOpusCodec);
1488 parameters.codecs[0].AddFeedbackParam( 1489 parameters.codecs[0].AddFeedbackParam(
1489 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1490 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1490 cricket::kParamValueEmpty)); 1491 cricket::kParamValueEmpty));
1491 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1492 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1492 SetSendParameters(parameters); 1493 SetSendParameters(parameters);
1493 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1494 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1494 } 1495 }
1495 1496
1496 // Test that we can enable NACK with opus as callee. 1497 // Test that we can enable NACK with opus as callee.
1497 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) { 1498 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCallee) {
1498 EXPECT_TRUE(SetupRecvStream()); 1499 EXPECT_TRUE(SetupRecvStream());
1499 cricket::AudioSendParameters parameters; 1500 cricket::AudioSendParameters parameters;
1500 parameters.codecs.push_back(kOpusCodec); 1501 parameters.codecs.push_back(kOpusCodec);
1501 parameters.codecs[0].AddFeedbackParam( 1502 parameters.codecs[0].AddFeedbackParam(
1502 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1503 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1503 cricket::kParamValueEmpty)); 1504 cricket::kParamValueEmpty));
1504 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1505 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1505 SetSendParameters(parameters); 1506 SetSendParameters(parameters);
1506 // NACK should be enabled even with no send stream. 1507 // NACK should be enabled even with no send stream.
1507 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1508 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1508 1509
1509 EXPECT_TRUE(channel_->AddSendStream( 1510 EXPECT_TRUE(channel_->AddSendStream(
1510 cricket::StreamParams::CreateLegacy(kSsrc1))); 1511 cricket::StreamParams::CreateLegacy(kSsrc9)));
1511 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1512 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1512 } 1513 }
1513 1514
1514 // Test that we can enable NACK on receive streams. 1515 // Test that we can enable NACK on receive streams.
1515 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) { 1516 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackRecvStreams) {
1516 EXPECT_TRUE(SetupSendStream()); 1517 EXPECT_TRUE(SetupSendStream());
1517 EXPECT_TRUE(AddRecvStream(kSsrc2)); 1518 EXPECT_TRUE(AddRecvStream(kSsrc2));
1518 cricket::AudioSendParameters parameters; 1519 cricket::AudioSendParameters parameters;
1519 parameters.codecs.push_back(kOpusCodec); 1520 parameters.codecs.push_back(kOpusCodec);
1520 parameters.codecs[0].AddFeedbackParam( 1521 parameters.codecs[0].AddFeedbackParam(
1521 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1522 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1522 cricket::kParamValueEmpty)); 1523 cricket::kParamValueEmpty));
1523 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1524 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1524 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1525 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1525 SetSendParameters(parameters); 1526 SetSendParameters(parameters);
1526 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1527 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1527 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1528 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1528 } 1529 }
1529 1530
1530 // Test that we can disable NACK. 1531 // Test that we can disable NACK.
1531 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) { 1532 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNack) {
1532 EXPECT_TRUE(SetupSendStream()); 1533 EXPECT_TRUE(SetupSendStream());
1533 cricket::AudioSendParameters parameters; 1534 cricket::AudioSendParameters parameters;
1534 parameters.codecs.push_back(kOpusCodec); 1535 parameters.codecs.push_back(kOpusCodec);
1535 parameters.codecs[0].AddFeedbackParam( 1536 parameters.codecs[0].AddFeedbackParam(
1536 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1537 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1537 cricket::kParamValueEmpty)); 1538 cricket::kParamValueEmpty));
1538 SetSendParameters(parameters); 1539 SetSendParameters(parameters);
1539 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1540 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1540 1541
1541 parameters.codecs.clear(); 1542 parameters.codecs.clear();
1542 parameters.codecs.push_back(kOpusCodec); 1543 parameters.codecs.push_back(kOpusCodec);
1543 SetSendParameters(parameters); 1544 SetSendParameters(parameters);
1544 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1545 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1545 } 1546 }
1546 1547
1547 // Test that we can disable NACK on receive streams. 1548 // Test that we can disable NACK on receive streams.
1548 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) { 1549 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecDisableNackRecvStreams) {
1549 EXPECT_TRUE(SetupSendStream()); 1550 EXPECT_TRUE(SetupSendStream());
1550 EXPECT_TRUE(AddRecvStream(kSsrc2)); 1551 EXPECT_TRUE(AddRecvStream(kSsrc2));
1551 cricket::AudioSendParameters parameters; 1552 cricket::AudioSendParameters parameters;
1552 parameters.codecs.push_back(kOpusCodec); 1553 parameters.codecs.push_back(kOpusCodec);
1553 parameters.codecs[0].AddFeedbackParam( 1554 parameters.codecs[0].AddFeedbackParam(
1554 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1555 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1555 cricket::kParamValueEmpty)); 1556 cricket::kParamValueEmpty));
1556 SetSendParameters(parameters); 1557 SetSendParameters(parameters);
1557 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1558 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1558 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1559 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1559 1560
1560 parameters.codecs.clear(); 1561 parameters.codecs.clear();
1561 parameters.codecs.push_back(kOpusCodec); 1562 parameters.codecs.push_back(kOpusCodec);
1562 SetSendParameters(parameters); 1563 SetSendParameters(parameters);
1563 EXPECT_EQ(0, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1564 EXPECT_EQ(0, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1564 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1565 EXPECT_EQ(0, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1565 } 1566 }
1566 1567
1567 // Test that NACK is enabled on a new receive stream. 1568 // Test that NACK is enabled on a new receive stream.
1568 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) { 1569 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamEnableNack) {
1569 EXPECT_TRUE(SetupSendStream()); 1570 EXPECT_TRUE(SetupSendStream());
1570 cricket::AudioSendParameters parameters; 1571 cricket::AudioSendParameters parameters;
1571 parameters.codecs.push_back(kIsacCodec); 1572 parameters.codecs.push_back(kIsacCodec);
1572 parameters.codecs.push_back(kCn16000Codec); 1573 parameters.codecs.push_back(kCn16000Codec);
1573 parameters.codecs[0].AddFeedbackParam( 1574 parameters.codecs[0].AddFeedbackParam(
1574 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1575 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1575 cricket::kParamValueEmpty)); 1576 cricket::kParamValueEmpty));
1576 SetSendParameters(parameters); 1577 SetSendParameters(parameters);
1577 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); 1578 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc9).rtp.nack.rtp_history_ms);
1578 1579
1579 EXPECT_TRUE(AddRecvStream(kSsrc2)); 1580 EXPECT_TRUE(AddRecvStream(kSsrc2));
1580 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1581 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1581 EXPECT_TRUE(AddRecvStream(kSsrc3)); 1582 EXPECT_TRUE(AddRecvStream(kSsrc3));
1582 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); 1583 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms);
1583 } 1584 }
1584 1585
1585 // Test that without useinbandfec, Opus FEC is off. 1586 // Test that without useinbandfec, Opus FEC is off.
1586 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { 1587 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
1587 EXPECT_TRUE(SetupSendStream()); 1588 EXPECT_TRUE(SetupSendStream());
1588 cricket::AudioSendParameters parameters; 1589 cricket::AudioSendParameters parameters;
1589 parameters.codecs.push_back(kOpusCodec); 1590 parameters.codecs.push_back(kOpusCodec);
1590 SetSendParameters(parameters); 1591 SetSendParameters(parameters);
1591 EXPECT_FALSE(GetCodecFec(kSsrc1)); 1592 EXPECT_FALSE(GetCodecFec(kSsrc9));
1592 } 1593 }
1593 1594
1594 // Test that with useinbandfec=0, Opus FEC is off. 1595 // Test that with useinbandfec=0, Opus FEC is off.
1595 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { 1596 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1596 EXPECT_TRUE(SetupSendStream()); 1597 EXPECT_TRUE(SetupSendStream());
1597 cricket::AudioSendParameters parameters; 1598 cricket::AudioSendParameters parameters;
1598 parameters.codecs.push_back(kOpusCodec); 1599 parameters.codecs.push_back(kOpusCodec);
1599 parameters.codecs[0].bitrate = 0; 1600 parameters.codecs[0].bitrate = 0;
1600 parameters.codecs[0].params["useinbandfec"] = "0"; 1601 parameters.codecs[0].params["useinbandfec"] = "0";
1601 SetSendParameters(parameters); 1602 SetSendParameters(parameters);
1602 CheckSendCodec(kSsrc1, "opus", 1, 32000); 1603 CheckSendCodec(kSsrc9, "opus", 1, 32000);
1603 } 1604 }
1604 1605
1605 // Test that with useinbandfec=1, Opus FEC is on. 1606 // Test that with useinbandfec=1, Opus FEC is on.
1606 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { 1607 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1607 EXPECT_TRUE(SetupSendStream()); 1608 EXPECT_TRUE(SetupSendStream());
1608 cricket::AudioSendParameters parameters; 1609 cricket::AudioSendParameters parameters;
1609 parameters.codecs.push_back(kOpusCodec); 1610 parameters.codecs.push_back(kOpusCodec);
1610 parameters.codecs[0].bitrate = 0; 1611 parameters.codecs[0].bitrate = 0;
1611 parameters.codecs[0].params["useinbandfec"] = "1"; 1612 parameters.codecs[0].params["useinbandfec"] = "1";
1612 SetSendParameters(parameters); 1613 SetSendParameters(parameters);
1613 EXPECT_TRUE(GetCodecFec(kSsrc1)); 1614 EXPECT_TRUE(GetCodecFec(kSsrc9));
1614 CheckSendCodec(kSsrc1, "opus", 1, 32000); 1615 CheckSendCodec(kSsrc9, "opus", 1, 32000);
1615 } 1616 }
1616 1617
1617 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. 1618 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1618 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { 1619 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1619 EXPECT_TRUE(SetupSendStream()); 1620 EXPECT_TRUE(SetupSendStream());
1620 cricket::AudioSendParameters parameters; 1621 cricket::AudioSendParameters parameters;
1621 parameters.codecs.push_back(kOpusCodec); 1622 parameters.codecs.push_back(kOpusCodec);
1622 parameters.codecs[0].bitrate = 0; 1623 parameters.codecs[0].bitrate = 0;
1623 parameters.codecs[0].params["stereo"] = "1"; 1624 parameters.codecs[0].params["stereo"] = "1";
1624 parameters.codecs[0].params["useinbandfec"] = "1"; 1625 parameters.codecs[0].params["useinbandfec"] = "1";
1625 SetSendParameters(parameters); 1626 SetSendParameters(parameters);
1626 EXPECT_TRUE(GetCodecFec(kSsrc1)); 1627 EXPECT_TRUE(GetCodecFec(kSsrc9));
1627 CheckSendCodec(kSsrc1, "opus", 2, 64000); 1628 CheckSendCodec(kSsrc9, "opus", 2, 64000);
1628 } 1629 }
1629 1630
1630 // Test that with non-Opus, codec FEC is off. 1631 // Test that with non-Opus, codec FEC is off.
1631 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { 1632 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1632 EXPECT_TRUE(SetupSendStream()); 1633 EXPECT_TRUE(SetupSendStream());
1633 cricket::AudioSendParameters parameters; 1634 cricket::AudioSendParameters parameters;
1634 parameters.codecs.push_back(kIsacCodec); 1635 parameters.codecs.push_back(kIsacCodec);
1635 SetSendParameters(parameters); 1636 SetSendParameters(parameters);
1636 EXPECT_FALSE(GetCodecFec(kSsrc1)); 1637 EXPECT_FALSE(GetCodecFec(kSsrc9));
1637 } 1638 }
1638 1639
1639 // Test the with non-Opus, even if useinbandfec=1, FEC is off. 1640 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1640 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { 1641 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1641 EXPECT_TRUE(SetupSendStream()); 1642 EXPECT_TRUE(SetupSendStream());
1642 cricket::AudioSendParameters parameters; 1643 cricket::AudioSendParameters parameters;
1643 parameters.codecs.push_back(kIsacCodec); 1644 parameters.codecs.push_back(kIsacCodec);
1644 parameters.codecs[0].params["useinbandfec"] = "1"; 1645 parameters.codecs[0].params["useinbandfec"] = "1";
1645 SetSendParameters(parameters); 1646 SetSendParameters(parameters);
1646 EXPECT_FALSE(GetCodecFec(kSsrc1)); 1647 EXPECT_FALSE(GetCodecFec(kSsrc9));
1647 } 1648 }
1648 1649
1649 // Test that Opus FEC status can be changed. 1650 // Test that Opus FEC status can be changed.
1650 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { 1651 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1651 EXPECT_TRUE(SetupSendStream()); 1652 EXPECT_TRUE(SetupSendStream());
1652 cricket::AudioSendParameters parameters; 1653 cricket::AudioSendParameters parameters;
1653 parameters.codecs.push_back(kOpusCodec); 1654 parameters.codecs.push_back(kOpusCodec);
1654 SetSendParameters(parameters); 1655 SetSendParameters(parameters);
1655 EXPECT_FALSE(GetCodecFec(kSsrc1)); 1656 EXPECT_FALSE(GetCodecFec(kSsrc9));
1656 1657
1657 parameters.codecs[0].params["useinbandfec"] = "1"; 1658 parameters.codecs[0].params["useinbandfec"] = "1";
1658 SetSendParameters(parameters); 1659 SetSendParameters(parameters);
1659 EXPECT_TRUE(GetCodecFec(kSsrc1)); 1660 EXPECT_TRUE(GetCodecFec(kSsrc9));
1660 } 1661 }
1661 1662
1662 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { 1663 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) {
1663 EXPECT_TRUE(SetupChannel()); 1664 EXPECT_TRUE(SetupChannel());
1664 cricket::AudioSendParameters send_parameters; 1665 cricket::AudioSendParameters send_parameters;
1665 send_parameters.codecs.push_back(kOpusCodec); 1666 send_parameters.codecs.push_back(kOpusCodec);
1666 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); 1667 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty());
1667 SetSendParameters(send_parameters); 1668 SetSendParameters(send_parameters);
1668 1669
1669 cricket::AudioRecvParameters recv_parameters; 1670 cricket::AudioRecvParameters recv_parameters;
1670 recv_parameters.codecs.push_back(kIsacCodec); 1671 recv_parameters.codecs.push_back(kIsacCodec);
1671 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); 1672 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
1672 EXPECT_TRUE(AddRecvStream(kSsrc1)); 1673 EXPECT_TRUE(AddRecvStream(kSsrc9));
1673 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1674 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc9) != nullptr);
1674 EXPECT_FALSE( 1675 EXPECT_FALSE(
1675 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1676 call_.GetAudioReceiveStream(kSsrc9)->GetConfig().rtp.transport_cc);
1676 1677
1677 send_parameters.codecs = engine_->send_codecs(); 1678 send_parameters.codecs = engine_->send_codecs();
1678 SetSendParameters(send_parameters); 1679 SetSendParameters(send_parameters);
1679 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1680 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc9) != nullptr);
1680 EXPECT_TRUE( 1681 EXPECT_TRUE(
1681 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1682 call_.GetAudioReceiveStream(kSsrc9)->GetConfig().rtp.transport_cc);
1682 } 1683 }
1683 1684
1684 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. 1685 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
1685 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { 1686 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1686 EXPECT_TRUE(SetupSendStream()); 1687 EXPECT_TRUE(SetupSendStream());
1687 cricket::AudioSendParameters parameters; 1688 cricket::AudioSendParameters parameters;
1688 parameters.codecs.push_back(kOpusCodec); 1689 parameters.codecs.push_back(kOpusCodec);
1689 parameters.codecs[0].bitrate = 0; 1690 parameters.codecs[0].bitrate = 0;
1690 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1691 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1691 SetSendParameters(parameters); 1692 SetSendParameters(parameters);
1692 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); 1693 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc9));
1693 EXPECT_EQ(12000, GetCodecBitrate(kSsrc1)); 1694 EXPECT_EQ(12000, GetCodecBitrate(kSsrc9));
1694 1695
1695 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1696 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1696 SetSendParameters(parameters); 1697 SetSendParameters(parameters);
1697 EXPECT_EQ(24000, GetCodecBitrate(kSsrc1)); 1698 EXPECT_EQ(24000, GetCodecBitrate(kSsrc9));
1698 } 1699 }
1699 1700
1700 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. 1701 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1701 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { 1702 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1702 EXPECT_TRUE(SetupSendStream()); 1703 EXPECT_TRUE(SetupSendStream());
1703 cricket::AudioSendParameters parameters; 1704 cricket::AudioSendParameters parameters;
1704 parameters.codecs.push_back(kOpusCodec); 1705 parameters.codecs.push_back(kOpusCodec);
1705 parameters.codecs[0].bitrate = 0; 1706 parameters.codecs[0].bitrate = 0;
1706 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); 1707 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1707 SetSendParameters(parameters); 1708 SetSendParameters(parameters);
1708 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc1)); 1709 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc9));
1709 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); 1710 EXPECT_EQ(20000, GetCodecBitrate(kSsrc9));
1710 1711
1711 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1712 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1712 SetSendParameters(parameters); 1713 SetSendParameters(parameters);
1713 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); 1714 EXPECT_EQ(40000, GetCodecBitrate(kSsrc9));
1714 } 1715 }
1715 1716
1716 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. 1717 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1717 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { 1718 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1718 EXPECT_TRUE(SetupSendStream()); 1719 EXPECT_TRUE(SetupSendStream());
1719 cricket::AudioSendParameters parameters; 1720 cricket::AudioSendParameters parameters;
1720 parameters.codecs.push_back(kOpusCodec); 1721 parameters.codecs.push_back(kOpusCodec);
1721 parameters.codecs[0].bitrate = 0; 1722 parameters.codecs[0].bitrate = 0;
1722 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); 1723 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1723 SetSendParameters(parameters); 1724 SetSendParameters(parameters);
1724 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc1)); 1725 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc9));
1725 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); 1726 EXPECT_EQ(20000, GetCodecBitrate(kSsrc9));
1726 1727
1727 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1728 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1728 SetSendParameters(parameters); 1729 SetSendParameters(parameters);
1729 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); 1730 EXPECT_EQ(40000, GetCodecBitrate(kSsrc9));
1730 } 1731 }
1731 1732
1732 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. 1733 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1733 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { 1734 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1734 EXPECT_TRUE(SetupSendStream()); 1735 EXPECT_TRUE(SetupSendStream());
1735 cricket::AudioSendParameters parameters; 1736 cricket::AudioSendParameters parameters;
1736 parameters.codecs.push_back(kOpusCodec); 1737 parameters.codecs.push_back(kOpusCodec);
1737 parameters.codecs[0].bitrate = 0; 1738 parameters.codecs[0].bitrate = 0;
1738 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); 1739 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1739 SetSendParameters(parameters); 1740 SetSendParameters(parameters);
1740 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc1)); 1741 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc9));
1741 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); 1742 EXPECT_EQ(32000, GetCodecBitrate(kSsrc9));
1742 1743
1743 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1744 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1744 SetSendParameters(parameters); 1745 SetSendParameters(parameters);
1745 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); 1746 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9));
1746 } 1747 }
1747 1748
1748 // Test 24000 < maxplaybackrate triggers Opus full band mode. 1749 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1749 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { 1750 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1750 EXPECT_TRUE(SetupSendStream()); 1751 EXPECT_TRUE(SetupSendStream());
1751 cricket::AudioSendParameters parameters; 1752 cricket::AudioSendParameters parameters;
1752 parameters.codecs.push_back(kOpusCodec); 1753 parameters.codecs.push_back(kOpusCodec);
1753 parameters.codecs[0].bitrate = 0; 1754 parameters.codecs[0].bitrate = 0;
1754 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); 1755 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1755 SetSendParameters(parameters); 1756 SetSendParameters(parameters);
1756 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc1)); 1757 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc9));
1757 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); 1758 EXPECT_EQ(32000, GetCodecBitrate(kSsrc9));
1758 1759
1759 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1760 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1760 SetSendParameters(parameters); 1761 SetSendParameters(parameters);
1761 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); 1762 EXPECT_EQ(64000, GetCodecBitrate(kSsrc9));
1762 } 1763 }
1763 1764
1764 // Test Opus that without maxplaybackrate, default playback rate is used. 1765 // Test Opus that without maxplaybackrate, default playback rate is used.
1765 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { 1766 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1766 EXPECT_TRUE(SetupSendStream()); 1767 EXPECT_TRUE(SetupSendStream());
1767 cricket::AudioSendParameters parameters; 1768 cricket::AudioSendParameters parameters;
1768 parameters.codecs.push_back(kOpusCodec); 1769 parameters.codecs.push_back(kOpusCodec);
1769 SetSendParameters(parameters); 1770 SetSendParameters(parameters);
1770 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); 1771 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc9));
1771 } 1772 }
1772 1773
1773 // Test the with non-Opus, maxplaybackrate has no effect. 1774 // Test the with non-Opus, maxplaybackrate has no effect.
1774 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { 1775 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1775 EXPECT_TRUE(SetupSendStream()); 1776 EXPECT_TRUE(SetupSendStream());
1776 cricket::AudioSendParameters parameters; 1777 cricket::AudioSendParameters parameters;
1777 parameters.codecs.push_back(kIsacCodec); 1778 parameters.codecs.push_back(kIsacCodec);
1778 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); 1779 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1779 SetSendParameters(parameters); 1780 SetSendParameters(parameters);
1780 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc1)); 1781 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc9));
1781 } 1782 }
1782 1783
1783 // Test maxplaybackrate can be set on two streams. 1784 // Test maxplaybackrate can be set on two streams.
1784 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { 1785 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1785 EXPECT_TRUE(SetupSendStream()); 1786 EXPECT_TRUE(SetupSendStream());
1786 cricket::AudioSendParameters parameters; 1787 cricket::AudioSendParameters parameters;
1787 parameters.codecs.push_back(kOpusCodec); 1788 parameters.codecs.push_back(kOpusCodec);
1788 SetSendParameters(parameters); 1789 SetSendParameters(parameters);
1789 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); 1790 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc9));
1790 1791
1791 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1792 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1792 SetSendParameters(parameters); 1793 SetSendParameters(parameters);
1793 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); 1794 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc9));
1794 1795
1795 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); 1796 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2));
1796 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); 1797 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2));
1797 } 1798 }
1798 1799
1799 // Test that with usedtx=0, Opus DTX is off. 1800 // Test that with usedtx=0, Opus DTX is off.
1800 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { 1801 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1801 EXPECT_TRUE(SetupSendStream()); 1802 EXPECT_TRUE(SetupSendStream());
1802 cricket::AudioSendParameters parameters; 1803 cricket::AudioSendParameters parameters;
1803 parameters.codecs.push_back(kOpusCodec); 1804 parameters.codecs.push_back(kOpusCodec);
1804 parameters.codecs[0].params["usedtx"] = "0"; 1805 parameters.codecs[0].params["usedtx"] = "0";
1805 SetSendParameters(parameters); 1806 SetSendParameters(parameters);
1806 EXPECT_FALSE(GetOpusDtx(kSsrc1)); 1807 EXPECT_FALSE(GetOpusDtx(kSsrc9));
1807 } 1808 }
1808 1809
1809 // Test that with usedtx=1, Opus DTX is on. 1810 // Test that with usedtx=1, Opus DTX is on.
1810 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { 1811 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1811 EXPECT_TRUE(SetupSendStream()); 1812 EXPECT_TRUE(SetupSendStream());
1812 cricket::AudioSendParameters parameters; 1813 cricket::AudioSendParameters parameters;
1813 parameters.codecs.push_back(kOpusCodec); 1814 parameters.codecs.push_back(kOpusCodec);
1814 parameters.codecs[0].params["usedtx"] = "1"; 1815 parameters.codecs[0].params["usedtx"] = "1";
1815 SetSendParameters(parameters); 1816 SetSendParameters(parameters);
1816 EXPECT_TRUE(GetOpusDtx(kSsrc1)); 1817 EXPECT_TRUE(GetOpusDtx(kSsrc9));
1817 } 1818 }
1818 1819
1819 // Test that usedtx=1 works with stereo Opus. 1820 // Test that usedtx=1 works with stereo Opus.
1820 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { 1821 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1821 EXPECT_TRUE(SetupSendStream()); 1822 EXPECT_TRUE(SetupSendStream());
1822 cricket::AudioSendParameters parameters; 1823 cricket::AudioSendParameters parameters;
1823 parameters.codecs.push_back(kOpusCodec); 1824 parameters.codecs.push_back(kOpusCodec);
1824 parameters.codecs[0].params["usedtx"] = "1"; 1825 parameters.codecs[0].params["usedtx"] = "1";
1825 parameters.codecs[0].params["stereo"] = "1"; 1826 parameters.codecs[0].params["stereo"] = "1";
1826 SetSendParameters(parameters); 1827 SetSendParameters(parameters);
1827 EXPECT_TRUE(GetOpusDtx(kSsrc1)); 1828 EXPECT_TRUE(GetOpusDtx(kSsrc9));
1828 } 1829 }
1829 1830
1830 // Test that usedtx=1 does not work with non Opus. 1831 // Test that usedtx=1 does not work with non Opus.
1831 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { 1832 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1832 EXPECT_TRUE(SetupSendStream()); 1833 EXPECT_TRUE(SetupSendStream());
1833 cricket::AudioSendParameters parameters; 1834 cricket::AudioSendParameters parameters;
1834 parameters.codecs.push_back(kIsacCodec); 1835 parameters.codecs.push_back(kIsacCodec);
1835 parameters.codecs[0].params["usedtx"] = "1"; 1836 parameters.codecs[0].params["usedtx"] = "1";
1836 SetSendParameters(parameters); 1837 SetSendParameters(parameters);
1837 EXPECT_FALSE(GetOpusDtx(kSsrc1)); 1838 EXPECT_FALSE(GetOpusDtx(kSsrc9));
1838 } 1839 }
1839 1840
1840 // Test that we can switch back and forth between Opus and ISAC with CN. 1841 // Test that we can switch back and forth between Opus and ISAC with CN.
1841 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1842 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1842 EXPECT_TRUE(SetupSendStream()); 1843 EXPECT_TRUE(SetupSendStream());
1843 1844
1844 cricket::AudioSendParameters opus_parameters; 1845 cricket::AudioSendParameters opus_parameters;
1845 opus_parameters.codecs.push_back(kOpusCodec); 1846 opus_parameters.codecs.push_back(kOpusCodec);
1846 SetSendParameters(opus_parameters); 1847 SetSendParameters(opus_parameters);
1847 { 1848 {
1848 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1849 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1849 EXPECT_EQ(111, gcodec.pltype); 1850 EXPECT_EQ(111, gcodec.pltype);
1850 EXPECT_STREQ("opus", gcodec.plname); 1851 EXPECT_STREQ("opus", gcodec.plname);
1851 } 1852 }
1852 1853
1853 cricket::AudioSendParameters isac_parameters; 1854 cricket::AudioSendParameters isac_parameters;
1854 isac_parameters.codecs.push_back(kIsacCodec); 1855 isac_parameters.codecs.push_back(kIsacCodec);
1855 isac_parameters.codecs.push_back(kCn16000Codec); 1856 isac_parameters.codecs.push_back(kCn16000Codec);
1856 isac_parameters.codecs.push_back(kOpusCodec); 1857 isac_parameters.codecs.push_back(kOpusCodec);
1857 SetSendParameters(isac_parameters); 1858 SetSendParameters(isac_parameters);
1858 { 1859 {
1859 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1860 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1860 EXPECT_EQ(103, gcodec.pltype); 1861 EXPECT_EQ(103, gcodec.pltype);
1861 EXPECT_STREQ("ISAC", gcodec.plname); 1862 EXPECT_STREQ("ISAC", gcodec.plname);
1862 } 1863 }
1863 1864
1864 SetSendParameters(opus_parameters); 1865 SetSendParameters(opus_parameters);
1865 { 1866 {
1866 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1867 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1867 EXPECT_EQ(111, gcodec.pltype); 1868 EXPECT_EQ(111, gcodec.pltype);
1868 EXPECT_STREQ("opus", gcodec.plname); 1869 EXPECT_STREQ("opus", gcodec.plname);
1869 } 1870 }
1870 } 1871 }
1871 1872
1872 // Test that we handle various ways of specifying bitrate. 1873 // Test that we handle various ways of specifying bitrate.
1873 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1874 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1874 EXPECT_TRUE(SetupSendStream()); 1875 EXPECT_TRUE(SetupSendStream());
1875 cricket::AudioSendParameters parameters; 1876 cricket::AudioSendParameters parameters;
1876 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 1877 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1877 SetSendParameters(parameters); 1878 SetSendParameters(parameters);
1878 { 1879 {
1879 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1880 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1880 EXPECT_EQ(103, gcodec.pltype); 1881 EXPECT_EQ(103, gcodec.pltype);
1881 EXPECT_STREQ("ISAC", gcodec.plname); 1882 EXPECT_STREQ("ISAC", gcodec.plname);
1882 EXPECT_EQ(32000, gcodec.rate); 1883 EXPECT_EQ(32000, gcodec.rate);
1883 } 1884 }
1884 1885
1885 parameters.codecs[0].bitrate = 0; // bitrate == default 1886 parameters.codecs[0].bitrate = 0; // bitrate == default
1886 SetSendParameters(parameters); 1887 SetSendParameters(parameters);
1887 { 1888 {
1888 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1889 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1889 EXPECT_EQ(103, gcodec.pltype); 1890 EXPECT_EQ(103, gcodec.pltype);
1890 EXPECT_STREQ("ISAC", gcodec.plname); 1891 EXPECT_STREQ("ISAC", gcodec.plname);
1891 EXPECT_EQ(32000, gcodec.rate); 1892 EXPECT_EQ(32000, gcodec.rate);
1892 } 1893 }
1893 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 1894 parameters.codecs[0].bitrate = 28000; // bitrate == 28000
1894 SetSendParameters(parameters); 1895 SetSendParameters(parameters);
1895 { 1896 {
1896 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1897 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1897 EXPECT_EQ(103, gcodec.pltype); 1898 EXPECT_EQ(103, gcodec.pltype);
1898 EXPECT_STREQ("ISAC", gcodec.plname); 1899 EXPECT_STREQ("ISAC", gcodec.plname);
1899 EXPECT_EQ(28000, gcodec.rate); 1900 EXPECT_EQ(28000, gcodec.rate);
1900 } 1901 }
1901 1902
1902 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 1903 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000
1903 SetSendParameters(parameters); 1904 SetSendParameters(parameters);
1904 { 1905 {
1905 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1906 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1906 EXPECT_EQ(0, gcodec.pltype); 1907 EXPECT_EQ(0, gcodec.pltype);
1907 EXPECT_STREQ("PCMU", gcodec.plname); 1908 EXPECT_STREQ("PCMU", gcodec.plname);
1908 EXPECT_EQ(64000, gcodec.rate); 1909 EXPECT_EQ(64000, gcodec.rate);
1909 } 1910 }
1910 1911
1911 parameters.codecs[0].bitrate = 0; // bitrate == default 1912 parameters.codecs[0].bitrate = 0; // bitrate == default
1912 SetSendParameters(parameters); 1913 SetSendParameters(parameters);
1913 { 1914 {
1914 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1915 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1915 EXPECT_EQ(0, gcodec.pltype); 1916 EXPECT_EQ(0, gcodec.pltype);
1916 EXPECT_STREQ("PCMU", gcodec.plname); 1917 EXPECT_STREQ("PCMU", gcodec.plname);
1917 EXPECT_EQ(64000, gcodec.rate); 1918 EXPECT_EQ(64000, gcodec.rate);
1918 } 1919 }
1919 1920
1920 parameters.codecs[0] = kOpusCodec; 1921 parameters.codecs[0] = kOpusCodec;
1921 parameters.codecs[0].bitrate = 0; // bitrate == default 1922 parameters.codecs[0].bitrate = 0; // bitrate == default
1922 SetSendParameters(parameters); 1923 SetSendParameters(parameters);
1923 { 1924 {
1924 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1925 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1925 EXPECT_EQ(111, gcodec.pltype); 1926 EXPECT_EQ(111, gcodec.pltype);
1926 EXPECT_STREQ("opus", gcodec.plname); 1927 EXPECT_STREQ("opus", gcodec.plname);
1927 EXPECT_EQ(32000, gcodec.rate); 1928 EXPECT_EQ(32000, gcodec.rate);
1928 } 1929 }
1929 } 1930 }
1930 1931
1931 // Test that we could set packet size specified in kCodecParamPTime. 1932 // Test that we could set packet size specified in kCodecParamPTime.
1932 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { 1933 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
1933 EXPECT_TRUE(SetupSendStream()); 1934 EXPECT_TRUE(SetupSendStream());
1934 cricket::AudioSendParameters parameters; 1935 cricket::AudioSendParameters parameters;
1935 parameters.codecs.push_back(kOpusCodec); 1936 parameters.codecs.push_back(kOpusCodec);
1936 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1937 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1937 SetSendParameters(parameters); 1938 SetSendParameters(parameters);
1938 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. 1939 EXPECT_EQ(1920, GetCodecPacSize(kSsrc9)); // Opus gets 40ms.
1939 1940
1940 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. 1941 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
1941 SetSendParameters(parameters); 1942 SetSendParameters(parameters);
1942 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. 1943 EXPECT_EQ(480, GetCodecPacSize(kSsrc9)); // Opus gets 10ms.
1943 1944
1944 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. 1945 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range.
1945 SetSendParameters(parameters); 1946 SetSendParameters(parameters);
1946 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. 1947 EXPECT_EQ(2880, GetCodecPacSize(kSsrc9)); // Opus gets 60ms.
1947 1948
1948 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. 1949 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size.
1949 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1950 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1950 SetSendParameters(parameters); 1951 SetSendParameters(parameters);
1951 EXPECT_EQ(480, GetCodecPacSize( 1952 EXPECT_EQ(480, GetCodecPacSize(
1952 kSsrc1)); // Isac gets 30ms as the next smallest value. 1953 kSsrc9)); // Isac gets 30ms as the next smallest value.
1953 1954
1954 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. 1955 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
1955 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); 1956 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
1956 SetSendParameters(parameters); 1957 SetSendParameters(parameters);
1957 EXPECT_EQ(640, GetCodecPacSize( 1958 EXPECT_EQ(640, GetCodecPacSize(
1958 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. 1959 kSsrc9)); // G722 gets 40ms @16kHz as defined in VoE.
1959 } 1960 }
1960 1961
1961 // Test that we fail if no codecs are specified. 1962 // Test that we fail if no codecs are specified.
1962 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { 1963 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
1963 EXPECT_TRUE(SetupSendStream()); 1964 EXPECT_TRUE(SetupSendStream());
1964 cricket::AudioSendParameters parameters; 1965 cricket::AudioSendParameters parameters;
1965 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1966 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1966 } 1967 }
1967 1968
1968 // Test that we can set send codecs even with telephone-event codec as the first 1969 // Test that we can set send codecs even with telephone-event codec as the first
1969 // one on the list. 1970 // one on the list.
1970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1971 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
1971 EXPECT_TRUE(SetupSendStream()); 1972 EXPECT_TRUE(SetupSendStream());
1972 cricket::AudioSendParameters parameters; 1973 cricket::AudioSendParameters parameters;
1973 parameters.codecs.push_back(kTelephoneEventCodec1); 1974 parameters.codecs.push_back(kTelephoneEventCodec1);
1974 parameters.codecs.push_back(kIsacCodec); 1975 parameters.codecs.push_back(kIsacCodec);
1975 parameters.codecs.push_back(kPcmuCodec); 1976 parameters.codecs.push_back(kPcmuCodec);
1976 parameters.codecs[0].id = 98; // DTMF 1977 parameters.codecs[0].id = 98; // DTMF
1977 parameters.codecs[1].id = 96; 1978 parameters.codecs[1].id = 96;
1978 SetSendParameters(parameters); 1979 SetSendParameters(parameters);
1979 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; 1980 const auto& gcodec = GetSendStreamConfig(kSsrc9).send_codec_spec.codec_inst;
1980 EXPECT_EQ(96, gcodec.pltype); 1981 EXPECT_EQ(96, gcodec.pltype);
1981 EXPECT_STREQ("ISAC", gcodec.plname); 1982 EXPECT_STREQ("ISAC", gcodec.plname);
1982 EXPECT_TRUE(channel_->CanInsertDtmf()); 1983 EXPECT_TRUE(channel_->CanInsertDtmf());
1983 } 1984 }
1984 1985
1985 // Test that payload type range is limited for telephone-event codec. 1986 // Test that payload type range is limited for telephone-event codec.
1986 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { 1987 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) {
1987 EXPECT_TRUE(SetupSendStream()); 1988 EXPECT_TRUE(SetupSendStream());
1988 cricket::AudioSendParameters parameters; 1989 cricket::AudioSendParameters parameters;
1989 parameters.codecs.push_back(kTelephoneEventCodec2); 1990 parameters.codecs.push_back(kTelephoneEventCodec2);
(...skipping 17 matching lines...) Expand all
2007 // one on the list. 2008 // one on the list.
2008 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 2009 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
2009 EXPECT_TRUE(SetupSendStream()); 2010 EXPECT_TRUE(SetupSendStream());
2010 cricket::AudioSendParameters parameters; 2011 cricket::AudioSendParameters parameters;
2011 parameters.codecs.push_back(kCn16000Codec); 2012 parameters.codecs.push_back(kCn16000Codec);
2012 parameters.codecs.push_back(kIsacCodec); 2013 parameters.codecs.push_back(kIsacCodec);
2013 parameters.codecs.push_back(kPcmuCodec); 2014 parameters.codecs.push_back(kPcmuCodec);
2014 parameters.codecs[0].id = 98; // wideband CN 2015 parameters.codecs[0].id = 98; // wideband CN
2015 parameters.codecs[1].id = 96; 2016 parameters.codecs[1].id = 96;
2016 SetSendParameters(parameters); 2017 SetSendParameters(parameters);
2017 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2018 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2018 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 2019 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2019 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2020 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2020 EXPECT_EQ(98, send_codec_spec.cng_payload_type); 2021 EXPECT_EQ(98, send_codec_spec.cng_payload_type);
2021 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 2022 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2022 } 2023 }
2023 2024
2024 // Test that we set VAD and DTMF types correctly as caller. 2025 // Test that we set VAD and DTMF types correctly as caller.
2025 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 2026 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
2026 EXPECT_TRUE(SetupSendStream()); 2027 EXPECT_TRUE(SetupSendStream());
2027 cricket::AudioSendParameters parameters; 2028 cricket::AudioSendParameters parameters;
2028 parameters.codecs.push_back(kIsacCodec); 2029 parameters.codecs.push_back(kIsacCodec);
2029 parameters.codecs.push_back(kPcmuCodec); 2030 parameters.codecs.push_back(kPcmuCodec);
2030 // TODO(juberti): cn 32000 2031 // TODO(juberti): cn 32000
2031 parameters.codecs.push_back(kCn16000Codec); 2032 parameters.codecs.push_back(kCn16000Codec);
2032 parameters.codecs.push_back(kCn8000Codec); 2033 parameters.codecs.push_back(kCn8000Codec);
2033 parameters.codecs.push_back(kTelephoneEventCodec1); 2034 parameters.codecs.push_back(kTelephoneEventCodec1);
2034 parameters.codecs[0].id = 96; 2035 parameters.codecs[0].id = 96;
2035 parameters.codecs[2].id = 97; // wideband CN 2036 parameters.codecs[2].id = 97; // wideband CN
2036 parameters.codecs[4].id = 98; // DTMF 2037 parameters.codecs[4].id = 98; // DTMF
2037 SetSendParameters(parameters); 2038 SetSendParameters(parameters);
2038 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2039 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2039 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 2040 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2040 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2041 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2041 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 2042 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2042 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2043 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2043 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 2044 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2044 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 2045 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2045 EXPECT_TRUE(channel_->CanInsertDtmf()); 2046 EXPECT_TRUE(channel_->CanInsertDtmf());
2046 } 2047 }
2047 2048
2048 // Test that we set VAD and DTMF types correctly as callee. 2049 // Test that we set VAD and DTMF types correctly as callee.
2049 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { 2050 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) {
2050 EXPECT_TRUE(SetupChannel()); 2051 EXPECT_TRUE(SetupChannel());
2051 cricket::AudioSendParameters parameters; 2052 cricket::AudioSendParameters parameters;
2052 parameters.codecs.push_back(kIsacCodec); 2053 parameters.codecs.push_back(kIsacCodec);
2053 parameters.codecs.push_back(kPcmuCodec); 2054 parameters.codecs.push_back(kPcmuCodec);
2054 // TODO(juberti): cn 32000 2055 // TODO(juberti): cn 32000
2055 parameters.codecs.push_back(kCn16000Codec); 2056 parameters.codecs.push_back(kCn16000Codec);
2056 parameters.codecs.push_back(kCn8000Codec); 2057 parameters.codecs.push_back(kCn8000Codec);
2057 parameters.codecs.push_back(kTelephoneEventCodec2); 2058 parameters.codecs.push_back(kTelephoneEventCodec2);
2058 parameters.codecs[0].id = 96; 2059 parameters.codecs[0].id = 96;
2059 parameters.codecs[2].id = 97; // wideband CN 2060 parameters.codecs[2].id = 97; // wideband CN
2060 parameters.codecs[4].id = 98; // DTMF 2061 parameters.codecs[4].id = 98; // DTMF
2061 SetSendParameters(parameters); 2062 SetSendParameters(parameters);
2062 EXPECT_TRUE(channel_->AddSendStream( 2063 EXPECT_TRUE(channel_->AddSendStream(
2063 cricket::StreamParams::CreateLegacy(kSsrc1))); 2064 cricket::StreamParams::CreateLegacy(kSsrc9)));
2064 2065
2065 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2066 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2066 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 2067 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2067 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2068 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2068 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 2069 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2069 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2070 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2070 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 2071 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2071 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 2072 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2072 EXPECT_TRUE(channel_->CanInsertDtmf()); 2073 EXPECT_TRUE(channel_->CanInsertDtmf());
2073 } 2074 }
2074 2075
2075 // Test that we only apply VAD if we have a CN codec that matches the 2076 // Test that we only apply VAD if we have a CN codec that matches the
2076 // send codec clockrate. 2077 // send codec clockrate.
2077 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 2078 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
2078 EXPECT_TRUE(SetupSendStream()); 2079 EXPECT_TRUE(SetupSendStream());
2079 cricket::AudioSendParameters parameters; 2080 cricket::AudioSendParameters parameters;
2080 // Set ISAC(16K) and CN(16K). VAD should be activated. 2081 // Set ISAC(16K) and CN(16K). VAD should be activated.
2081 parameters.codecs.push_back(kIsacCodec); 2082 parameters.codecs.push_back(kIsacCodec);
2082 parameters.codecs.push_back(kCn16000Codec); 2083 parameters.codecs.push_back(kCn16000Codec);
2083 parameters.codecs[1].id = 97; 2084 parameters.codecs[1].id = 97;
2084 SetSendParameters(parameters); 2085 SetSendParameters(parameters);
2085 { 2086 {
2086 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2087 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2087 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2088 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2088 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 2089 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2089 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2090 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2090 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 2091 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2091 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 2092 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2092 } 2093 }
2093 // Set PCMU(8K) and CN(16K). VAD should not be activated. 2094 // Set PCMU(8K) and CN(16K). VAD should not be activated.
2094 parameters.codecs[0] = kPcmuCodec; 2095 parameters.codecs[0] = kPcmuCodec;
2095 SetSendParameters(parameters); 2096 SetSendParameters(parameters);
2096 { 2097 {
2097 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2098 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2098 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); 2099 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
2099 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2100 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2100 } 2101 }
2101 // Set PCMU(8K) and CN(8K). VAD should be activated. 2102 // Set PCMU(8K) and CN(8K). VAD should be activated.
2102 parameters.codecs[1] = kCn8000Codec; 2103 parameters.codecs[1] = kCn8000Codec;
2103 SetSendParameters(parameters); 2104 SetSendParameters(parameters);
2104 { 2105 {
2105 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2106 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2106 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); 2107 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
2107 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 2108 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2108 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2109 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2109 EXPECT_EQ(13, send_codec_spec.cng_payload_type); 2110 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
2110 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); 2111 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
2111 } 2112 }
2112 // Set ISAC(16K) and CN(8K). VAD should not be activated. 2113 // Set ISAC(16K) and CN(8K). VAD should not be activated.
2113 parameters.codecs[0] = kIsacCodec; 2114 parameters.codecs[0] = kIsacCodec;
2114 SetSendParameters(parameters); 2115 SetSendParameters(parameters);
2115 { 2116 {
2116 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2117 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2117 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2118 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2118 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2119 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2119 } 2120 }
2120 } 2121 }
2121 2122
2122 // Test that we perform case-insensitive matching of codec names. 2123 // Test that we perform case-insensitive matching of codec names.
2123 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 2124 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
2124 EXPECT_TRUE(SetupSendStream()); 2125 EXPECT_TRUE(SetupSendStream());
2125 cricket::AudioSendParameters parameters; 2126 cricket::AudioSendParameters parameters;
2126 parameters.codecs.push_back(kIsacCodec); 2127 parameters.codecs.push_back(kIsacCodec);
2127 parameters.codecs.push_back(kPcmuCodec); 2128 parameters.codecs.push_back(kPcmuCodec);
2128 parameters.codecs.push_back(kCn16000Codec); 2129 parameters.codecs.push_back(kCn16000Codec);
2129 parameters.codecs.push_back(kCn8000Codec); 2130 parameters.codecs.push_back(kCn8000Codec);
2130 parameters.codecs.push_back(kTelephoneEventCodec1); 2131 parameters.codecs.push_back(kTelephoneEventCodec1);
2131 parameters.codecs[0].name = "iSaC"; 2132 parameters.codecs[0].name = "iSaC";
2132 parameters.codecs[0].id = 96; 2133 parameters.codecs[0].id = 96;
2133 parameters.codecs[2].id = 97; // wideband CN 2134 parameters.codecs[2].id = 97; // wideband CN
2134 parameters.codecs[4].id = 98; // DTMF 2135 parameters.codecs[4].id = 98; // DTMF
2135 SetSendParameters(parameters); 2136 SetSendParameters(parameters);
2136 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; 2137 const auto& send_codec_spec = GetSendStreamConfig(kSsrc9).send_codec_spec;
2137 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 2138 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2138 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 2139 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2139 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 2140 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2140 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 2141 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2141 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 2142 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2142 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 2143 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2143 EXPECT_TRUE(channel_->CanInsertDtmf()); 2144 EXPECT_TRUE(channel_->CanInsertDtmf());
2144 } 2145 }
2145 2146
2146 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { 2147 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) { 2180 TEST_F(WebRtcVoiceEngineTestFake, RecvTransportSequenceNumberHeaderExtensions) {
2180 TestSetRecvRtpHeaderExtensions( 2181 TestSetRecvRtpHeaderExtensions(
2181 webrtc::RtpExtension::kTransportSequenceNumberUri); 2182 webrtc::RtpExtension::kTransportSequenceNumberUri);
2182 } 2183 }
2183 2184
2184 // Test that we can create a channel and start sending on it. 2185 // Test that we can create a channel and start sending on it.
2185 TEST_F(WebRtcVoiceEngineTestFake, Send) { 2186 TEST_F(WebRtcVoiceEngineTestFake, Send) {
2186 EXPECT_TRUE(SetupSendStream()); 2187 EXPECT_TRUE(SetupSendStream());
2187 SetSendParameters(send_parameters_); 2188 SetSendParameters(send_parameters_);
2188 SetSend(true); 2189 SetSend(true);
2189 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2190 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2190 SetSend(false); 2191 SetSend(false);
2191 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2192 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2192 } 2193 }
2193 2194
2194 // Test that a channel will send if and only if it has a source and is enabled 2195 // Test that a channel will send if and only if it has a source and is enabled
2195 // for sending. 2196 // for sending.
2196 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { 2197 TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) {
2197 EXPECT_TRUE(SetupSendStream()); 2198 EXPECT_TRUE(SetupSendStream());
2198 SetSendParameters(send_parameters_); 2199 SetSendParameters(send_parameters_);
2199 SetAudioSend(kSsrc1, true, nullptr); 2200 SetAudioSend(kSsrc9, true, nullptr);
2200 SetSend(true); 2201 SetSend(true);
2201 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2202 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2202 SetAudioSend(kSsrc1, true, &fake_source_); 2203 SetAudioSend(kSsrc9, true, &fake_source_);
2203 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2204 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2204 SetAudioSend(kSsrc1, true, nullptr); 2205 SetAudioSend(kSsrc9, true, nullptr);
2205 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2206 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2206 } 2207 }
2207 2208
2208 // Test that a channel is muted/unmuted. 2209 // Test that a channel is muted/unmuted.
2209 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) { 2210 TEST_F(WebRtcVoiceEngineTestFake, SendStateMuteUnmute) {
2210 EXPECT_TRUE(SetupSendStream()); 2211 EXPECT_TRUE(SetupSendStream());
2211 SetSendParameters(send_parameters_); 2212 SetSendParameters(send_parameters_);
2212 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); 2213 EXPECT_FALSE(GetSendStream(kSsrc9).muted());
2213 SetAudioSend(kSsrc1, true, nullptr); 2214 SetAudioSend(kSsrc9, true, nullptr);
2214 EXPECT_FALSE(GetSendStream(kSsrc1).muted()); 2215 EXPECT_FALSE(GetSendStream(kSsrc9).muted());
2215 SetAudioSend(kSsrc1, false, nullptr); 2216 SetAudioSend(kSsrc9, false, nullptr);
2216 EXPECT_TRUE(GetSendStream(kSsrc1).muted()); 2217 EXPECT_TRUE(GetSendStream(kSsrc9).muted());
2217 } 2218 }
2218 2219
2219 // Test that SetSendParameters() does not alter a stream's send state. 2220 // Test that SetSendParameters() does not alter a stream's send state.
2220 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { 2221 TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) {
2221 EXPECT_TRUE(SetupSendStream()); 2222 EXPECT_TRUE(SetupSendStream());
2222 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2223 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2223 2224
2224 // Turn on sending. 2225 // Turn on sending.
2225 SetSend(true); 2226 SetSend(true);
2226 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2227 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2227 2228
2228 // Changing RTP header extensions will recreate the AudioSendStream. 2229 // Changing RTP header extensions will recreate the AudioSendStream.
2229 send_parameters_.extensions.push_back( 2230 send_parameters_.extensions.push_back(
2230 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); 2231 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12));
2231 SetSendParameters(send_parameters_); 2232 SetSendParameters(send_parameters_);
2232 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2233 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2233 2234
2234 // Turn off sending. 2235 // Turn off sending.
2235 SetSend(false); 2236 SetSend(false);
2236 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2237 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2237 2238
2238 // Changing RTP header extensions will recreate the AudioSendStream. 2239 // Changing RTP header extensions will recreate the AudioSendStream.
2239 send_parameters_.extensions.clear(); 2240 send_parameters_.extensions.clear();
2240 SetSendParameters(send_parameters_); 2241 SetSendParameters(send_parameters_);
2241 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2242 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2242 } 2243 }
2243 2244
2244 // Test that we can create a channel and start playing out on it. 2245 // Test that we can create a channel and start playing out on it.
2245 TEST_F(WebRtcVoiceEngineTestFake, Playout) { 2246 TEST_F(WebRtcVoiceEngineTestFake, Playout) {
2246 EXPECT_TRUE(SetupRecvStream()); 2247 EXPECT_TRUE(SetupRecvStream());
2247 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2248 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
2248 channel_->SetPlayout(true); 2249 channel_->SetPlayout(true);
2249 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); 2250 EXPECT_TRUE(GetRecvStream(kSsrc9).started());
2250 channel_->SetPlayout(false); 2251 channel_->SetPlayout(false);
2251 EXPECT_FALSE(GetRecvStream(kSsrc1).started()); 2252 EXPECT_FALSE(GetRecvStream(kSsrc9).started());
2252 } 2253 }
2253 2254
2254 // Test that we can add and remove send streams. 2255 // Test that we can add and remove send streams.
2255 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) { 2256 TEST_F(WebRtcVoiceEngineTestFake, CreateAndDeleteMultipleSendStreams) {
2256 SetupForMultiSendStream(); 2257 SetupForMultiSendStream();
2257 2258
2258 // Set the global state for sending. 2259 // Set the global state for sending.
2259 SetSend(true); 2260 SetSend(true);
2260 2261
2261 for (uint32_t ssrc : kSsrcs4) { 2262 for (uint32_t ssrc : kSsrcs4) {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2410 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { 2411 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
2411 EXPECT_TRUE(SetupSendStream()); 2412 EXPECT_TRUE(SetupSendStream());
2412 2413
2413 // Start playout without a receive stream. 2414 // Start playout without a receive stream.
2414 SetSendParameters(send_parameters_); 2415 SetSendParameters(send_parameters_);
2415 channel_->SetPlayout(true); 2416 channel_->SetPlayout(true);
2416 2417
2417 // Adding another stream should enable playout on the new stream only. 2418 // Adding another stream should enable playout on the new stream only.
2418 EXPECT_TRUE(AddRecvStream(kSsrc2)); 2419 EXPECT_TRUE(AddRecvStream(kSsrc2));
2419 SetSend(true); 2420 SetSend(true);
2420 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2421 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2421 2422
2422 // Make sure only the new stream is played out. 2423 // Make sure only the new stream is played out.
2423 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); 2424 EXPECT_TRUE(GetRecvStream(kSsrc2).started());
2424 2425
2425 // Adding yet another stream should have stream 2 and 3 enabled for playout. 2426 // Adding yet another stream should have stream 2 and 3 enabled for playout.
2426 EXPECT_TRUE(AddRecvStream(kSsrc3)); 2427 EXPECT_TRUE(AddRecvStream(kSsrc3));
2427 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); 2428 EXPECT_TRUE(GetRecvStream(kSsrc2).started());
2428 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); 2429 EXPECT_TRUE(GetRecvStream(kSsrc3).started());
2429 2430
2430 // Stop sending. 2431 // Stop sending.
2431 SetSend(false); 2432 SetSend(false);
2432 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2433 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2433 2434
2434 // Stop playout. 2435 // Stop playout.
2435 channel_->SetPlayout(false); 2436 channel_->SetPlayout(false);
2436 EXPECT_FALSE(GetRecvStream(kSsrc2).started()); 2437 EXPECT_FALSE(GetRecvStream(kSsrc2).started());
2437 EXPECT_FALSE(GetRecvStream(kSsrc3).started()); 2438 EXPECT_FALSE(GetRecvStream(kSsrc3).started());
2438 2439
2439 // Restart playout and make sure recv streams are played out. 2440 // Restart playout and make sure recv streams are played out.
2440 channel_->SetPlayout(true); 2441 channel_->SetPlayout(true);
2441 EXPECT_TRUE(GetRecvStream(kSsrc2).started()); 2442 EXPECT_TRUE(GetRecvStream(kSsrc2).started());
2442 EXPECT_TRUE(GetRecvStream(kSsrc3).started()); 2443 EXPECT_TRUE(GetRecvStream(kSsrc3).started());
2443 2444
2444 // Now remove the recv streams. 2445 // Now remove the recv streams.
2445 EXPECT_TRUE(channel_->RemoveRecvStream(3)); 2446 EXPECT_TRUE(channel_->RemoveRecvStream(3));
2446 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 2447 EXPECT_TRUE(channel_->RemoveRecvStream(2));
2447 } 2448 }
2448 2449
2449 // Test that we can create a channel configured for Codian bridges, 2450 // Test that we can create a channel configured for Codian bridges,
2450 // and start sending on it. 2451 // and start sending on it.
2451 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) { 2452 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) {
2452 EXPECT_TRUE(SetupSendStream()); 2453 EXPECT_TRUE(SetupSendStream());
2453 cricket::AudioOptions options_adjust_agc; 2454 cricket::AudioOptions options_adjust_agc;
2454 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10); 2455 options_adjust_agc.adjust_agc_delta = rtc::Optional<int>(-10);
2455 webrtc::AgcConfig agc_config; 2456 webrtc::AgcConfig agc_config;
2456 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2457 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2457 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2458 EXPECT_EQ(0, agc_config.targetLeveldBOv);
2458 send_parameters_.options = options_adjust_agc; 2459 send_parameters_.options = options_adjust_agc;
2459 SetSendParameters(send_parameters_); 2460 SetSendParameters(send_parameters_);
2460 SetSend(true); 2461 SetSend(true);
2461 EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); 2462 EXPECT_TRUE(GetSendStream(kSsrc9).IsSending());
2462 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2463 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2463 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated 2464 EXPECT_EQ(agc_config.targetLeveldBOv, 10); // level was attenuated
2464 SetSend(false); 2465 SetSend(false);
2465 EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); 2466 EXPECT_FALSE(GetSendStream(kSsrc9).IsSending());
2466 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2467 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2467 } 2468 }
2468 2469
2469 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) { 2470 TEST_F(WebRtcVoiceEngineTestFake, TxAgcConfigViaOptions) {
2470 EXPECT_TRUE(SetupSendStream()); 2471 EXPECT_TRUE(SetupSendStream());
2471 EXPECT_CALL(adm_, 2472 EXPECT_CALL(adm_,
2472 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false)); 2473 BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false));
2473 webrtc::AgcConfig agc_config; 2474 webrtc::AgcConfig agc_config;
2474 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config)); 2475 EXPECT_EQ(0, voe_.GetAgcConfig(agc_config));
2475 EXPECT_EQ(0, agc_config.targetLeveldBOv); 2476 EXPECT_EQ(0, agc_config.targetLeveldBOv);
(...skipping 26 matching lines...) Expand all
2502 SetSendParameters(send_parameters_); 2503 SetSendParameters(send_parameters_);
2503 } 2504 }
2504 2505
2505 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) { 2506 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) {
2506 EXPECT_TRUE(SetupSendStream()); 2507 EXPECT_TRUE(SetupSendStream());
2507 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); 2508 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
2508 send_parameters_.options.audio_network_adaptor_config = 2509 send_parameters_.options.audio_network_adaptor_config =
2509 rtc::Optional<std::string>("1234"); 2510 rtc::Optional<std::string>("1234");
2510 SetSendParameters(send_parameters_); 2511 SetSendParameters(send_parameters_);
2511 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2512 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
2512 GetAudioNetworkAdaptorConfig(kSsrc1)); 2513 GetAudioNetworkAdaptorConfig(kSsrc9));
2513 } 2514 }
2514 2515
2515 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { 2516 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) {
2516 EXPECT_TRUE(SetupSendStream()); 2517 EXPECT_TRUE(SetupSendStream());
2517 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); 2518 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
2518 send_parameters_.options.audio_network_adaptor_config = 2519 send_parameters_.options.audio_network_adaptor_config =
2519 rtc::Optional<std::string>("1234"); 2520 rtc::Optional<std::string>("1234");
2520 SetSendParameters(send_parameters_); 2521 SetSendParameters(send_parameters_);
2521 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2522 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
2522 GetAudioNetworkAdaptorConfig(kSsrc1)); 2523 GetAudioNetworkAdaptorConfig(kSsrc9));
2523 const int initial_num = call_.GetNumCreatedSendStreams(); 2524 const int initial_num = call_.GetNumCreatedSendStreams();
2524 cricket::AudioOptions options; 2525 cricket::AudioOptions options;
2525 options.audio_network_adaptor = rtc::Optional<bool>(false); 2526 options.audio_network_adaptor = rtc::Optional<bool>(false);
2526 SetAudioSend(kSsrc1, true, nullptr, &options); 2527 SetAudioSend(kSsrc9, true, nullptr, &options);
2527 // AudioSendStream expected to be recreated. 2528 // AudioSendStream expected to be recreated.
2528 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 2529 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
2529 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrc1)); 2530 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrc9));
2530 } 2531 }
2531 2532
2532 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { 2533 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) {
2533 EXPECT_TRUE(SetupSendStream()); 2534 EXPECT_TRUE(SetupSendStream());
2534 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); 2535 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
2535 send_parameters_.options.audio_network_adaptor_config = 2536 send_parameters_.options.audio_network_adaptor_config =
2536 rtc::Optional<std::string>("1234"); 2537 rtc::Optional<std::string>("1234");
2537 SetSendParameters(send_parameters_); 2538 SetSendParameters(send_parameters_);
2538 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2539 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
2539 GetAudioNetworkAdaptorConfig(kSsrc1)); 2540 GetAudioNetworkAdaptorConfig(kSsrc9));
2540 const int initial_num = call_.GetNumCreatedSendStreams(); 2541 const int initial_num = call_.GetNumCreatedSendStreams();
2541 cricket::AudioOptions options; 2542 cricket::AudioOptions options;
2542 options.audio_network_adaptor = rtc::Optional<bool>(); 2543 options.audio_network_adaptor = rtc::Optional<bool>();
2543 // Unvalued |options.audio_network_adaptor|.should not reset audio network 2544 // Unvalued |options.audio_network_adaptor|.should not reset audio network
2544 // adaptor. 2545 // adaptor.
2545 SetAudioSend(kSsrc1, true, nullptr, &options); 2546 SetAudioSend(kSsrc9, true, nullptr, &options);
2546 // AudioSendStream not expected to be recreated. 2547 // AudioSendStream not expected to be recreated.
2547 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); 2548 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams());
2548 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2549 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
2549 GetAudioNetworkAdaptorConfig(kSsrc1)); 2550 GetAudioNetworkAdaptorConfig(kSsrc9));
2550 } 2551 }
2551 2552
2552 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest 2553 class WebRtcVoiceEngineWithSendSideBweWithOverheadTest
2553 : public WebRtcVoiceEngineTestFake { 2554 : public WebRtcVoiceEngineTestFake {
2554 public: 2555 public:
2555 WebRtcVoiceEngineWithSendSideBweWithOverheadTest() 2556 WebRtcVoiceEngineWithSendSideBweWithOverheadTest()
2556 : WebRtcVoiceEngineTestFake( 2557 : WebRtcVoiceEngineTestFake(
2557 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/" 2558 "WebRTC-Audio-SendSideBwe/Enabled/WebRTC-SendSideBwe-WithOverhead/"
2558 "Enabled/") {} 2559 "Enabled/") {}
2559 }; 2560 };
2560 2561
2561 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) { 2562 TEST_F(WebRtcVoiceEngineWithSendSideBweWithOverheadTest, MinAndMaxBitrate) {
2562 EXPECT_TRUE(SetupSendStream()); 2563 EXPECT_TRUE(SetupSendStream());
2563 cricket::AudioSendParameters parameters; 2564 cricket::AudioSendParameters parameters;
2564 parameters.codecs.push_back(kOpusCodec); 2565 parameters.codecs.push_back(kOpusCodec);
2565 SetSendParameters(parameters); 2566 SetSendParameters(parameters);
2566 const int initial_num = call_.GetNumCreatedSendStreams(); 2567 const int initial_num = call_.GetNumCreatedSendStreams();
2567 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams()); 2568 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams());
2568 2569
2569 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) 2570 // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12)
2570 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; 2571 constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12;
2571 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; 2572 constexpr int kOpusMaxPtimeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60;
2572 constexpr int kMinOverheadBps = 2573 constexpr int kMinOverheadBps =
2573 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; 2574 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs;
2574 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10; 2575 constexpr int kMaxOverheadBps = kOverheadPerPacket * 8 * 1000 / 10;
2575 2576
2576 constexpr int kOpusMinBitrateBps = 6000; 2577 constexpr int kOpusMinBitrateBps = 6000;
2577 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps, 2578 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadBps,
2578 GetSendStreamConfig(kSsrc1).min_bitrate_bps); 2579 GetSendStreamConfig(kSsrc9).min_bitrate_bps);
2579 constexpr int kOpusBitrateFbBps = 32000; 2580 constexpr int kOpusBitrateFbBps = 32000;
2580 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps, 2581 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadBps,
2581 GetSendStreamConfig(kSsrc1).max_bitrate_bps); 2582 GetSendStreamConfig(kSsrc9).max_bitrate_bps);
2582 2583
2583 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true); 2584 parameters.options.audio_network_adaptor = rtc::Optional<bool>(true);
2584 parameters.options.audio_network_adaptor_config = 2585 parameters.options.audio_network_adaptor_config =
2585 rtc::Optional<std::string>("1234"); 2586 rtc::Optional<std::string>("1234");
2586 SetSendParameters(parameters); 2587 SetSendParameters(parameters);
2587 2588
2588 constexpr int kMinOverheadWithAnaBps = 2589 constexpr int kMinOverheadWithAnaBps =
2589 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs; 2590 kOverheadPerPacket * 8 * 1000 / kOpusMaxPtimeMs;
2590 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20; 2591 constexpr int kMaxOverheadWithAnaBps = kOverheadPerPacket * 8 * 1000 / 20;
2591 2592
2592 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps, 2593 EXPECT_EQ(kOpusMinBitrateBps + kMinOverheadWithAnaBps,
2593 GetSendStreamConfig(kSsrc1).min_bitrate_bps); 2594 GetSendStreamConfig(kSsrc9).min_bitrate_bps);
2594 2595
2595 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps, 2596 EXPECT_EQ(kOpusBitrateFbBps + kMaxOverheadWithAnaBps,
2596 GetSendStreamConfig(kSsrc1).max_bitrate_bps); 2597 GetSendStreamConfig(kSsrc9).max_bitrate_bps);
2597 } 2598 }
2598 2599
2599 // Test that we can set the outgoing SSRC properly. 2600 // Test that we can set the outgoing SSRC properly.
2600 // SSRC is set in SetupSendStream() by calling AddSendStream. 2601 // SSRC is set in SetupSendStream() by calling AddSendStream.
2601 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) { 2602 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrc) {
2602 EXPECT_TRUE(SetupSendStream()); 2603 EXPECT_TRUE(SetupSendStream());
2603 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); 2604 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9));
2604 } 2605 }
2605 2606
2606 TEST_F(WebRtcVoiceEngineTestFake, GetStats) { 2607 TEST_F(WebRtcVoiceEngineTestFake, GetStats) {
2607 // Setup. We need send codec to be set to get all stats. 2608 // Setup. We need send codec to be set to get all stats.
2608 EXPECT_TRUE(SetupSendStream()); 2609 EXPECT_TRUE(SetupSendStream());
2609 // SetupSendStream adds a send stream with kSsrc1, so the receive 2610 // SetupSendStream adds a send stream with kSsrc9, so the receive
2610 // stream has to use a different SSRC. 2611 // stream has to use a different SSRC.
2611 EXPECT_TRUE(AddRecvStream(kSsrc2)); 2612 EXPECT_TRUE(AddRecvStream(kSsrc2));
2612 SetSendParameters(send_parameters_); 2613 SetSendParameters(send_parameters_);
2613 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2614 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
2614 SetAudioSendStreamStats(); 2615 SetAudioSendStreamStats();
2615 2616
2616 // Check stats for the added streams. 2617 // Check stats for the added streams.
2617 { 2618 {
2618 cricket::VoiceMediaInfo info; 2619 cricket::VoiceMediaInfo info;
2619 EXPECT_EQ(true, channel_->GetStats(&info)); 2620 EXPECT_EQ(true, channel_->GetStats(&info));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 EXPECT_EQ(1u, info.receivers.size()); 2656 EXPECT_EQ(1u, info.receivers.size());
2656 VerifyVoiceReceiverInfo(info.receivers[0]); 2657 VerifyVoiceReceiverInfo(info.receivers[0]);
2657 VerifyVoiceSendRecvCodecs(info); 2658 VerifyVoiceSendRecvCodecs(info);
2658 } 2659 }
2659 } 2660 }
2660 2661
2661 // Test that we can set the outgoing SSRC properly with multiple streams. 2662 // Test that we can set the outgoing SSRC properly with multiple streams.
2662 // SSRC is set in SetupSendStream() by calling AddSendStream. 2663 // SSRC is set in SetupSendStream() by calling AddSendStream.
2663 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { 2664 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) {
2664 EXPECT_TRUE(SetupSendStream()); 2665 EXPECT_TRUE(SetupSendStream());
2665 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); 2666 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9));
2666 EXPECT_TRUE(AddRecvStream(kSsrc2)); 2667 EXPECT_TRUE(AddRecvStream(kSsrc2));
2667 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); 2668 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc);
2668 } 2669 }
2669 2670
2670 // Test that the local SSRC is the same on sending and receiving channels if the 2671 // Test that the local SSRC is the same on sending and receiving channels if the
2671 // receive channel is created before the send channel. 2672 // receive channel is created before the send channel.
2672 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { 2673 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) {
2673 EXPECT_TRUE(SetupChannel()); 2674 EXPECT_TRUE(SetupChannel());
2674 EXPECT_TRUE(AddRecvStream(kSsrc2)); 2675 EXPECT_TRUE(AddRecvStream(kSsrc2));
2675 EXPECT_TRUE(channel_->AddSendStream( 2676 EXPECT_TRUE(channel_->AddSendStream(
2676 cricket::StreamParams::CreateLegacy(kSsrc1))); 2677 cricket::StreamParams::CreateLegacy(kSsrc9)));
2677 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); 2678 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc9));
2678 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); 2679 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc);
2679 } 2680 }
2680 2681
2681 // Test that we can properly receive packets. 2682 // Test that we can properly receive packets.
2682 TEST_F(WebRtcVoiceEngineTestFake, Recv) { 2683 TEST_F(WebRtcVoiceEngineTestFake, Recv) {
2683 EXPECT_TRUE(SetupChannel()); 2684 EXPECT_TRUE(SetupChannel());
2684 EXPECT_TRUE(AddRecvStream(1)); 2685 EXPECT_TRUE(AddRecvStream(1));
2685 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2686 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2686 2687
2687 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, 2688 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame,
2688 sizeof(kPcmuFrame))); 2689 sizeof(kPcmuFrame)));
2689 } 2690 }
2690 2691
2691 // Test that we can properly receive packets on multiple streams. 2692 // Test that we can properly receive packets on multiple streams.
2692 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { 2693 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) {
2693 EXPECT_TRUE(SetupChannel()); 2694 EXPECT_TRUE(SetupChannel());
2694 const uint32_t ssrc1 = 1; 2695 EXPECT_TRUE(AddRecvStream(kSsrc1));
2695 const uint32_t ssrc2 = 2; 2696 EXPECT_TRUE(AddRecvStream(kSsrc2));
2696 const uint32_t ssrc3 = 3; 2697 EXPECT_TRUE(AddRecvStream(kSsrc3));
2697 EXPECT_TRUE(AddRecvStream(ssrc1));
2698 EXPECT_TRUE(AddRecvStream(ssrc2));
2699 EXPECT_TRUE(AddRecvStream(ssrc3));
2700 // Create packets with the right SSRCs. 2698 // Create packets with the right SSRCs.
2701 unsigned char packets[4][sizeof(kPcmuFrame)]; 2699 unsigned char packets[4][sizeof(kPcmuFrame)];
2702 for (size_t i = 0; i < arraysize(packets); ++i) { 2700 for (size_t i = 0; i < arraysize(packets); ++i) {
2703 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); 2701 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame));
2704 rtc::SetBE32(packets[i] + 8, static_cast<uint32_t>(i)); 2702 rtc::SetBE32(packets[i] + 8, static_cast<uint32_t>(i));
Taylor Brandstetter 2017/02/17 10:34:46 This test puts the literal values 1, 2 and 3 in th
the sun 2017/02/17 11:22:47 Oh, well spotted. Reverted. Thanks!
2705 } 2703 }
2706 2704
2707 const cricket::FakeAudioReceiveStream& s1 = GetRecvStream(ssrc1); 2705 const cricket::FakeAudioReceiveStream& s1 = GetRecvStream(kSsrc1);
2708 const cricket::FakeAudioReceiveStream& s2 = GetRecvStream(ssrc2); 2706 const cricket::FakeAudioReceiveStream& s2 = GetRecvStream(kSsrc2);
2709 const cricket::FakeAudioReceiveStream& s3 = GetRecvStream(ssrc3); 2707 const cricket::FakeAudioReceiveStream& s3 = GetRecvStream(kSsrc3);
2710 2708
2711 EXPECT_EQ(s1.received_packets(), 0); 2709 EXPECT_EQ(s1.received_packets(), 0);
2712 EXPECT_EQ(s2.received_packets(), 0); 2710 EXPECT_EQ(s2.received_packets(), 0);
2713 EXPECT_EQ(s3.received_packets(), 0); 2711 EXPECT_EQ(s3.received_packets(), 0);
2714 2712
2715 DeliverPacket(packets[0], sizeof(packets[0])); 2713 DeliverPacket(packets[0], sizeof(packets[0]));
2716 EXPECT_EQ(s1.received_packets(), 0); 2714 EXPECT_EQ(s1.received_packets(), 0);
2717 EXPECT_EQ(s2.received_packets(), 0); 2715 EXPECT_EQ(s2.received_packets(), 0);
2718 EXPECT_EQ(s3.received_packets(), 0); 2716 EXPECT_EQ(s3.received_packets(), 0);
2719 2717
2720 DeliverPacket(packets[1], sizeof(packets[1])); 2718 DeliverPacket(packets[1], sizeof(packets[1]));
2721 EXPECT_EQ(s1.received_packets(), 1); 2719 EXPECT_EQ(s1.received_packets(), 1);
2722 EXPECT_TRUE(s1.VerifyLastPacket(packets[1], sizeof(packets[1]))); 2720 EXPECT_TRUE(s1.VerifyLastPacket(packets[1], sizeof(packets[1])));
2723 EXPECT_EQ(s2.received_packets(), 0); 2721 EXPECT_EQ(s2.received_packets(), 0);
2724 EXPECT_EQ(s3.received_packets(), 0); 2722 EXPECT_EQ(s3.received_packets(), 0);
2725 2723
2726 DeliverPacket(packets[2], sizeof(packets[2])); 2724 DeliverPacket(packets[2], sizeof(packets[2]));
2727 EXPECT_EQ(s1.received_packets(), 1); 2725 EXPECT_EQ(s1.received_packets(), 1);
2728 EXPECT_EQ(s2.received_packets(), 1); 2726 EXPECT_EQ(s2.received_packets(), 1);
2729 EXPECT_TRUE(s2.VerifyLastPacket(packets[2], sizeof(packets[2]))); 2727 EXPECT_TRUE(s2.VerifyLastPacket(packets[2], sizeof(packets[2])));
2730 EXPECT_EQ(s3.received_packets(), 0); 2728 EXPECT_EQ(s3.received_packets(), 0);
2731 2729
2732 DeliverPacket(packets[3], sizeof(packets[3])); 2730 DeliverPacket(packets[3], sizeof(packets[3]));
2733 EXPECT_EQ(s1.received_packets(), 1); 2731 EXPECT_EQ(s1.received_packets(), 1);
2734 EXPECT_EQ(s2.received_packets(), 1); 2732 EXPECT_EQ(s2.received_packets(), 1);
2735 EXPECT_EQ(s3.received_packets(), 1); 2733 EXPECT_EQ(s3.received_packets(), 1);
2736 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3]))); 2734 EXPECT_TRUE(s3.VerifyLastPacket(packets[3], sizeof(packets[3])));
2737 2735
2738 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc3)); 2736 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc3));
2739 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc2)); 2737 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2740 EXPECT_TRUE(channel_->RemoveRecvStream(ssrc1)); 2738 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1));
2741 } 2739 }
2742 2740
2743 // Test that receiving on an unsignalled stream works (default channel will be 2741 // Test that receiving on an unsignaled stream works (a stream is created).
2744 // created). 2742 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaled) {
2745 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) {
2746 EXPECT_TRUE(SetupChannel()); 2743 EXPECT_TRUE(SetupChannel());
2747 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size()); 2744 EXPECT_EQ(0, call_.GetAudioReceiveStreams().size());
2748 2745
2749 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2746 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2750 2747
2751 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); 2748 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size());
2752 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame, 2749 EXPECT_TRUE(GetRecvStream(1).VerifyLastPacket(kPcmuFrame,
2753 sizeof(kPcmuFrame))); 2750 sizeof(kPcmuFrame)));
2754 } 2751 }
2755 2752
2756 // Test that receiving on an unsignalled stream works (default channel will be 2753 // Test that receiving N unsignaled stream works (streams will be created), and
2757 // created), and that packets will be forwarded to the default channel 2754 // that packets are forwarded to them all.
2758 // regardless of their SSRCs. 2755 TEST_F(WebRtcVoiceEngineTestFake, RecvMultipleUnsignaled) {
2759 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) {
2760 EXPECT_TRUE(SetupChannel()); 2756 EXPECT_TRUE(SetupChannel());
2761 unsigned char packet[sizeof(kPcmuFrame)]; 2757 unsigned char packet[sizeof(kPcmuFrame)];
2762 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); 2758 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
2763 2759
2764 // Note that ssrc = 0 is not supported. 2760 constexpr uint32_t kMaxUnsignaledCount = 50;
2765 uint32_t ssrc = 1; 2761
2766 for (; ssrc < 10; ++ssrc) { 2762 // Note that SSRC = 0 is not supported.
2763 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) {
2767 rtc::SetBE32(&packet[8], ssrc); 2764 rtc::SetBE32(&packet[8], ssrc);
2768 DeliverPacket(packet, sizeof(packet)); 2765 DeliverPacket(packet, sizeof(packet));
2769 2766
2770 // Verify we only have one default stream. 2767 // Verify we have one new stream for each loop iteration.
2771 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); 2768 EXPECT_EQ(ssrc, call_.GetAudioReceiveStreams().size());
2772 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets()); 2769 EXPECT_EQ(1, GetRecvStream(ssrc).received_packets());
2773 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); 2770 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet)));
2774 } 2771 }
2775 2772
2776 // Sending the same ssrc again should not create a new stream. 2773 // Sending on the same SSRCs again should not create new streams.
2777 --ssrc; 2774 for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledCount); ++ssrc) {
2775 rtc::SetBE32(&packet[8], ssrc);
2776 DeliverPacket(packet, sizeof(packet));
2777
2778 EXPECT_EQ(kMaxUnsignaledCount, call_.GetAudioReceiveStreams().size());
2779 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets());
2780 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet)));
2781 }
2782
2783 // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced.
2784 constexpr uint32_t kAnotherSsrc = 667;
2785 rtc::SetBE32(&packet[8], kAnotherSsrc);
2778 DeliverPacket(packet, sizeof(packet)); 2786 DeliverPacket(packet, sizeof(packet));
2779 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); 2787
2780 EXPECT_EQ(2, GetRecvStream(ssrc).received_packets()); 2788 const auto& streams = call_.GetAudioReceiveStreams();
2781 EXPECT_TRUE(GetRecvStream(ssrc).VerifyLastPacket(packet, sizeof(packet))); 2789 EXPECT_EQ(kMaxUnsignaledCount, streams.size());
2790 size_t i = 0;
2791 for (uint32_t ssrc = 2; ssrc < (1 + kMaxUnsignaledCount); ++ssrc, ++i) {
2792 EXPECT_EQ(ssrc, streams[i]->GetConfig().rtp.remote_ssrc);
2793 EXPECT_EQ(2, streams[i]->received_packets());
2794 }
2795 EXPECT_EQ(kAnotherSsrc, streams[i]->GetConfig().rtp.remote_ssrc);
2796 EXPECT_EQ(1, streams[i]->received_packets());
2797 // Sanity check that we've checked all streams.
2798 EXPECT_EQ(kMaxUnsignaledCount, (i + 1));
2782 } 2799 }
2783 2800
2784 // Test that a default channel is created even after a signalled stream has been 2801 // Test that a default channel is created even after a signaled stream has been
2785 // added, and that this stream will get any packets for unknown SSRCs. 2802 // added, and that this stream will get any packets for unknown SSRCs.
2786 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { 2803 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignaledAfterSignaled) {
2787 EXPECT_TRUE(SetupChannel()); 2804 EXPECT_TRUE(SetupChannel());
2788 unsigned char packet[sizeof(kPcmuFrame)]; 2805 unsigned char packet[sizeof(kPcmuFrame)];
2789 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); 2806 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
2790 2807
2791 // Add a known stream, send packet and verify we got it. 2808 // Add a known stream, send packet and verify we got it.
2792 const uint32_t signaled_ssrc = 1; 2809 const uint32_t signaled_ssrc = 1;
2793 rtc::SetBE32(&packet[8], signaled_ssrc); 2810 rtc::SetBE32(&packet[8], signaled_ssrc);
2794 EXPECT_TRUE(AddRecvStream(signaled_ssrc)); 2811 EXPECT_TRUE(AddRecvStream(signaled_ssrc));
2795 DeliverPacket(packet, sizeof(packet)); 2812 DeliverPacket(packet, sizeof(packet));
2796 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket( 2813 EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket(
2797 packet, sizeof(packet))); 2814 packet, sizeof(packet)));
2815 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size());
2798 2816
2799 // Note that the first unknown SSRC cannot be 0, because we only support 2817 // Note that the first unknown SSRC cannot be 0, because we only support
2800 // creating receive streams for SSRC!=0. 2818 // creating receive streams for SSRC!=0.
2801 const uint32_t unsignaled_ssrc = 7011; 2819 const uint32_t unsignaled_ssrc = 7011;
2802 rtc::SetBE32(&packet[8], unsignaled_ssrc); 2820 rtc::SetBE32(&packet[8], unsignaled_ssrc);
2803 DeliverPacket(packet, sizeof(packet)); 2821 DeliverPacket(packet, sizeof(packet));
2804 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket( 2822 EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket(
2805 packet, sizeof(packet))); 2823 packet, sizeof(packet)));
2806 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); 2824 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size());
2807 2825
(...skipping 29 matching lines...) Expand all
2837 } 2855 }
2838 2856
2839 // Test that after adding a recv stream, we do not decode more codecs than 2857 // Test that after adding a recv stream, we do not decode more codecs than
2840 // those previously passed into SetRecvCodecs. 2858 // those previously passed into SetRecvCodecs.
2841 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) { 2859 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamUnsupportedCodec) {
2842 EXPECT_TRUE(SetupSendStream()); 2860 EXPECT_TRUE(SetupSendStream());
2843 cricket::AudioRecvParameters parameters; 2861 cricket::AudioRecvParameters parameters;
2844 parameters.codecs.push_back(kIsacCodec); 2862 parameters.codecs.push_back(kIsacCodec);
2845 parameters.codecs.push_back(kPcmuCodec); 2863 parameters.codecs.push_back(kPcmuCodec);
2846 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 2864 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2847 EXPECT_TRUE(AddRecvStream(kSsrc1)); 2865 EXPECT_TRUE(AddRecvStream(kSsrc9));
2848 int channel_num2 = voe_.GetLastChannel(); 2866 int channel_num2 = voe_.GetLastChannel();
2849 webrtc::CodecInst gcodec; 2867 webrtc::CodecInst gcodec;
2850 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus"); 2868 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "opus");
2851 gcodec.plfreq = 48000; 2869 gcodec.plfreq = 48000;
2852 gcodec.channels = 2; 2870 gcodec.channels = 2;
2853 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec)); 2871 EXPECT_EQ(-1, voe_.GetRecPayloadType(channel_num2, gcodec));
2854 } 2872 }
2855 2873
2856 // Test that we properly clean up any streams that were added, even if 2874 // Test that we properly clean up any streams that were added, even if
2857 // not explicitly removed. 2875 // not explicitly removed.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 TestInsertDtmf(0, true, kTelephoneEventCodec1); 2908 TestInsertDtmf(0, true, kTelephoneEventCodec1);
2891 } 2909 }
2892 2910
2893 // Test the InsertDtmf on default send stream as callee 2911 // Test the InsertDtmf on default send stream as callee
2894 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) { 2912 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnDefaultSendStreamAsCallee) {
2895 TestInsertDtmf(0, false, kTelephoneEventCodec2); 2913 TestInsertDtmf(0, false, kTelephoneEventCodec2);
2896 } 2914 }
2897 2915
2898 // Test the InsertDtmf on specified send stream as caller. 2916 // Test the InsertDtmf on specified send stream as caller.
2899 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) { 2917 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCaller) {
2900 TestInsertDtmf(kSsrc1, true, kTelephoneEventCodec2); 2918 TestInsertDtmf(kSsrc9, true, kTelephoneEventCodec2);
2901 } 2919 }
2902 2920
2903 // Test the InsertDtmf on specified send stream as callee. 2921 // Test the InsertDtmf on specified send stream as callee.
2904 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) { 2922 TEST_F(WebRtcVoiceEngineTestFake, InsertDtmfOnSendStreamAsCallee) {
2905 TestInsertDtmf(kSsrc1, false, kTelephoneEventCodec1); 2923 TestInsertDtmf(kSsrc9, false, kTelephoneEventCodec1);
2906 } 2924 }
2907 2925
2908 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) { 2926 TEST_F(WebRtcVoiceEngineTestFake, SetAudioOptions) {
2909 EXPECT_TRUE(SetupSendStream()); 2927 EXPECT_TRUE(SetupSendStream());
2910 EXPECT_CALL(adm_, 2928 EXPECT_CALL(adm_,
2911 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false)); 2929 BuiltInAECIsAvailable()).Times(9).WillRepeatedly(Return(false));
2912 EXPECT_CALL(adm_, 2930 EXPECT_CALL(adm_,
2913 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false)); 2931 BuiltInAGCIsAvailable()).Times(4).WillRepeatedly(Return(false));
2914 EXPECT_CALL(adm_, 2932 EXPECT_CALL(adm_,
2915 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false)); 2933 BuiltInNSIsAvailable()).Times(2).WillRepeatedly(Return(false));
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
3248 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); 3266 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp());
3249 3267
3250 channel->SetInterface(nullptr); 3268 channel->SetInterface(nullptr);
3251 } 3269 }
3252 3270
3253 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { 3271 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) {
3254 EXPECT_TRUE(SetupChannel()); 3272 EXPECT_TRUE(SetupChannel());
3255 cricket::WebRtcVoiceMediaChannel* media_channel = 3273 cricket::WebRtcVoiceMediaChannel* media_channel =
3256 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3274 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3257 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); 3275 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0));
3258 EXPECT_TRUE(AddRecvStream(kSsrc1)); 3276 EXPECT_TRUE(AddRecvStream(kSsrc9));
3259 int channel_id = voe_.GetLastChannel(); 3277 int channel_id = voe_.GetLastChannel();
3260 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc1)); 3278 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc9));
3261 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); 3279 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2));
3262 EXPECT_TRUE(AddRecvStream(kSsrc2)); 3280 EXPECT_TRUE(AddRecvStream(kSsrc2));
3263 int channel_id2 = voe_.GetLastChannel(); 3281 int channel_id2 = voe_.GetLastChannel();
3264 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); 3282 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2));
3265 } 3283 }
3266 3284
3267 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { 3285 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) {
3268 EXPECT_TRUE(SetupChannel()); 3286 EXPECT_TRUE(SetupChannel());
3269 cricket::WebRtcVoiceMediaChannel* media_channel = 3287 cricket::WebRtcVoiceMediaChannel* media_channel =
3270 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 3288 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
3271 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); 3289 EXPECT_EQ(-1, media_channel->GetSendChannelId(0));
3272 EXPECT_TRUE(channel_->AddSendStream( 3290 EXPECT_TRUE(channel_->AddSendStream(
3273 cricket::StreamParams::CreateLegacy(kSsrc1))); 3291 cricket::StreamParams::CreateLegacy(kSsrc9)));
3274 int channel_id = voe_.GetLastChannel(); 3292 int channel_id = voe_.GetLastChannel();
3275 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc1)); 3293 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc9));
3276 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); 3294 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2));
3277 EXPECT_TRUE(channel_->AddSendStream( 3295 EXPECT_TRUE(channel_->AddSendStream(
3278 cricket::StreamParams::CreateLegacy(kSsrc2))); 3296 cricket::StreamParams::CreateLegacy(kSsrc2)));
3279 int channel_id2 = voe_.GetLastChannel(); 3297 int channel_id2 = voe_.GetLastChannel();
3280 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); 3298 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2));
3281 } 3299 }
3282 3300
3283 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { 3301 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) {
3284 EXPECT_TRUE(SetupChannel()); 3302 EXPECT_TRUE(SetupChannel());
3285 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); 3303 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5));
3286 cricket::StreamParams stream; 3304 cricket::StreamParams stream;
3287 stream.ssrcs.push_back(kSsrc2); 3305 stream.ssrcs.push_back(kSsrc2);
3288 EXPECT_TRUE(channel_->AddRecvStream(stream)); 3306 EXPECT_TRUE(channel_->AddRecvStream(stream));
3289 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc2).gain()); 3307 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc2).gain());
3290 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); 3308 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3));
3291 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain()); 3309 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc2).gain());
3292 } 3310 }
3293 3311
3294 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { 3312 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeUnsignaledRecvStream) {
3295 EXPECT_TRUE(SetupChannel()); 3313 EXPECT_TRUE(SetupChannel());
3314
3315 // Spawn an unsignaled stream by sending a packet - gain should be 1.
3316 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
3317 EXPECT_DOUBLE_EQ(1, GetRecvStream(kSsrc1).gain());
3318
3319 // Should remember the volume "2" which will be set on new unsignaled streams,
3320 // and also set the gain to 2 on existing unsignaled streams.
3296 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); 3321 EXPECT_TRUE(channel_->SetOutputVolume(0, 2));
3297 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3322 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc1).gain());
3298 EXPECT_DOUBLE_EQ(2, GetRecvStream(1).gain()); 3323
3324 // Spawn an unsignaled stream by sending a packet - gain should be 2.
3325 unsigned char pcmuFrame2[sizeof(kPcmuFrame)];
3326 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
3327 rtc::SetBE32(&pcmuFrame2[8], kSsrc4);
3328 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2));
3329 EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrc4).gain());
3330
3331 // Setting gain with SSRC=0 should affect all unsignaled streams.
3299 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); 3332 EXPECT_TRUE(channel_->SetOutputVolume(0, 3));
3300 EXPECT_DOUBLE_EQ(3, GetRecvStream(1).gain()); 3333 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain());
3301 EXPECT_TRUE(channel_->SetOutputVolume(1, 4)); 3334 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc4).gain());
3302 EXPECT_DOUBLE_EQ(4, GetRecvStream(1).gain()); 3335
3336 // Setting gain on an individual stream affects only that.
3337 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc4, 4));
3338 EXPECT_DOUBLE_EQ(3, GetRecvStream(kSsrc1).gain());
3339 EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrc4).gain());
3303 } 3340 }
3304 3341
3305 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { 3342 TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
3306 const uint32_t kAudioSsrc = 123; 3343 const uint32_t kAudioSsrc = 123;
3307 const std::string kSyncLabel = "AvSyncLabel"; 3344 const std::string kSyncLabel = "AvSyncLabel";
3308 3345
3309 EXPECT_TRUE(SetupSendStream()); 3346 EXPECT_TRUE(SetupSendStream());
3310 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc); 3347 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
3311 sp.sync_label = kSyncLabel; 3348 sp.sync_label = kSyncLabel;
3312 // Creating two channels to make sure that sync label is set properly for both 3349 // Creating two channels to make sure that sync label is set properly for both
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3403 EXPECT_EQ(1, s->received_packets()); 3440 EXPECT_EQ(1, s->received_packets());
3404 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime()); 3441 channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
3405 EXPECT_EQ(2, s->received_packets()); 3442 EXPECT_EQ(2, s->received_packets());
3406 } 3443 }
3407 3444
3408 // All receive channels should be associated with the first send channel, 3445 // All receive channels should be associated with the first send channel,
3409 // since they do not send RTCP SR. 3446 // since they do not send RTCP SR.
3410 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) { 3447 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_SendCreatedFirst) {
3411 EXPECT_TRUE(SetupSendStream()); 3448 EXPECT_TRUE(SetupSendStream());
3412 EXPECT_TRUE(AddRecvStream(kSsrc2)); 3449 EXPECT_TRUE(AddRecvStream(kSsrc2));
3413 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); 3450 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc);
3414 EXPECT_TRUE(channel_->AddSendStream( 3451 EXPECT_TRUE(channel_->AddSendStream(
3415 cricket::StreamParams::CreateLegacy(kSsrc3))); 3452 cricket::StreamParams::CreateLegacy(kSsrc3)));
3416 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); 3453 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc);
3417 EXPECT_TRUE(AddRecvStream(kSsrc4)); 3454 EXPECT_TRUE(AddRecvStream(kSsrc4));
3418 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc4).rtp.local_ssrc); 3455 EXPECT_EQ(kSsrc9, GetRecvStreamConfig(kSsrc4).rtp.local_ssrc);
3419 } 3456 }
3420 3457
3421 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) { 3458 TEST_F(WebRtcVoiceEngineTestFake, AssociateFirstSendChannel_RecvCreatedFirst) {
3422 EXPECT_TRUE(SetupRecvStream()); 3459 EXPECT_TRUE(SetupRecvStream());
3423 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); 3460 EXPECT_EQ(0xFA17FA17u, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc);
3424 EXPECT_TRUE(channel_->AddSendStream( 3461 EXPECT_TRUE(channel_->AddSendStream(
3425 cricket::StreamParams::CreateLegacy(kSsrc2))); 3462 cricket::StreamParams::CreateLegacy(kSsrc2)));
3426 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); 3463 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc);
3427 EXPECT_TRUE(AddRecvStream(kSsrc3)); 3464 EXPECT_TRUE(AddRecvStream(kSsrc3));
3428 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); 3465 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc);
3429 EXPECT_TRUE(channel_->AddSendStream( 3466 EXPECT_TRUE(channel_->AddSendStream(
3430 cricket::StreamParams::CreateLegacy(kSsrc4))); 3467 cricket::StreamParams::CreateLegacy(kSsrc4)));
3431 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc1).rtp.local_ssrc); 3468 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc9).rtp.local_ssrc);
3432 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc); 3469 EXPECT_EQ(kSsrc2, GetRecvStreamConfig(kSsrc3).rtp.local_ssrc);
3433 } 3470 }
3434 3471
3435 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { 3472 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) {
3436 EXPECT_TRUE(SetupChannel()); 3473 EXPECT_TRUE(SetupChannel());
3437 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); 3474 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink());
3438 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); 3475 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink());
3439 3476
3440 // Setting the sink before a recv stream exists should do nothing. 3477 // Setting the sink before a recv stream exists should do nothing.
3441 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); 3478 channel_->SetRawAudioSink(kSsrc9, std::move(fake_sink_1));
3442 EXPECT_TRUE(AddRecvStream(kSsrc1)); 3479 EXPECT_TRUE(AddRecvStream(kSsrc9));
3443 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); 3480 EXPECT_EQ(nullptr, GetRecvStream(kSsrc9).sink());
3444 3481
3445 // Now try actually setting the sink. 3482 // Now try actually setting the sink.
3446 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); 3483 channel_->SetRawAudioSink(kSsrc9, std::move(fake_sink_2));
3447 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); 3484 EXPECT_NE(nullptr, GetRecvStream(kSsrc9).sink());
3448 3485
3449 // Now try resetting it. 3486 // Now try resetting it.
3450 channel_->SetRawAudioSink(kSsrc1, nullptr); 3487 channel_->SetRawAudioSink(kSsrc9, nullptr);
3451 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); 3488 EXPECT_EQ(nullptr, GetRecvStream(kSsrc9).sink());
3452 } 3489 }
3453 3490
3454 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { 3491 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkUnsignaledRecvStream) {
3455 EXPECT_TRUE(SetupChannel()); 3492 EXPECT_TRUE(SetupChannel());
3456 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); 3493 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink());
3457 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); 3494 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink());
3495 std::unique_ptr<FakeAudioSink> fake_sink_3(new FakeAudioSink());
3496 std::unique_ptr<FakeAudioSink> fake_sink_4(new FakeAudioSink());
3458 3497
3459 // Should be able to set a default sink even when no stream exists. 3498 // Should be able to set a default sink even when no stream exists.
3460 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); 3499 channel_->SetRawAudioSink(0, std::move(fake_sink_1));
3461 3500
3462 // Create default channel and ensure it's assigned the default sink. 3501 // Spawn an unsignaled stream by sending a packet - it should be assigned the
3502 // default sink.
3463 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3503 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
3464 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); 3504 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3465 3505
3466 // Try resetting the default sink. 3506 // Try resetting the default sink.
3467 channel_->SetRawAudioSink(0, nullptr); 3507 channel_->SetRawAudioSink(0, nullptr);
3468 EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); 3508 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3469 3509
3470 // Try setting the default sink while the default stream exists. 3510 // Try setting the default sink while the default stream exists.
3471 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); 3511 channel_->SetRawAudioSink(0, std::move(fake_sink_2));
3472 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); 3512 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3473 3513
3474 // If we remove and add a default stream, it should get the same sink. 3514 // If we remove and add a default stream, it should get the same sink.
3475 EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); 3515 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc1));
3476 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 3516 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
3477 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); 3517 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3518
3519 // Spawn another unsignaled stream - it should be assigned the default sink
3520 // and the previous unsignaled stream should lose it.
3521 unsigned char pcmuFrame2[sizeof(kPcmuFrame)];
3522 memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
3523 rtc::SetBE32(&pcmuFrame2[8], kSsrc4);
3524 DeliverPacket(pcmuFrame2, sizeof(pcmuFrame2));
3525 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3526 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink());
3527
3528 // Reset the default sink - the second unsignaled stream should lose it.
3529 channel_->SetRawAudioSink(0, nullptr);
3530 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3531 EXPECT_EQ(nullptr, GetRecvStream(kSsrc4).sink());
3532
3533 // Try setting the default sink while two streams exists.
3534 channel_->SetRawAudioSink(0, std::move(fake_sink_3));
3535 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
3536 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink());
3537
3538 // Try setting the sink for the first unsignaled stream using its known SSRC.
3539 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_4));
3540 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink());
3541 EXPECT_NE(nullptr, GetRecvStream(kSsrc4).sink());
3542 EXPECT_NE(GetRecvStream(kSsrc1).sink(), GetRecvStream(kSsrc4).sink());
3478 } 3543 }
3479 3544
3480 // Test that, just like the video channel, the voice channel communicates the 3545 // Test that, just like the video channel, the voice channel communicates the
3481 // network state to the call. 3546 // network state to the call.
3482 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { 3547 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) {
3483 EXPECT_TRUE(SetupChannel()); 3548 EXPECT_TRUE(SetupChannel());
3484 3549
3485 EXPECT_EQ(webrtc::kNetworkUp, 3550 EXPECT_EQ(webrtc::kNetworkUp,
3486 call_.GetNetworkState(webrtc::MediaType::AUDIO)); 3551 call_.GetNetworkState(webrtc::MediaType::AUDIO));
3487 EXPECT_EQ(webrtc::kNetworkUp, 3552 EXPECT_EQ(webrtc::kNetworkUp,
3488 call_.GetNetworkState(webrtc::MediaType::VIDEO)); 3553 call_.GetNetworkState(webrtc::MediaType::VIDEO));
3489 3554
3490 channel_->OnReadyToSend(false); 3555 channel_->OnReadyToSend(false);
3491 EXPECT_EQ(webrtc::kNetworkDown, 3556 EXPECT_EQ(webrtc::kNetworkDown,
3492 call_.GetNetworkState(webrtc::MediaType::AUDIO)); 3557 call_.GetNetworkState(webrtc::MediaType::AUDIO));
3493 EXPECT_EQ(webrtc::kNetworkUp, 3558 EXPECT_EQ(webrtc::kNetworkUp,
3494 call_.GetNetworkState(webrtc::MediaType::VIDEO)); 3559 call_.GetNetworkState(webrtc::MediaType::VIDEO));
3495 3560
3496 channel_->OnReadyToSend(true); 3561 channel_->OnReadyToSend(true);
3497 EXPECT_EQ(webrtc::kNetworkUp, 3562 EXPECT_EQ(webrtc::kNetworkUp,
3498 call_.GetNetworkState(webrtc::MediaType::AUDIO)); 3563 call_.GetNetworkState(webrtc::MediaType::AUDIO));
3499 EXPECT_EQ(webrtc::kNetworkUp, 3564 EXPECT_EQ(webrtc::kNetworkUp,
3500 call_.GetNetworkState(webrtc::MediaType::VIDEO)); 3565 call_.GetNetworkState(webrtc::MediaType::VIDEO));
3501 } 3566 }
3502 3567
3503 // Test that playout is still started after changing parameters 3568 // Test that playout is still started after changing parameters
3504 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) { 3569 TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) {
3505 SetupRecvStream(); 3570 SetupRecvStream();
3506 channel_->SetPlayout(true); 3571 channel_->SetPlayout(true);
3507 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); 3572 EXPECT_TRUE(GetRecvStream(kSsrc9).started());
3508 3573
3509 // Changing RTP header extensions will recreate the AudioReceiveStream. 3574 // Changing RTP header extensions will recreate the AudioReceiveStream.
3510 cricket::AudioRecvParameters parameters; 3575 cricket::AudioRecvParameters parameters;
3511 parameters.extensions.push_back( 3576 parameters.extensions.push_back(
3512 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12)); 3577 webrtc::RtpExtension(webrtc::RtpExtension::kAudioLevelUri, 12));
3513 channel_->SetRecvParameters(parameters); 3578 channel_->SetRecvParameters(parameters);
3514 3579
3515 EXPECT_TRUE(GetRecvStream(kSsrc1).started()); 3580 EXPECT_TRUE(GetRecvStream(kSsrc9).started());
3516 } 3581 }
3517 3582
3518 // Tests that the library initializes and shuts down properly. 3583 // Tests that the library initializes and shuts down properly.
3519 TEST(WebRtcVoiceEngineTest, StartupShutdown) { 3584 TEST(WebRtcVoiceEngineTest, StartupShutdown) {
3520 // If the VoiceEngine wants to gather available codecs early, that's fine but 3585 // If the VoiceEngine wants to gather available codecs early, that's fine but
3521 // we never want it to create a decoder at this stage. 3586 // we never want it to create a decoder at this stage.
3522 cricket::WebRtcVoiceEngine engine( 3587 cricket::WebRtcVoiceEngine engine(
3523 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3588 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3524 webrtc::RtcEventLogNullImpl event_log; 3589 webrtc::RtcEventLogNullImpl event_log;
3525 std::unique_ptr<webrtc::Call> call( 3590 std::unique_ptr<webrtc::Call> call(
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
3755 // Without this cast, the comparison turned unsigned and, thus, failed for -1. 3820 // Without this cast, the comparison turned unsigned and, thus, failed for -1.
3756 const int num_specs = static_cast<int>(specs.size()); 3821 const int num_specs = static_cast<int>(specs.size());
3757 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); 3822 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs);
3758 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); 3823 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs);
3759 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); 3824 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1);
3760 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); 3825 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs);
3761 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); 3826 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs);
3762 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); 3827 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs);
3763 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); 3828 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs);
3764 } 3829 }
OLDNEW
« webrtc/media/engine/webrtcvoiceengine.h ('K') | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698