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

Side by Side Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc

Issue 2553413002: Pass event log to ANA. (Closed)
Patch Set: Rebased Created 3 years, 11 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) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 }; 52 };
53 53
54 AudioEncoderOpusStates CreateCodec(size_t num_channels) { 54 AudioEncoderOpusStates CreateCodec(size_t num_channels) {
55 AudioEncoderOpusStates states; 55 AudioEncoderOpusStates states;
56 states.mock_audio_network_adaptor = 56 states.mock_audio_network_adaptor =
57 std::make_shared<MockAudioNetworkAdaptor*>(nullptr); 57 std::make_shared<MockAudioNetworkAdaptor*>(nullptr);
58 58
59 std::weak_ptr<MockAudioNetworkAdaptor*> mock_ptr( 59 std::weak_ptr<MockAudioNetworkAdaptor*> mock_ptr(
60 states.mock_audio_network_adaptor); 60 states.mock_audio_network_adaptor);
61 AudioEncoderOpus::AudioNetworkAdaptorCreator creator = [mock_ptr]( 61 AudioEncoderOpus::AudioNetworkAdaptorCreator creator = [mock_ptr](
62 const std::string&, const Clock*) { 62 const std::string&, RtcEventLog* event_log, const Clock*) {
63 std::unique_ptr<MockAudioNetworkAdaptor> adaptor( 63 std::unique_ptr<MockAudioNetworkAdaptor> adaptor(
64 new NiceMock<MockAudioNetworkAdaptor>()); 64 new NiceMock<MockAudioNetworkAdaptor>());
65 EXPECT_CALL(*adaptor, Die()); 65 EXPECT_CALL(*adaptor, Die());
66 if (auto sp = mock_ptr.lock()) { 66 if (auto sp = mock_ptr.lock()) {
67 *sp = adaptor.get(); 67 *sp = adaptor.get();
68 } else { 68 } else {
69 RTC_NOTREACHED(); 69 RTC_NOTREACHED();
70 } 70 }
71 return adaptor; 71 return adaptor;
72 }; 72 };
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 ElementsAre(20, 60)); 259 ElementsAre(20, 60));
260 states.encoder->SetReceiverFrameLengthRange(21, 60); 260 states.encoder->SetReceiverFrameLengthRange(21, 60);
261 EXPECT_THAT(states.encoder->supported_frame_lengths_ms(), ElementsAre(60)); 261 EXPECT_THAT(states.encoder->supported_frame_lengths_ms(), ElementsAre(60));
262 states.encoder->SetReceiverFrameLengthRange(20, 59); 262 states.encoder->SetReceiverFrameLengthRange(20, 59);
263 EXPECT_THAT(states.encoder->supported_frame_lengths_ms(), ElementsAre(20)); 263 EXPECT_THAT(states.encoder->supported_frame_lengths_ms(), ElementsAre(20));
264 } 264 }
265 265
266 TEST(AudioEncoderOpusTest, 266 TEST(AudioEncoderOpusTest,
267 InvokeAudioNetworkAdaptorOnReceivedUplinkPacketLossFraction) { 267 InvokeAudioNetworkAdaptorOnReceivedUplinkPacketLossFraction) {
268 auto states = CreateCodec(2); 268 auto states = CreateCodec(2);
269 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 269 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
270 270
271 auto config = CreateEncoderRuntimeConfig(); 271 auto config = CreateEncoderRuntimeConfig();
272 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) 272 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
273 .WillOnce(Return(config)); 273 .WillOnce(Return(config));
274 274
275 // Since using mock audio network adaptor, any packet loss fraction is fine. 275 // Since using mock audio network adaptor, any packet loss fraction is fine.
276 constexpr float kUplinkPacketLoss = 0.1f; 276 constexpr float kUplinkPacketLoss = 0.1f;
277 EXPECT_CALL(**states.mock_audio_network_adaptor, 277 EXPECT_CALL(**states.mock_audio_network_adaptor,
278 SetUplinkPacketLossFraction(kUplinkPacketLoss)); 278 SetUplinkPacketLossFraction(kUplinkPacketLoss));
279 states.encoder->OnReceivedUplinkPacketLossFraction(kUplinkPacketLoss); 279 states.encoder->OnReceivedUplinkPacketLossFraction(kUplinkPacketLoss);
280 280
281 CheckEncoderRuntimeConfig(states.encoder.get(), config); 281 CheckEncoderRuntimeConfig(states.encoder.get(), config);
282 } 282 }
283 283
284 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedUplinkBandwidth) { 284 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedUplinkBandwidth) {
285 auto states = CreateCodec(2); 285 auto states = CreateCodec(2);
286 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 286 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
287 287
288 auto config = CreateEncoderRuntimeConfig(); 288 auto config = CreateEncoderRuntimeConfig();
289 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) 289 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
290 .WillOnce(Return(config)); 290 .WillOnce(Return(config));
291 291
292 // Since using mock audio network adaptor, any target audio bitrate is fine. 292 // Since using mock audio network adaptor, any target audio bitrate is fine.
293 constexpr int kTargetAudioBitrate = 30000; 293 constexpr int kTargetAudioBitrate = 30000;
294 constexpr int64_t kProbingIntervalMs = 3000; 294 constexpr int64_t kProbingIntervalMs = 3000;
295 EXPECT_CALL(**states.mock_audio_network_adaptor, 295 EXPECT_CALL(**states.mock_audio_network_adaptor,
296 SetTargetAudioBitrate(kTargetAudioBitrate)); 296 SetTargetAudioBitrate(kTargetAudioBitrate));
297 EXPECT_CALL(*states.mock_bitrate_smoother, 297 EXPECT_CALL(*states.mock_bitrate_smoother,
298 SetTimeConstantMs(kProbingIntervalMs * 4)); 298 SetTimeConstantMs(kProbingIntervalMs * 4));
299 EXPECT_CALL(*states.mock_bitrate_smoother, AddSample(kTargetAudioBitrate)); 299 EXPECT_CALL(*states.mock_bitrate_smoother, AddSample(kTargetAudioBitrate));
300 states.encoder->OnReceivedUplinkBandwidth( 300 states.encoder->OnReceivedUplinkBandwidth(
301 kTargetAudioBitrate, rtc::Optional<int64_t>(kProbingIntervalMs)); 301 kTargetAudioBitrate, rtc::Optional<int64_t>(kProbingIntervalMs));
302 302
303 CheckEncoderRuntimeConfig(states.encoder.get(), config); 303 CheckEncoderRuntimeConfig(states.encoder.get(), config);
304 } 304 }
305 305
306 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedRtt) { 306 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedRtt) {
307 auto states = CreateCodec(2); 307 auto states = CreateCodec(2);
308 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 308 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
309 309
310 auto config = CreateEncoderRuntimeConfig(); 310 auto config = CreateEncoderRuntimeConfig();
311 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) 311 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
312 .WillOnce(Return(config)); 312 .WillOnce(Return(config));
313 313
314 // Since using mock audio network adaptor, any rtt is fine. 314 // Since using mock audio network adaptor, any rtt is fine.
315 constexpr int kRtt = 30; 315 constexpr int kRtt = 30;
316 EXPECT_CALL(**states.mock_audio_network_adaptor, SetRtt(kRtt)); 316 EXPECT_CALL(**states.mock_audio_network_adaptor, SetRtt(kRtt));
317 states.encoder->OnReceivedRtt(kRtt); 317 states.encoder->OnReceivedRtt(kRtt);
318 318
319 CheckEncoderRuntimeConfig(states.encoder.get(), config); 319 CheckEncoderRuntimeConfig(states.encoder.get(), config);
320 } 320 }
321 321
322 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedOverhead) { 322 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedOverhead) {
323 auto states = CreateCodec(2); 323 auto states = CreateCodec(2);
324 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 324 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
325 325
326 auto config = CreateEncoderRuntimeConfig(); 326 auto config = CreateEncoderRuntimeConfig();
327 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) 327 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
328 .WillOnce(Return(config)); 328 .WillOnce(Return(config));
329 329
330 // Since using mock audio network adaptor, any overhead is fine. 330 // Since using mock audio network adaptor, any overhead is fine.
331 constexpr size_t kOverhead = 64; 331 constexpr size_t kOverhead = 64;
332 EXPECT_CALL(**states.mock_audio_network_adaptor, SetOverhead(kOverhead)); 332 EXPECT_CALL(**states.mock_audio_network_adaptor, SetOverhead(kOverhead));
333 states.encoder->OnReceivedOverhead(kOverhead); 333 states.encoder->OnReceivedOverhead(kOverhead);
334 334
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 config.bitrate_bps = rtc::Optional<int>(12500); 443 config.bitrate_bps = rtc::Optional<int>(12500);
444 EXPECT_EQ(rtc::Optional<int>(), config.GetNewComplexity()); 444 EXPECT_EQ(rtc::Optional<int>(), config.GetNewComplexity());
445 445
446 // Bitrate above hysteresis window. Expect lower complexity. 446 // Bitrate above hysteresis window. Expect lower complexity.
447 config.bitrate_bps = rtc::Optional<int>(14001); 447 config.bitrate_bps = rtc::Optional<int>(14001);
448 EXPECT_EQ(rtc::Optional<int>(6), config.GetNewComplexity()); 448 EXPECT_EQ(rtc::Optional<int>(6), config.GetNewComplexity());
449 } 449 }
450 450
451 TEST(AudioEncoderOpusTest, EmptyConfigDoesNotAffectEncoderSettings) { 451 TEST(AudioEncoderOpusTest, EmptyConfigDoesNotAffectEncoderSettings) {
452 auto states = CreateCodec(2); 452 auto states = CreateCodec(2);
453 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 453 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
454 454
455 auto config = CreateEncoderRuntimeConfig(); 455 auto config = CreateEncoderRuntimeConfig();
456 AudioNetworkAdaptor::EncoderRuntimeConfig empty_config; 456 AudioNetworkAdaptor::EncoderRuntimeConfig empty_config;
457 457
458 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) 458 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
459 .WillOnce(Return(config)) 459 .WillOnce(Return(config))
460 .WillOnce(Return(empty_config)); 460 .WillOnce(Return(empty_config));
461 461
462 constexpr size_t kOverhead = 64; 462 constexpr size_t kOverhead = 64;
463 EXPECT_CALL(**states.mock_audio_network_adaptor, SetOverhead(kOverhead)) 463 EXPECT_CALL(**states.mock_audio_network_adaptor, SetOverhead(kOverhead))
464 .Times(2); 464 .Times(2);
465 states.encoder->OnReceivedOverhead(kOverhead); 465 states.encoder->OnReceivedOverhead(kOverhead);
466 states.encoder->OnReceivedOverhead(kOverhead); 466 states.encoder->OnReceivedOverhead(kOverhead);
467 467
468 CheckEncoderRuntimeConfig(states.encoder.get(), config); 468 CheckEncoderRuntimeConfig(states.encoder.get(), config);
469 } 469 }
470 470
471 TEST(AudioEncoderOpusTest, UpdateUplinkBandwidthInAudioNetworkAdaptor) { 471 TEST(AudioEncoderOpusTest, UpdateUplinkBandwidthInAudioNetworkAdaptor) {
472 rtc::ScopedFakeClock fake_clock; 472 rtc::ScopedFakeClock fake_clock;
473 auto states = CreateCodec(2); 473 auto states = CreateCodec(2);
474 states.encoder->EnableAudioNetworkAdaptor("", nullptr); 474 states.encoder->EnableAudioNetworkAdaptor("", nullptr, nullptr);
475 std::array<int16_t, 480 * 2> audio; 475 std::array<int16_t, 480 * 2> audio;
476 audio.fill(0); 476 audio.fill(0);
477 rtc::Buffer encoded; 477 rtc::Buffer encoded;
478 EXPECT_CALL(*states.mock_bitrate_smoother, GetAverage()) 478 EXPECT_CALL(*states.mock_bitrate_smoother, GetAverage())
479 .WillOnce(Return(rtc::Optional<float>(50000))); 479 .WillOnce(Return(rtc::Optional<float>(50000)));
480 EXPECT_CALL(**states.mock_audio_network_adaptor, SetUplinkBandwidth(50000)); 480 EXPECT_CALL(**states.mock_audio_network_adaptor, SetUplinkBandwidth(50000));
481 states.encoder->Encode( 481 states.encoder->Encode(
482 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded); 482 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded);
483 483
484 // Repeat update uplink bandwidth tests. 484 // Repeat update uplink bandwidth tests.
485 for (int i = 0; i < 5; i++) { 485 for (int i = 0; i < 5; i++) {
486 // Don't update till it is time to update again. 486 // Don't update till it is time to update again.
487 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds( 487 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(
488 states.config.uplink_bandwidth_update_interval_ms - 1)); 488 states.config.uplink_bandwidth_update_interval_ms - 1));
489 states.encoder->Encode( 489 states.encoder->Encode(
490 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded); 490 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded);
491 491
492 // Update when it is time to update. 492 // Update when it is time to update.
493 EXPECT_CALL(*states.mock_bitrate_smoother, GetAverage()) 493 EXPECT_CALL(*states.mock_bitrate_smoother, GetAverage())
494 .WillOnce(Return(rtc::Optional<float>(40000))); 494 .WillOnce(Return(rtc::Optional<float>(40000)));
495 EXPECT_CALL(**states.mock_audio_network_adaptor, SetUplinkBandwidth(40000)); 495 EXPECT_CALL(**states.mock_audio_network_adaptor, SetUplinkBandwidth(40000));
496 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1)); 496 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1));
497 states.encoder->Encode( 497 states.encoder->Encode(
498 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded); 498 0, rtc::ArrayView<const int16_t>(audio.data(), audio.size()), &encoded);
499 } 499 }
500 } 500 }
501 501
502 } // namespace webrtc 502 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc ('k') | webrtc/voice_engine/channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698