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

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

Issue 2799033006: Injectable audio encoders: Moved audio encoder, factory and builtin factory to api/. (Closed)
Patch Set: More backwards-compatibility! Created 3 years, 7 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/modules/audio_coding/BUILD.gn » ('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
11 #include <memory> 11 #include <memory>
12 12
13 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" 13 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
14 #include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h"
14 #include "webrtc/base/arraysize.h" 15 #include "webrtc/base/arraysize.h"
15 #include "webrtc/base/byteorder.h" 16 #include "webrtc/base/byteorder.h"
16 #include "webrtc/base/safe_conversions.h" 17 #include "webrtc/base/safe_conversions.h"
17 #include "webrtc/call/call.h" 18 #include "webrtc/call/call.h"
18 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" 19 #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
19 #include "webrtc/media/base/fakemediaengine.h" 20 #include "webrtc/media/base/fakemediaengine.h"
20 #include "webrtc/media/base/fakenetworkinterface.h" 21 #include "webrtc/media/base/fakenetworkinterface.h"
21 #include "webrtc/media/base/fakertp.h" 22 #include "webrtc/media/base/fakertp.h"
22 #include "webrtc/media/base/mediaconstants.h" 23 #include "webrtc/media/base/mediaconstants.h"
23 #include "webrtc/media/engine/fakewebrtccall.h" 24 #include "webrtc/media/engine/fakewebrtccall.h"
24 #include "webrtc/media/engine/fakewebrtcvoiceengine.h" 25 #include "webrtc/media/engine/fakewebrtcvoiceengine.h"
25 #include "webrtc/media/engine/webrtcvoiceengine.h" 26 #include "webrtc/media/engine/webrtcvoiceengine.h"
26 #include "webrtc/modules/audio_device/include/mock_audio_device.h" 27 #include "webrtc/modules/audio_device/include/mock_audio_device.h"
27 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" 28 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h"
28 #include "webrtc/pc/channel.h" 29 #include "webrtc/pc/channel.h"
29 #include "webrtc/test/field_trial.h" 30 #include "webrtc/test/field_trial.h"
30 #include "webrtc/test/gtest.h" 31 #include "webrtc/test/gtest.h"
31 #include "webrtc/test/mock_audio_decoder_factory.h" 32 #include "webrtc/test/mock_audio_decoder_factory.h"
33 #include "webrtc/test/mock_audio_encoder_factory.h"
32 #include "webrtc/voice_engine/transmit_mixer.h" 34 #include "webrtc/voice_engine/transmit_mixer.h"
33 35
34 using testing::ContainerEq; 36 using testing::ContainerEq;
35 using testing::Return; 37 using testing::Return;
36 using testing::StrictMock; 38 using testing::StrictMock;
37 39
38 namespace { 40 namespace {
39 41
40 constexpr uint32_t kMaxUnsignaledRecvStreams = 1; 42 constexpr uint32_t kMaxUnsignaledRecvStreams = 1;
41 43
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 StrictMock<webrtc::test::MockAudioProcessing> apm; 124 StrictMock<webrtc::test::MockAudioProcessing> apm;
123 EXPECT_CALL(apm, ApplyConfig(testing::_)); 125 EXPECT_CALL(apm, ApplyConfig(testing::_));
124 EXPECT_CALL(apm, SetExtraOptions(testing::_)); 126 EXPECT_CALL(apm, SetExtraOptions(testing::_));
125 EXPECT_CALL(apm, Initialize()).WillOnce(Return(0)); 127 EXPECT_CALL(apm, Initialize()).WillOnce(Return(0));
126 StrictMock<MockTransmitMixer> transmit_mixer; 128 StrictMock<MockTransmitMixer> transmit_mixer;
127 EXPECT_CALL(transmit_mixer, EnableStereoChannelSwapping(false)); 129 EXPECT_CALL(transmit_mixer, EnableStereoChannelSwapping(false));
128 cricket::FakeWebRtcVoiceEngine voe(&apm, &transmit_mixer); 130 cricket::FakeWebRtcVoiceEngine voe(&apm, &transmit_mixer);
129 EXPECT_FALSE(voe.IsInited()); 131 EXPECT_FALSE(voe.IsInited());
130 { 132 {
131 cricket::WebRtcVoiceEngine engine( 133 cricket::WebRtcVoiceEngine engine(
132 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, 134 &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
135 webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr,
133 new FakeVoEWrapper(&voe)); 136 new FakeVoEWrapper(&voe));
134 EXPECT_TRUE(voe.IsInited()); 137 EXPECT_TRUE(voe.IsInited());
135 } 138 }
136 EXPECT_FALSE(voe.IsInited()); 139 EXPECT_FALSE(voe.IsInited());
137 } 140 }
138 141
139 class FakeAudioSink : public webrtc::AudioSinkInterface { 142 class FakeAudioSink : public webrtc::AudioSinkInterface {
140 public: 143 public:
141 void OnData(const Data& audio) override {} 144 void OnData(const Data& audio) override {}
142 }; 145 };
(...skipping 24 matching lines...) Expand all
167 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0)); 170 EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
168 EXPECT_CALL(apm_vd_, Enable(true)).WillOnce(Return(0)); 171 EXPECT_CALL(apm_vd_, Enable(true)).WillOnce(Return(0));
169 EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(false)); 172 EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(false));
170 // Init does not overwrite default AGC config. 173 // Init does not overwrite default AGC config.
171 EXPECT_CALL(apm_gc_, target_level_dbfs()).WillOnce(Return(1)); 174 EXPECT_CALL(apm_gc_, target_level_dbfs()).WillOnce(Return(1));
172 EXPECT_CALL(apm_gc_, compression_gain_db()).WillRepeatedly(Return(5)); 175 EXPECT_CALL(apm_gc_, compression_gain_db()).WillRepeatedly(Return(5));
173 EXPECT_CALL(apm_gc_, is_limiter_enabled()).WillRepeatedly(Return(true)); 176 EXPECT_CALL(apm_gc_, is_limiter_enabled()).WillRepeatedly(Return(true));
174 EXPECT_CALL(apm_gc_, set_target_level_dbfs(1)).WillOnce(Return(0)); 177 EXPECT_CALL(apm_gc_, set_target_level_dbfs(1)).WillOnce(Return(0));
175 EXPECT_CALL(apm_gc_, set_compression_gain_db(5)).WillRepeatedly(Return(0)); 178 EXPECT_CALL(apm_gc_, set_compression_gain_db(5)).WillRepeatedly(Return(0));
176 EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0)); 179 EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0));
177 // TODO(kwiberg): We should use a mock AudioDecoderFactory, but a bunch of 180 // TODO(kwiberg): We should use mock factories here, but a bunch of
178 // the tests here probe the specific set of codecs provided by the builtin 181 // the tests here probe the specific set of codecs provided by the builtin
179 // factory. Those tests should probably be moved elsewhere. 182 // factories. Those tests should probably be moved elsewhere.
180 engine_.reset(new cricket::WebRtcVoiceEngine( 183 auto encoder_factory = webrtc::CreateBuiltinAudioEncoderFactory();
181 &adm_, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, 184 auto decoder_factory = webrtc::CreateBuiltinAudioDecoderFactory();
182 new FakeVoEWrapper(&voe_))); 185 engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, encoder_factory,
186 decoder_factory, nullptr,
187 new FakeVoEWrapper(&voe_)));
183 send_parameters_.codecs.push_back(kPcmuCodec); 188 send_parameters_.codecs.push_back(kPcmuCodec);
184 recv_parameters_.codecs.push_back(kPcmuCodec); 189 recv_parameters_.codecs.push_back(kPcmuCodec);
185 // Default Options. 190 // Default Options.
186 EXPECT_TRUE(IsHighPassFilterEnabled()); 191 EXPECT_TRUE(IsHighPassFilterEnabled());
187 } 192 }
188 193
189 bool SetupChannel() { 194 bool SetupChannel() {
190 EXPECT_CALL(apm_, ApplyConfig(testing::_)); 195 EXPECT_CALL(apm_, ApplyConfig(testing::_));
191 EXPECT_CALL(apm_, SetExtraOptions(testing::_)); 196 EXPECT_CALL(apm_, SetExtraOptions(testing::_));
192 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(), 197 channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(),
(...skipping 3054 matching lines...) Expand 10 before | Expand all | Expand 10 after
3247 channel_->SetRecvParameters(parameters); 3252 channel_->SetRecvParameters(parameters);
3248 3253
3249 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); 3254 EXPECT_TRUE(GetRecvStream(kSsrcX).started());
3250 } 3255 }
3251 3256
3252 // Tests that the library initializes and shuts down properly. 3257 // Tests that the library initializes and shuts down properly.
3253 TEST(WebRtcVoiceEngineTest, StartupShutdown) { 3258 TEST(WebRtcVoiceEngineTest, StartupShutdown) {
3254 // If the VoiceEngine wants to gather available codecs early, that's fine but 3259 // If the VoiceEngine wants to gather available codecs early, that's fine but
3255 // we never want it to create a decoder at this stage. 3260 // we never want it to create a decoder at this stage.
3256 cricket::WebRtcVoiceEngine engine( 3261 cricket::WebRtcVoiceEngine engine(
3257 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3262 nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
3263 webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3258 webrtc::RtcEventLogNullImpl event_log; 3264 webrtc::RtcEventLogNullImpl event_log;
3259 std::unique_ptr<webrtc::Call> call( 3265 std::unique_ptr<webrtc::Call> call(
3260 webrtc::Call::Create(webrtc::Call::Config(&event_log))); 3266 webrtc::Call::Create(webrtc::Call::Config(&event_log)));
3261 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3267 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3262 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3268 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3263 EXPECT_TRUE(channel != nullptr); 3269 EXPECT_TRUE(channel != nullptr);
3264 delete channel; 3270 delete channel;
3265 } 3271 }
3266 3272
3267 // Tests that reference counting on the external ADM is correct. 3273 // Tests that reference counting on the external ADM is correct.
3268 TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) { 3274 TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) {
3269 testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm; 3275 testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
3270 EXPECT_CALL(adm, AddRef()).Times(3).WillRepeatedly(Return(0)); 3276 EXPECT_CALL(adm, AddRef()).Times(3).WillRepeatedly(Return(0));
3271 EXPECT_CALL(adm, Release()).Times(3).WillRepeatedly(Return(0)); 3277 EXPECT_CALL(adm, Release()).Times(3).WillRepeatedly(Return(0));
3272 // Return 100ms just in case this function gets called. If we don't, 3278 // Return 100ms just in case this function gets called. If we don't,
3273 // we could enter a tight loop since the mock would return 0. 3279 // we could enter a tight loop since the mock would return 0.
3274 EXPECT_CALL(adm, TimeUntilNextProcess()).WillRepeatedly(Return(100)); 3280 EXPECT_CALL(adm, TimeUntilNextProcess()).WillRepeatedly(Return(100));
3275 { 3281 {
3276 cricket::WebRtcVoiceEngine engine( 3282 cricket::WebRtcVoiceEngine engine(
3277 &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3283 &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
3284 webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3278 webrtc::RtcEventLogNullImpl event_log; 3285 webrtc::RtcEventLogNullImpl event_log;
3279 std::unique_ptr<webrtc::Call> call( 3286 std::unique_ptr<webrtc::Call> call(
3280 webrtc::Call::Create(webrtc::Call::Config(&event_log))); 3287 webrtc::Call::Create(webrtc::Call::Config(&event_log)));
3281 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3288 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3282 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3289 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3283 EXPECT_TRUE(channel != nullptr); 3290 EXPECT_TRUE(channel != nullptr);
3284 delete channel; 3291 delete channel;
3285 } 3292 }
3286 } 3293 }
3287 3294
3288 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. 3295 // Verify the payload id of common audio codecs, including CN, ISAC, and G722.
3289 TEST(WebRtcVoiceEngineTest, HasCorrectPayloadTypeMapping) { 3296 TEST(WebRtcVoiceEngineTest, HasCorrectPayloadTypeMapping) {
3290 // TODO(ossu): Why are the payload types of codecs with non-static payload 3297 // TODO(ossu): Why are the payload types of codecs with non-static payload
3291 // type assignments checked here? It shouldn't really matter. 3298 // type assignments checked here? It shouldn't really matter.
3292 cricket::WebRtcVoiceEngine engine( 3299 cricket::WebRtcVoiceEngine engine(
3293 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3300 nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
3301 webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3294 for (const cricket::AudioCodec& codec : engine.send_codecs()) { 3302 for (const cricket::AudioCodec& codec : engine.send_codecs()) {
3295 auto is_codec = [&codec](const char* name, int clockrate = 0) { 3303 auto is_codec = [&codec](const char* name, int clockrate = 0) {
3296 return STR_CASE_CMP(codec.name.c_str(), name) == 0 && 3304 return STR_CASE_CMP(codec.name.c_str(), name) == 0 &&
3297 (clockrate == 0 || codec.clockrate == clockrate); 3305 (clockrate == 0 || codec.clockrate == clockrate);
3298 }; 3306 };
3299 if (is_codec("CN", 16000)) { 3307 if (is_codec("CN", 16000)) {
3300 EXPECT_EQ(105, codec.id); 3308 EXPECT_EQ(105, codec.id);
3301 } else if (is_codec("CN", 32000)) { 3309 } else if (is_codec("CN", 32000)) {
3302 EXPECT_EQ(106, codec.id); 3310 EXPECT_EQ(106, codec.id);
3303 } else if (is_codec("ISAC", 16000)) { 3311 } else if (is_codec("ISAC", 16000)) {
(...skipping 19 matching lines...) Expand all
3323 EXPECT_EQ("10", codec.params.find("minptime")->second); 3331 EXPECT_EQ("10", codec.params.find("minptime")->second);
3324 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); 3332 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end());
3325 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); 3333 EXPECT_EQ("1", codec.params.find("useinbandfec")->second);
3326 } 3334 }
3327 } 3335 }
3328 } 3336 }
3329 3337
3330 // Tests that VoE supports at least 32 channels 3338 // Tests that VoE supports at least 32 channels
3331 TEST(WebRtcVoiceEngineTest, Has32Channels) { 3339 TEST(WebRtcVoiceEngineTest, Has32Channels) {
3332 cricket::WebRtcVoiceEngine engine( 3340 cricket::WebRtcVoiceEngine engine(
3333 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3341 nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
3342 webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3334 webrtc::RtcEventLogNullImpl event_log; 3343 webrtc::RtcEventLogNullImpl event_log;
3335 std::unique_ptr<webrtc::Call> call( 3344 std::unique_ptr<webrtc::Call> call(
3336 webrtc::Call::Create(webrtc::Call::Config(&event_log))); 3345 webrtc::Call::Create(webrtc::Call::Config(&event_log)));
3337 3346
3338 cricket::VoiceMediaChannel* channels[32]; 3347 cricket::VoiceMediaChannel* channels[32];
3339 int num_channels = 0; 3348 int num_channels = 0;
3340 while (num_channels < arraysize(channels)) { 3349 while (num_channels < arraysize(channels)) {
3341 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3350 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3342 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3351 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3343 if (!channel) 3352 if (!channel)
(...skipping 12 matching lines...) Expand all
3356 // Test that we set our preferred codecs properly. 3365 // Test that we set our preferred codecs properly.
3357 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) { 3366 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) {
3358 // TODO(ossu): I'm not sure of the intent of this test. It's either: 3367 // TODO(ossu): I'm not sure of the intent of this test. It's either:
3359 // - Check that our builtin codecs are usable by Channel. 3368 // - Check that our builtin codecs are usable by Channel.
3360 // - The codecs provided by the engine is usable by Channel. 3369 // - The codecs provided by the engine is usable by Channel.
3361 // It does not check that the codecs in the RecvParameters are actually 3370 // It does not check that the codecs in the RecvParameters are actually
3362 // what we sent in - though it's probably reasonable to expect so, if 3371 // what we sent in - though it's probably reasonable to expect so, if
3363 // SetRecvParameters returns true. 3372 // SetRecvParameters returns true.
3364 // I think it will become clear once audio decoder injection is completed. 3373 // I think it will become clear once audio decoder injection is completed.
3365 cricket::WebRtcVoiceEngine engine( 3374 cricket::WebRtcVoiceEngine engine(
3366 nullptr, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr); 3375 nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
3376 webrtc::CreateBuiltinAudioDecoderFactory(), nullptr);
3367 webrtc::RtcEventLogNullImpl event_log; 3377 webrtc::RtcEventLogNullImpl event_log;
3368 std::unique_ptr<webrtc::Call> call( 3378 std::unique_ptr<webrtc::Call> call(
3369 webrtc::Call::Create(webrtc::Call::Config(&event_log))); 3379 webrtc::Call::Create(webrtc::Call::Config(&event_log)));
3370 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), 3380 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
3371 cricket::AudioOptions(), call.get()); 3381 cricket::AudioOptions(), call.get());
3372 cricket::AudioRecvParameters parameters; 3382 cricket::AudioRecvParameters parameters;
3373 parameters.codecs = engine.recv_codecs(); 3383 parameters.codecs = engine.recv_codecs();
3374 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3384 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3375 } 3385 }
3376 3386
3377 TEST(WebRtcVoiceEngineTest, CollectRecvCodecs) { 3387 TEST(WebRtcVoiceEngineTest, CollectRecvCodecs) {
3378 std::vector<webrtc::AudioCodecSpec> specs; 3388 std::vector<webrtc::AudioCodecSpec> specs;
3379 webrtc::AudioCodecSpec spec1{{"codec1", 48000, 2, {{"param1", "value1"}}}, 3389 webrtc::AudioCodecSpec spec1{{"codec1", 48000, 2, {{"param1", "value1"}}},
3380 {48000, 2, 16000, 10000, 20000}}; 3390 {48000, 2, 16000, 10000, 20000}};
3381 spec1.info.allow_comfort_noise = false; 3391 spec1.info.allow_comfort_noise = false;
3382 spec1.info.supports_network_adaption = true; 3392 spec1.info.supports_network_adaption = true;
3383 specs.push_back(spec1); 3393 specs.push_back(spec1);
3384 webrtc::AudioCodecSpec spec2{{"codec2", 32000, 1}, {32000, 1, 32000}}; 3394 webrtc::AudioCodecSpec spec2{{"codec2", 32000, 1}, {32000, 1, 32000}};
3385 spec2.info.allow_comfort_noise = false; 3395 spec2.info.allow_comfort_noise = false;
3386 specs.push_back(spec2); 3396 specs.push_back(spec2);
3387 specs.push_back(webrtc::AudioCodecSpec{ 3397 specs.push_back(webrtc::AudioCodecSpec{
3388 {"codec3", 16000, 1, {{"param1", "value1b"}, {"param2", "value2"}}}, 3398 {"codec3", 16000, 1, {{"param1", "value1b"}, {"param2", "value2"}}},
3389 {16000, 1, 13300}}); 3399 {16000, 1, 13300}});
3390 specs.push_back( 3400 specs.push_back(
3391 webrtc::AudioCodecSpec{{"codec4", 8000, 1}, {8000, 1, 64000}}); 3401 webrtc::AudioCodecSpec{{"codec4", 8000, 1}, {8000, 1, 64000}});
3392 specs.push_back( 3402 specs.push_back(
3393 webrtc::AudioCodecSpec{{"codec5", 8000, 2}, {8000, 1, 64000}}); 3403 webrtc::AudioCodecSpec{{"codec5", 8000, 2}, {8000, 1, 64000}});
3394 3404
3395 rtc::scoped_refptr<webrtc::MockAudioDecoderFactory> mock_factory = 3405 rtc::scoped_refptr<webrtc::MockAudioEncoderFactory> unused_encoder_factory =
3406 webrtc::MockAudioEncoderFactory::CreateUnusedFactory();
3407 rtc::scoped_refptr<webrtc::MockAudioDecoderFactory> mock_decoder_factory =
3396 new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>; 3408 new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>;
3397 EXPECT_CALL(*mock_factory.get(), GetSupportedDecoders()) 3409 EXPECT_CALL(*mock_decoder_factory.get(), GetSupportedDecoders())
3398 .WillOnce(Return(specs)); 3410 .WillOnce(Return(specs));
3399 3411
3400 cricket::WebRtcVoiceEngine engine(nullptr, mock_factory, nullptr); 3412 cricket::WebRtcVoiceEngine engine(nullptr, unused_encoder_factory,
3413 mock_decoder_factory, nullptr);
3401 auto codecs = engine.recv_codecs(); 3414 auto codecs = engine.recv_codecs();
3402 EXPECT_EQ(11, codecs.size()); 3415 EXPECT_EQ(11, codecs.size());
3403 3416
3404 // Rather than just ASSERTing that there are enough codecs, ensure that we can 3417 // Rather than just ASSERTing that there are enough codecs, ensure that we can
3405 // check the actual values safely, to provide better test results. 3418 // check the actual values safely, to provide better test results.
3406 auto get_codec = 3419 auto get_codec =
3407 [&codecs](size_t index) -> const cricket::AudioCodec& { 3420 [&codecs](size_t index) -> const cricket::AudioCodec& {
3408 static const cricket::AudioCodec missing_codec(0, "<missing>", 0, 0, 0); 3421 static const cricket::AudioCodec missing_codec(0, "<missing>", 0, 0, 0);
3409 if (codecs.size() > index) 3422 if (codecs.size() > index)
3410 return codecs[index]; 3423 return codecs[index];
(...skipping 28 matching lines...) Expand all
3439 // Without this cast, the comparison turned unsigned and, thus, failed for -1. 3452 // Without this cast, the comparison turned unsigned and, thus, failed for -1.
3440 const int num_specs = static_cast<int>(specs.size()); 3453 const int num_specs = static_cast<int>(specs.size());
3441 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); 3454 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs);
3442 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); 3455 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs);
3443 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); 3456 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1);
3444 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); 3457 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs);
3445 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); 3458 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs);
3446 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); 3459 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs);
3447 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); 3460 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs);
3448 } 3461 }
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | webrtc/modules/audio_coding/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698