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

Unified Diff: webrtc/media/engine/webrtcvoiceengine_unittest.cc

Issue 2948763002: Allow an external audio processing module to be used in WebRTC (Closed)
Patch Set: tracking linux32_rel issue Created 3 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/media/engine/webrtcvoiceengine_unittest.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
index dbee6d318a2582424783f635e99ea1847e462111..85158d83bd95571d10b9818865c0d6685d9a8827 100644
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
@@ -15,6 +15,7 @@
#include "webrtc/base/arraysize.h"
#include "webrtc/base/byteorder.h"
#include "webrtc/base/safe_conversions.h"
+#include "webrtc/base/scoped_ref_ptr.h"
#include "webrtc/call/call.h"
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/media/base/fakemediaengine.h"
@@ -121,19 +122,21 @@ void AdmSetupExpectations(webrtc::test::MockAudioDeviceModule* adm) {
TEST(WebRtcVoiceEngineTestStubLibrary, StartupShutdown) {
StrictMock<webrtc::test::MockAudioDeviceModule> adm;
AdmSetupExpectations(&adm);
- StrictMock<webrtc::test::MockAudioProcessing> apm;
- EXPECT_CALL(apm, ApplyConfig(testing::_));
- EXPECT_CALL(apm, SetExtraOptions(testing::_));
- EXPECT_CALL(apm, Initialize()).WillOnce(Return(0));
- EXPECT_CALL(apm, DetachAecDump());
+ rtc::scoped_refptr<StrictMock<webrtc::test::MockAudioProcessing>> apm =
+ new rtc::RefCountedObject<
+ StrictMock<webrtc::test::MockAudioProcessing>>();
+ EXPECT_CALL(*apm, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm, Initialize()).WillOnce(Return(0));
+ EXPECT_CALL(*apm, DetachAecDump());
StrictMock<MockTransmitMixer> transmit_mixer;
EXPECT_CALL(transmit_mixer, EnableStereoChannelSwapping(false));
- cricket::FakeWebRtcVoiceEngine voe(&apm, &transmit_mixer);
+ cricket::FakeWebRtcVoiceEngine voe(&transmit_mixer);
EXPECT_FALSE(voe.IsInited());
{
cricket::WebRtcVoiceEngine engine(
&adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr,
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
new FakeVoEWrapper(&voe));
engine.Init();
EXPECT_TRUE(voe.IsInited());
@@ -155,17 +158,22 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {}
explicit WebRtcVoiceEngineTestFake(const char* field_trials)
- : apm_gc_(*apm_.gain_control()), apm_ec_(*apm_.echo_cancellation()),
- apm_ns_(*apm_.noise_suppression()), apm_vd_(*apm_.voice_detection()),
- call_(webrtc::Call::Config(&event_log_)), voe_(&apm_, &transmit_mixer_),
+ : apm_(new rtc::RefCountedObject<
+ StrictMock<webrtc::test::MockAudioProcessing>>()),
+ apm_gc_(*apm_->gain_control()),
+ apm_ec_(*apm_->echo_cancellation()),
+ apm_ns_(*apm_->noise_suppression()),
+ apm_vd_(*apm_->voice_detection()),
+ call_(webrtc::Call::Config(&event_log_)),
+ voe_(&transmit_mixer_),
override_field_trials_(field_trials) {
// AudioDeviceModule.
AdmSetupExpectations(&adm_);
// AudioProcessing.
- EXPECT_CALL(apm_, ApplyConfig(testing::_));
- EXPECT_CALL(apm_, SetExtraOptions(testing::_));
- EXPECT_CALL(apm_, Initialize()).WillOnce(Return(0));
- EXPECT_CALL(apm_, DetachAecDump());
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm_, Initialize()).WillOnce(Return(0));
+ EXPECT_CALL(*apm_, DetachAecDump());
// Default Options.
EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
@@ -186,7 +194,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
auto encoder_factory = webrtc::CreateBuiltinAudioEncoderFactory();
auto decoder_factory = webrtc::CreateBuiltinAudioDecoderFactory();
engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, encoder_factory,
- decoder_factory, nullptr,
+ decoder_factory, nullptr, apm_,
new FakeVoEWrapper(&voe_)));
engine_->Init();
send_parameters_.codecs.push_back(kPcmuCodec);
@@ -196,8 +204,8 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
}
bool SetupChannel() {
- EXPECT_CALL(apm_, ApplyConfig(testing::_));
- EXPECT_CALL(apm_, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_));
channel_ = engine_->CreateChannel(&call_, cricket::MediaConfig(),
cricket::AudioOptions());
return (channel_ != nullptr);
@@ -217,7 +225,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcX))) {
return false;
}
- EXPECT_CALL(apm_, set_output_will_be_muted(false));
+ EXPECT_CALL(*apm_, set_output_will_be_muted(false));
return channel_->SetAudioSend(kSsrcX, true, nullptr, &fake_source_);
}
@@ -270,26 +278,26 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_CALL(adm_, RecordingIsInitialized()).WillOnce(Return(false));
EXPECT_CALL(adm_, Recording()).WillOnce(Return(false));
EXPECT_CALL(adm_, InitRecording()).WillOnce(Return(0));
- EXPECT_CALL(apm_, ApplyConfig(testing::_));
- EXPECT_CALL(apm_, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_));
}
channel_->SetSend(enable);
}
void SetSendParameters(const cricket::AudioSendParameters& params) {
- EXPECT_CALL(apm_, ApplyConfig(testing::_));
- EXPECT_CALL(apm_, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_));
ASSERT_TRUE(channel_);
EXPECT_TRUE(channel_->SetSendParameters(params));
}
void SetAudioSend(uint32_t ssrc, bool enable, cricket::AudioSource* source,
const cricket::AudioOptions* options = nullptr) {
- EXPECT_CALL(apm_, set_output_will_be_muted(!enable));
+ EXPECT_CALL(*apm_, set_output_will_be_muted(!enable));
ASSERT_TRUE(channel_);
if (enable && options) {
- EXPECT_CALL(apm_, ApplyConfig(testing::_));
- EXPECT_CALL(apm_, SetExtraOptions(testing::_));
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_));
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_));
}
EXPECT_TRUE(channel_->SetAudioSend(ssrc, enable, options, source));
}
@@ -658,7 +666,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
protected:
StrictMock<webrtc::test::MockAudioDeviceModule> adm_;
- StrictMock<webrtc::test::MockAudioProcessing> apm_;
+ rtc::scoped_refptr<StrictMock<webrtc::test::MockAudioProcessing>> apm_;
webrtc::test::MockGainControl& apm_gc_;
webrtc::test::MockEchoCancellation& apm_ec_;
webrtc::test::MockNoiseSuppression& apm_ns_;
@@ -2794,8 +2802,8 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) {
RecordingIsInitialized()).Times(2).WillRepeatedly(Return(false));
EXPECT_CALL(adm_, Recording()).Times(2).WillRepeatedly(Return(false));
EXPECT_CALL(adm_, InitRecording()).Times(2).WillRepeatedly(Return(0));
- EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(10);
- EXPECT_CALL(apm_, SetExtraOptions(testing::_)).Times(10);
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_)).Times(10);
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_)).Times(10);
std::unique_ptr<cricket::WebRtcVoiceMediaChannel> channel1(
static_cast<cricket::WebRtcVoiceMediaChannel*>(engine_->CreateChannel(
@@ -2905,8 +2913,8 @@ TEST_F(WebRtcVoiceEngineTestFake, TestSetDscpOptions) {
cricket::MediaConfig config;
std::unique_ptr<cricket::VoiceMediaChannel> channel;
- EXPECT_CALL(apm_, ApplyConfig(testing::_)).Times(3);
- EXPECT_CALL(apm_, SetExtraOptions(testing::_)).Times(3);
+ EXPECT_CALL(*apm_, ApplyConfig(testing::_)).Times(3);
+ EXPECT_CALL(*apm_, SetExtraOptions(testing::_)).Times(3);
channel.reset(
engine_->CreateChannel(&call_, config, cricket::AudioOptions()));
@@ -3262,9 +3270,11 @@ TEST_F(WebRtcVoiceEngineTestFake, PreservePlayoutWhenRecreateRecvStream) {
TEST(WebRtcVoiceEngineTest, StartupShutdown) {
// If the VoiceEngine wants to gather available codecs early, that's fine but
// we never want it to create a decoder at this stage.
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(
nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
@@ -3284,9 +3294,11 @@ TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) {
// we could enter a tight loop since the mock would return 0.
EXPECT_CALL(adm, TimeUntilNextProcess()).WillRepeatedly(Return(100));
{
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(
&adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
@@ -3302,9 +3314,11 @@ TEST(WebRtcVoiceEngineTest, StartupShutdownWithExternalADM) {
TEST(WebRtcVoiceEngineTest, HasCorrectPayloadTypeMapping) {
// TODO(ossu): Why are the payload types of codecs with non-static payload
// type assignments checked here? It shouldn't really matter.
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(
nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
for (const cricket::AudioCodec& codec : engine.send_codecs()) {
auto is_codec = [&codec](const char* name, int clockrate = 0) {
@@ -3344,9 +3358,11 @@ TEST(WebRtcVoiceEngineTest, HasCorrectPayloadTypeMapping) {
// Tests that VoE supports at least 32 channels
TEST(WebRtcVoiceEngineTest, Has32Channels) {
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(
nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
@@ -3379,9 +3395,11 @@ TEST(WebRtcVoiceEngineTest, SetRecvCodecs) {
// what we sent in - though it's probably reasonable to expect so, if
// SetRecvParameters returns true.
// I think it will become clear once audio decoder injection is completed.
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(
nullptr, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::CreateBuiltinAudioDecoderFactory(), nullptr);
+ webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
@@ -3418,8 +3436,10 @@ TEST(WebRtcVoiceEngineTest, CollectRecvCodecs) {
EXPECT_CALL(*mock_decoder_factory.get(), GetSupportedDecoders())
.WillOnce(Return(specs));
+ rtc::scoped_refptr<webrtc::AudioProcessing> apm =
+ webrtc::AudioProcessing::Create();
cricket::WebRtcVoiceEngine engine(nullptr, unused_encoder_factory,
- mock_decoder_factory, nullptr);
+ mock_decoder_factory, nullptr, apm);
engine.Init();
auto codecs = engine.recv_codecs();
EXPECT_EQ(11, codecs.size());

Powered by Google App Engine
This is Rietveld 408576698