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

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

Issue 2072753002: WebRtcVoiceEngine: Use AudioDecoderFactory to generate recv codecs. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 6 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) { 69 TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) {
70 StrictMock<webrtc::test::MockAudioDeviceModule> adm; 70 StrictMock<webrtc::test::MockAudioDeviceModule> adm;
71 EXPECT_CALL(adm, AddRef()).WillOnce(Return(0)); 71 EXPECT_CALL(adm, AddRef()).WillOnce(Return(0));
72 EXPECT_CALL(adm, Release()).WillOnce(Return(0)); 72 EXPECT_CALL(adm, Release()).WillOnce(Return(0));
73 EXPECT_CALL(adm, BuiltInAECIsAvailable()).WillOnce(Return(false)); 73 EXPECT_CALL(adm, BuiltInAECIsAvailable()).WillOnce(Return(false));
74 EXPECT_CALL(adm, BuiltInAGCIsAvailable()).WillOnce(Return(false)); 74 EXPECT_CALL(adm, BuiltInAGCIsAvailable()).WillOnce(Return(false));
75 EXPECT_CALL(adm, BuiltInNSIsAvailable()).WillOnce(Return(false)); 75 EXPECT_CALL(adm, BuiltInNSIsAvailable()).WillOnce(Return(false));
76 cricket::FakeWebRtcVoiceEngine voe; 76 cricket::FakeWebRtcVoiceEngine voe;
77 EXPECT_FALSE(voe.IsInited()); 77 EXPECT_FALSE(voe.IsInited());
78 { 78 {
79 cricket::WebRtcVoiceEngine engine(&adm, nullptr, new FakeVoEWrapper(&voe)); 79 cricket::WebRtcVoiceEngine engine(
80 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(),
81 new FakeVoEWrapper(&voe));
80 EXPECT_TRUE(voe.IsInited()); 82 EXPECT_TRUE(voe.IsInited());
81 } 83 }
82 EXPECT_FALSE(voe.IsInited()); 84 EXPECT_FALSE(voe.IsInited());
83 } 85 }
84 86
85 class FakeAudioSink : public webrtc::AudioSinkInterface { 87 class FakeAudioSink : public webrtc::AudioSinkInterface {
86 public: 88 public:
87 void OnData(const Data& audio) override {} 89 void OnData(const Data& audio) override {}
88 }; 90 };
89 91
90 class FakeAudioSource : public cricket::AudioSource { 92 class FakeAudioSource : public cricket::AudioSource {
91 void SetSink(Sink* sink) override {} 93 void SetSink(Sink* sink) override {}
92 }; 94 };
93 95
94 class WebRtcVoiceEngineTestFake : public testing::Test { 96 class WebRtcVoiceEngineTestFake : public testing::Test {
95 public: 97 public:
96 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} 98 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {}
97 99
98 explicit WebRtcVoiceEngineTestFake(const char* field_trials) 100 explicit WebRtcVoiceEngineTestFake(const char* field_trials)
99 : call_(webrtc::Call::Config()), override_field_trials_(field_trials) { 101 : call_(webrtc::Call::Config()), override_field_trials_(field_trials) {
102 auto factory = webrtc::MockAudioDecoderFactory::CreateUnusedFactory();
100 EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0)); 103 EXPECT_CALL(adm_, AddRef()).WillOnce(Return(0));
101 EXPECT_CALL(adm_, Release()).WillOnce(Return(0)); 104 EXPECT_CALL(adm_, Release()).WillOnce(Return(0));
102 EXPECT_CALL(adm_, BuiltInAECIsAvailable()).WillOnce(Return(false)); 105 EXPECT_CALL(adm_, BuiltInAECIsAvailable()).WillOnce(Return(false));
103 EXPECT_CALL(adm_, BuiltInAGCIsAvailable()).WillOnce(Return(false)); 106 EXPECT_CALL(adm_, BuiltInAGCIsAvailable()).WillOnce(Return(false));
104 EXPECT_CALL(adm_, BuiltInNSIsAvailable()).WillOnce(Return(false)); 107 EXPECT_CALL(adm_, BuiltInNSIsAvailable()).WillOnce(Return(false));
105 engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, nullptr, 108 engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, factory,
106 new FakeVoEWrapper(&voe_))); 109 new FakeVoEWrapper(&voe_)));
107 send_parameters_.codecs.push_back(kPcmuCodec); 110 send_parameters_.codecs.push_back(kPcmuCodec);
108 recv_parameters_.codecs.push_back(kPcmuCodec); 111 recv_parameters_.codecs.push_back(kPcmuCodec);
109 } 112 }
110 113
111 bool SetupChannel() { 114 bool SetupChannel() {
112 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), 115 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(),
113 cricket::AudioOptions()); 116 cricket::AudioOptions());
114 return (channel_ != nullptr); 117 return (channel_ != nullptr);
115 } 118 }
(...skipping 3234 matching lines...) Expand 10 before | Expand all | Expand 10 after
3350 3353
3351 channel_->OnReadyToSend(true); 3354 channel_->OnReadyToSend(true);
3352 EXPECT_EQ(webrtc::kNetworkUp, 3355 EXPECT_EQ(webrtc::kNetworkUp,
3353 call_.GetNetworkState(webrtc::MediaType::AUDIO)); 3356 call_.GetNetworkState(webrtc::MediaType::AUDIO));
3354 EXPECT_EQ(webrtc::kNetworkUp, 3357 EXPECT_EQ(webrtc::kNetworkUp,
3355 call_.GetNetworkState(webrtc::MediaType::VIDEO)); 3358 call_.GetNetworkState(webrtc::MediaType::VIDEO));
3356 } 3359 }
3357 3360
3358 // Tests that the library initializes and shuts down properly. 3361 // Tests that the library initializes and shuts down properly.
3359 TEST(WebRtcVoiceEngineTest, StartupShutdown) { 3362 TEST(WebRtcVoiceEngineTest, StartupShutdown) {
3360 using testing::_;
3361 using testing::AnyNumber;
3362
3363 // If the VoiceEngine wants to gather available codecs early, that's fine but 3363 // If the VoiceEngine wants to gather available codecs early, that's fine but
3364 // we never want it to create a decoder at this stage. 3364 // we never want it to create a decoder at this stage.
3365 rtc::scoped_refptr<webrtc::MockAudioDecoderFactory> factory = 3365 cricket::WebRtcVoiceEngine engine(
3366 new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>; 3366 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
3367 ON_CALL(*factory.get(), GetSupportedFormats())
3368 .WillByDefault(Return(std::vector<webrtc::SdpAudioFormat>()));
3369 EXPECT_CALL(*factory.get(), GetSupportedFormats())
3370 .Times(AnyNumber());
3371 EXPECT_CALL(*factory.get(), MakeAudioDecoderMock(_, _)).Times(0);
3372
3373 cricket::WebRtcVoiceEngine engine(nullptr, factory);
3374 std::unique_ptr<webrtc::Call> call( 3367 std::unique_ptr<webrtc::Call> call(
3375 webrtc::Call::Create(webrtc::Call::Config())); 3368 webrtc::Call::Create(webrtc::Call::Config()));
3376 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3369 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3377 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3370 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3378 EXPECT_TRUE(channel != nullptr); 3371 EXPECT_TRUE(channel != nullptr);
3379 delete channel; 3372 delete channel;
3380 } 3373 }
3381 3374
3382 // Tests that reference counting on the external ADM is correct. 3375 // Tests that reference counting on the external ADM is correct.
3383 TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) { 3376 TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) {
3384 testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm; 3377 testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
3385 EXPECT_CALL(adm, AddRef()).Times(3).WillRepeatedly(Return(0)); 3378 EXPECT_CALL(adm, AddRef()).Times(3).WillRepeatedly(Return(0));
3386 EXPECT_CALL(adm, Release()).Times(3).WillRepeatedly(Return(0)); 3379 EXPECT_CALL(adm, Release()).Times(3).WillRepeatedly(Return(0));
3387 { 3380 {
3388 cricket::WebRtcVoiceEngine engine(&adm, nullptr); 3381 cricket::WebRtcVoiceEngine engine(
3382 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
3389 std::unique_ptr<webrtc::Call> call( 3383 std::unique_ptr<webrtc::Call> call(
3390 webrtc::Call::Create(webrtc::Call::Config())); 3384 webrtc::Call::Create(webrtc::Call::Config()));
3391 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3385 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3392 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3386 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3393 EXPECT_TRUE(channel != nullptr); 3387 EXPECT_TRUE(channel != nullptr);
3394 delete channel; 3388 delete channel;
3395 } 3389 }
3396 } 3390 }
3397 3391
3398 // Tests that the library is configured with the codecs we want. 3392 // Tests that the library is configured with the codecs we want.
3399 // TODO(ossu): This test should move into the builtin audio codecs module
3400 // eventually.
3401 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { 3393 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) {
3402 // TODO(ossu): These tests should move into a future "builtin audio codecs" 3394 // TODO(ossu): These tests should move into a future "builtin audio codecs"
3403 // module. 3395 // module.
3404 3396
3405 // Check codecs by name. 3397 // Check codecs by name.
3406 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( 3398 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3407 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr)); 3399 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr));
3408 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( 3400 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3409 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr)); 3401 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr));
3410 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( 3402 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3446 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( 3438 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3447 cricket::AudioCodec(88, "", 0, 0, 1), nullptr)); 3439 cricket::AudioCodec(88, "", 0, 0, 1), nullptr));
3448 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( 3440 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3449 cricket::AudioCodec(0, "", 0, 0, 2), nullptr)); 3441 cricket::AudioCodec(0, "", 0, 0, 2), nullptr));
3450 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( 3442 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3451 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); 3443 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr));
3452 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( 3444 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3453 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); 3445 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr));
3454 3446
3455 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. 3447 // Verify the payload id of common audio codecs, including CN, ISAC, and G722.
3456 cricket::WebRtcVoiceEngine engine(nullptr, 3448 // TODO(ossu): Why are the payload types of codecs with non-static payload
3457 webrtc::CreateBuiltinAudioDecoderFactory()); 3449 // type assignments checked here? It shouldn't really matter.
3450 cricket::WebRtcVoiceEngine engine(
3451 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
3458 for (std::vector<cricket::AudioCodec>::const_iterator it = 3452 for (std::vector<cricket::AudioCodec>::const_iterator it =
3459 engine.send_codecs().begin(); it != engine.send_codecs().end(); ++it) { 3453 engine.send_codecs().begin();
3454 it != engine.send_codecs().end(); ++it) {
3460 if (it->name == "CN" && it->clockrate == 16000) { 3455 if (it->name == "CN" && it->clockrate == 16000) {
3461 EXPECT_EQ(105, it->id); 3456 EXPECT_EQ(105, it->id);
3462 } else if (it->name == "CN" && it->clockrate == 32000) { 3457 } else if (it->name == "CN" && it->clockrate == 32000) {
3463 EXPECT_EQ(106, it->id); 3458 EXPECT_EQ(106, it->id);
3464 } else if (it->name == "ISAC" && it->clockrate == 16000) { 3459 } else if (it->name == "ISAC" && it->clockrate == 16000) {
3465 EXPECT_EQ(103, it->id); 3460 EXPECT_EQ(103, it->id);
3466 } else if (it->name == "ISAC" && it->clockrate == 32000) { 3461 } else if (it->name == "ISAC" && it->clockrate == 32000) {
3467 EXPECT_EQ(104, it->id); 3462 EXPECT_EQ(104, it->id);
3468 } else if (it->name == "G722" && it->clockrate == 8000) { 3463 } else if (it->name == "G722" && it->clockrate == 8000) {
3469 EXPECT_EQ(9, it->id); 3464 EXPECT_EQ(9, it->id);
3470 } else if (it->name == "telephone-event") { 3465 } else if (it->name == "telephone-event") {
3471 EXPECT_EQ(126, it->id); 3466 EXPECT_EQ(126, it->id);
3472 } else if (it->name == "opus") { 3467 } else if (it->name == "opus") {
3473 EXPECT_EQ(111, it->id); 3468 EXPECT_EQ(111, it->id);
3474 ASSERT_TRUE(it->params.find("minptime") != it->params.end()); 3469 ASSERT_TRUE(it->params.find("minptime") != it->params.end());
3475 EXPECT_EQ("10", it->params.find("minptime")->second); 3470 EXPECT_EQ("10", it->params.find("minptime")->second);
3476 ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end()); 3471 ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end());
3477 EXPECT_EQ("1", it->params.find("useinbandfec")->second); 3472 EXPECT_EQ("1", it->params.find("useinbandfec")->second);
3478 } 3473 }
3479 } 3474 }
3480 } 3475 }
3481 3476
3482 // Tests that VoE supports at least 32 channels 3477 // Tests that VoE supports at least 32 channels
3483 TEST(WebRtcVoiceEngineTest, Has32Channels) { 3478 TEST(WebRtcVoiceEngineTest, Has32Channels) {
3484 cricket::WebRtcVoiceEngine engine(nullptr, nullptr); 3479 cricket::WebRtcVoiceEngine engine(
3480 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
3485 std::unique_ptr<webrtc::Call> call( 3481 std::unique_ptr<webrtc::Call> call(
3486 webrtc::Call::Create(webrtc::Call::Config())); 3482 webrtc::Call::Create(webrtc::Call::Config()));
3487 3483
3488 cricket::VoiceMediaChannel* channels[32]; 3484 cricket::VoiceMediaChannel* channels[32];
3489 int num_channels = 0; 3485 int num_channels = 0;
3490 while (num_channels < arraysize(channels)) { 3486 while (num_channels < arraysize(channels)) {
3491 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3487 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3492 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3488 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3493 if (!channel) 3489 if (!channel)
3494 break; 3490 break;
(...skipping 20 matching lines...) Expand all
3515 cricket::WebRtcVoiceEngine engine( 3511 cricket::WebRtcVoiceEngine engine(
3516 nullptr, webrtc::CreateBuiltinAudioDecoderFactory()); 3512 nullptr, webrtc::CreateBuiltinAudioDecoderFactory());
3517 std::unique_ptr<webrtc::Call> call( 3513 std::unique_ptr<webrtc::Call> call(
3518 webrtc::Call::Create(webrtc::Call::Config())); 3514 webrtc::Call::Create(webrtc::Call::Config()));
3519 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), 3515 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
3520 cricket::AudioOptions(), call.get()); 3516 cricket::AudioOptions(), call.get());
3521 cricket::AudioRecvParameters parameters; 3517 cricket::AudioRecvParameters parameters;
3522 parameters.codecs = engine.recv_codecs(); 3518 parameters.codecs = engine.recv_codecs();
3523 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3519 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3524 } 3520 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698