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

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

Powered by Google App Engine
This is Rietveld 408576698