Revert of Support external audio mixer. (patchset #5 id:140001 of https://codereview.webrtc.org/2539213003/ )
Reason for revert:
A interface change broke some downstream code in google3.
Original issue's description:
> Support external audio mixer in webrtc.
>
> An external audio mixer will be passed from PeerConnectionFactory to
> AudioTransportProxy.
>
> BUG=webrtc:6457
>
> Committed: https://crrev.com/f6bcac59e88c3be5ffd73bbb1098f2d82ee316a1
> Cr-Commit-Position: refs/heads/master@{#15556}
TBR=solenberg@webrtc.org,aleloi@webrtc.org,deadbeef@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6457
Review-Url: https://codereview.webrtc.org/2562333003
Cr-Commit-Position: refs/heads/master@{#15557}
diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc
index 9da6e57..e76701e 100644
--- a/webrtc/api/peerconnectionfactory.cc
+++ b/webrtc/api/peerconnectionfactory.cc
@@ -57,9 +57,27 @@
AudioDeviceModule* default_adm,
cricket::WebRtcVideoEncoderFactory* encoder_factory,
cricket::WebRtcVideoDecoderFactory* decoder_factory) {
- return CreatePeerConnectionFactoryWithAudioMixer(
- network_thread, worker_thread, signaling_thread, default_adm,
- encoder_factory, decoder_factory, nullptr);
+ rtc::scoped_refptr<PeerConnectionFactory> pc_factory(
+ new rtc::RefCountedObject<PeerConnectionFactory>(
+ network_thread,
+ worker_thread,
+ signaling_thread,
+ default_adm,
+ CreateBuiltinAudioDecoderFactory(),
+ encoder_factory,
+ decoder_factory));
+
+ // Call Initialize synchronously but make sure its executed on
+ // |signaling_thread|.
+ MethodCall0<PeerConnectionFactory, bool> call(
+ pc_factory.get(),
+ &PeerConnectionFactory::Initialize);
+ bool result = call.Marshal(RTC_FROM_HERE, signaling_thread);
+
+ if (!result) {
+ return nullptr;
+ }
+ return PeerConnectionFactoryProxy::Create(signaling_thread, pc_factory);
}
PeerConnectionFactory::PeerConnectionFactory()
@@ -77,33 +95,6 @@
worker_thread_->Start();
}
-rtc::scoped_refptr<PeerConnectionFactoryInterface>
-CreatePeerConnectionFactoryWithAudioMixer(
- rtc::Thread* network_thread,
- rtc::Thread* worker_thread,
- rtc::Thread* signaling_thread,
- AudioDeviceModule* default_adm,
- cricket::WebRtcVideoEncoderFactory* encoder_factory,
- cricket::WebRtcVideoDecoderFactory* decoder_factory,
- rtc::scoped_refptr<AudioMixer> audio_mixer) {
- rtc::scoped_refptr<PeerConnectionFactory> pc_factory(
- new rtc::RefCountedObject<PeerConnectionFactory>(
- network_thread, worker_thread, signaling_thread, default_adm,
- CreateBuiltinAudioDecoderFactory(), encoder_factory, decoder_factory,
- audio_mixer));
-
- // Call Initialize synchronously but make sure it is executed on
- // |signaling_thread|.
- MethodCall0<PeerConnectionFactory, bool> call(
- pc_factory.get(), &PeerConnectionFactory::Initialize);
- bool result = call.Marshal(RTC_FROM_HERE, signaling_thread);
-
- if (!result) {
- return nullptr;
- }
- return PeerConnectionFactoryProxy::Create(signaling_thread, pc_factory);
-}
-
PeerConnectionFactory::PeerConnectionFactory(
rtc::Thread* network_thread,
rtc::Thread* worker_thread,
@@ -112,8 +103,7 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
- cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<AudioMixer> audio_mixer)
+ cricket::WebRtcVideoDecoderFactory* video_decoder_factory)
: owns_ptrs_(false),
wraps_current_thread_(false),
network_thread_(network_thread),
@@ -122,8 +112,7 @@
default_adm_(default_adm),
audio_decoder_factory_(audio_decoder_factory),
video_encoder_factory_(video_encoder_factory),
- video_decoder_factory_(video_decoder_factory),
- external_audio_mixer_(audio_mixer) {
+ video_decoder_factory_(video_decoder_factory) {
RTC_DCHECK(network_thread);
RTC_DCHECK(worker_thread);
RTC_DCHECK(signaling_thread);
@@ -347,8 +336,10 @@
cricket::MediaEngineInterface* PeerConnectionFactory::CreateMediaEngine_w() {
ASSERT(worker_thread_ == rtc::Thread::Current());
return cricket::WebRtcMediaEngineFactory::Create(
- default_adm_.get(), audio_decoder_factory_, video_encoder_factory_.get(),
- video_decoder_factory_.get(), external_audio_mixer_);
+ default_adm_.get(),
+ audio_decoder_factory_,
+ video_encoder_factory_.get(),
+ video_decoder_factory_.get());
}
} // namespace webrtc
diff --git a/webrtc/api/peerconnectionfactory.h b/webrtc/api/peerconnectionfactory.h
index 4b412ba..7a30ab4 100644
--- a/webrtc/api/peerconnectionfactory.h
+++ b/webrtc/api/peerconnectionfactory.h
@@ -111,8 +111,7 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
- cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<AudioMixer> audio_mixer);
+ cricket::WebRtcVideoDecoderFactory* video_decoder_factory);
virtual ~PeerConnectionFactory();
private:
@@ -136,9 +135,6 @@
std::unique_ptr<cricket::WebRtcVideoDecoderFactory> video_decoder_factory_;
std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;
std::unique_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_;
- // External audio mixer. This can be NULL. In that case, internal audio mixer
- // will be created and used.
- rtc::scoped_refptr<AudioMixer> external_audio_mixer_;
};
} // namespace webrtc
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
index d4daf24..29badbd 100644
--- a/webrtc/api/peerconnectioninterface.h
+++ b/webrtc/api/peerconnectioninterface.h
@@ -87,7 +87,6 @@
namespace webrtc {
class AudioDeviceModule;
-class AudioMixer;
class MediaConstraintsInterface;
// MediaStream container interface.
@@ -804,20 +803,6 @@
cricket::WebRtcVideoEncoderFactory* encoder_factory,
cricket::WebRtcVideoDecoderFactory* decoder_factory);
-// Create a new instance of PeerConnectionFactoryInterface with external audio
-// mixer.
-//
-// If |audio_mixer| is null, an internal audio mixer will be created and used.
-rtc::scoped_refptr<PeerConnectionFactoryInterface>
-CreatePeerConnectionFactoryWithAudioMixer(
- rtc::Thread* network_thread,
- rtc::Thread* worker_thread,
- rtc::Thread* signaling_thread,
- AudioDeviceModule* default_adm,
- cricket::WebRtcVideoEncoderFactory* encoder_factory,
- cricket::WebRtcVideoDecoderFactory* decoder_factory,
- rtc::scoped_refptr<AudioMixer> audio_mixer);
-
// Create a new instance of PeerConnectionFactoryInterface.
// Same thread is used as worker and network thread.
inline rtc::scoped_refptr<PeerConnectionFactoryInterface>
diff --git a/webrtc/audio/audio_receive_stream.cc b/webrtc/audio/audio_receive_stream.cc
index f46337a..8da0616 100644
--- a/webrtc/audio/audio_receive_stream.cc
+++ b/webrtc/audio/audio_receive_stream.cc
@@ -293,7 +293,7 @@
}
int AudioReceiveStream::Ssrc() const {
- return config_.rtp.remote_ssrc;
+ return config_.rtp.local_ssrc;
}
internal::AudioState* AudioReceiveStream::audio_state() const {
diff --git a/webrtc/media/base/fakemediaengine.h b/webrtc/media/base/fakemediaengine.h
index 932427b..dc547f8 100644
--- a/webrtc/media/base/fakemediaengine.h
+++ b/webrtc/media/base/fakemediaengine.h
@@ -753,10 +753,10 @@
class FakeVoiceEngine : public FakeBaseEngine {
public:
- FakeVoiceEngine(webrtc::AudioDeviceModule* adm,
- const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
- audio_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) {
+ FakeVoiceEngine(
+ webrtc::AudioDeviceModule* adm,
+ const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
+ audio_decoder_factory) {
// Add a fake audio codec. Note that the name must not be "" as there are
// sanity checks against that.
codecs_.push_back(AudioCodec(101, "fake_audio_codec", 0, 0, 1));
@@ -864,7 +864,6 @@
public:
FakeMediaEngine()
: CompositeMediaEngine<FakeVoiceEngine, FakeVideoEngine>(nullptr,
- nullptr,
nullptr) {}
virtual ~FakeMediaEngine() {}
diff --git a/webrtc/media/base/mediaengine.h b/webrtc/media/base/mediaengine.h
index debc171..5b7443b 100644
--- a/webrtc/media/base/mediaengine.h
+++ b/webrtc/media/base/mediaengine.h
@@ -33,7 +33,6 @@
namespace webrtc {
class AudioDeviceModule;
-class AudioMixer;
class Call;
}
@@ -111,11 +110,11 @@
template<class VOICE, class VIDEO>
class CompositeMediaEngine : public MediaEngineInterface {
public:
- CompositeMediaEngine(webrtc::AudioDeviceModule* adm,
- const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
- audio_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer)
- : voice_(adm, audio_decoder_factory, audio_mixer) {}
+ CompositeMediaEngine(
+ webrtc::AudioDeviceModule* adm,
+ const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
+ audio_decoder_factory)
+ : voice_(adm, audio_decoder_factory) {}
virtual ~CompositeMediaEngine() {}
virtual bool Init() {
video_.Init();
diff --git a/webrtc/media/engine/nullwebrtcvideoengine_unittest.cc b/webrtc/media/engine/nullwebrtcvideoengine_unittest.cc
index a8f2421..c63dbfb 100644
--- a/webrtc/media/engine/nullwebrtcvideoengine_unittest.cc
+++ b/webrtc/media/engine/nullwebrtcvideoengine_unittest.cc
@@ -25,9 +25,7 @@
WebRtcVideoEncoderFactory* video_encoder_factory,
WebRtcVideoDecoderFactory* video_decoder_factory)
: CompositeMediaEngine<WebRtcVoiceEngine, NullWebRtcVideoEngine>(
- adm,
- audio_decoder_factory,
- nullptr) {
+ adm, audio_decoder_factory) {
video_.SetExternalDecoderFactory(video_decoder_factory);
video_.SetExternalEncoderFactory(video_encoder_factory);
}
diff --git a/webrtc/media/engine/webrtcmediaengine.cc b/webrtc/media/engine/webrtcmediaengine.cc
index c76840c..1531be3 100644
--- a/webrtc/media/engine/webrtcmediaengine.cc
+++ b/webrtc/media/engine/webrtcmediaengine.cc
@@ -33,18 +33,13 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
WebRtcVideoEncoderFactory* video_encoder_factory,
- WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer)
+ WebRtcVideoDecoderFactory* video_decoder_factory)
#ifdef HAVE_WEBRTC_VIDEO
: CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine2>(
- adm,
- audio_decoder_factory,
- audio_mixer){
+ adm, audio_decoder_factory){
#else
: CompositeMediaEngine<WebRtcVoiceEngine, NullWebRtcVideoEngine>(
- adm,
- audio_decoder_factory,
- audio_mixer) {
+ adm, audio_decoder_factory) {
#endif
video_.SetExternalDecoderFactory(video_decoder_factory);
video_.SetExternalEncoderFactory(video_encoder_factory);
@@ -58,11 +53,9 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
- cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) {
- return new cricket::WebRtcMediaEngine2(adm, audio_decoder_factory,
- video_encoder_factory,
- video_decoder_factory, audio_mixer);
+ cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
+ return new cricket::WebRtcMediaEngine2(
+ adm, audio_decoder_factory, video_encoder_factory, video_decoder_factory);
}
void DestroyWebRtcMediaEngine(cricket::MediaEngineInterface* media_engine) {
@@ -78,9 +71,9 @@
webrtc::AudioDeviceModule* adm,
WebRtcVideoEncoderFactory* video_encoder_factory,
WebRtcVideoDecoderFactory* video_decoder_factory) {
- return CreateWebRtcMediaEngine(
- adm, webrtc::CreateBuiltinAudioDecoderFactory(), video_encoder_factory,
- video_decoder_factory, nullptr);
+ return CreateWebRtcMediaEngine(adm,
+ webrtc::CreateBuiltinAudioDecoderFactory(),
+ video_encoder_factory, video_decoder_factory);
}
// Used by PeerConnectionFactory to create a media engine passed into
@@ -90,11 +83,9 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
WebRtcVideoEncoderFactory* video_encoder_factory,
- WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) {
+ WebRtcVideoDecoderFactory* video_decoder_factory) {
return CreateWebRtcMediaEngine(adm, audio_decoder_factory,
- video_encoder_factory, video_decoder_factory,
- audio_mixer);
+ video_encoder_factory, video_decoder_factory);
}
namespace {
diff --git a/webrtc/media/engine/webrtcmediaengine.h b/webrtc/media/engine/webrtcmediaengine.h
index 3cca48f..49b050c 100644
--- a/webrtc/media/engine/webrtcmediaengine.h
+++ b/webrtc/media/engine/webrtcmediaengine.h
@@ -21,7 +21,6 @@
namespace webrtc {
class AudioDecoderFactory;
class AudioDeviceModule;
-class AudioMixer;
}
namespace cricket {
class WebRtcVideoDecoderFactory;
@@ -45,8 +44,7 @@
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
audio_decoder_factory,
WebRtcVideoEncoderFactory* video_encoder_factory,
- WebRtcVideoDecoderFactory* video_decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer);
+ WebRtcVideoDecoderFactory* video_decoder_factory);
};
// Verify that extension IDs are within 1-byte extension range and are not
diff --git a/webrtc/media/engine/webrtcmediaengine_unittest.cc b/webrtc/media/engine/webrtcmediaengine_unittest.cc
index 77fbc87..03e50a1 100644
--- a/webrtc/media/engine/webrtcmediaengine_unittest.cc
+++ b/webrtc/media/engine/webrtcmediaengine_unittest.cc
@@ -188,8 +188,7 @@
TEST(WebRtcMediaEngineFactoryTest, CreateWithBuiltinDecoders) {
std::unique_ptr<MediaEngineInterface> engine(WebRtcMediaEngineFactory::Create(
- nullptr, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, nullptr,
- nullptr));
+ nullptr, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, nullptr));
EXPECT_TRUE(engine);
}
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index a36f328..2a0583c 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -277,16 +277,10 @@
voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate);
}
-webrtc::AudioState::Config MakeAudioStateConfig(
- VoEWrapper* voe_wrapper,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) {
+webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) {
webrtc::AudioState::Config config;
config.voice_engine = voe_wrapper->engine();
- if (audio_mixer) {
- config.audio_mixer = audio_mixer;
- } else {
- config.audio_mixer = webrtc::AudioMixerImpl::Create();
- }
+ config.audio_mixer = webrtc::AudioMixerImpl::Create();
return config;
}
@@ -546,17 +540,14 @@
WebRtcVoiceEngine::WebRtcVoiceEngine(
webrtc::AudioDeviceModule* adm,
- const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer)
- : WebRtcVoiceEngine(adm, decoder_factory, audio_mixer, new VoEWrapper()) {
- audio_state_ =
- webrtc::AudioState::Create(MakeAudioStateConfig(voe(), audio_mixer));
+ const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory)
+ : WebRtcVoiceEngine(adm, decoder_factory, new VoEWrapper()) {
+ audio_state_ = webrtc::AudioState::Create(MakeAudioStateConfig(voe()));
}
WebRtcVoiceEngine::WebRtcVoiceEngine(
webrtc::AudioDeviceModule* adm,
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
VoEWrapper* voe_wrapper)
: adm_(adm), decoder_factory_(decoder_factory), voe_wrapper_(voe_wrapper) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
diff --git a/webrtc/media/engine/webrtcvoiceengine.h b/webrtc/media/engine/webrtcvoiceengine.h
index 224fcb2..633e7d3 100644
--- a/webrtc/media/engine/webrtcvoiceengine.h
+++ b/webrtc/media/engine/webrtcvoiceengine.h
@@ -34,7 +34,6 @@
namespace cricket {
class AudioDeviceModule;
-class AudioMixer;
class AudioSource;
class VoEWrapper;
class WebRtcVoiceMediaChannel;
@@ -49,13 +48,11 @@
WebRtcVoiceEngine(
webrtc::AudioDeviceModule* adm,
- const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer);
+ const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory);
// Dependency injection for testing.
WebRtcVoiceEngine(
webrtc::AudioDeviceModule* adm,
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
VoEWrapper* voe_wrapper);
~WebRtcVoiceEngine() override;
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
index 3ca7ec8..bddefdd 100644
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
@@ -84,7 +84,7 @@
EXPECT_FALSE(voe.IsInited());
{
cricket::WebRtcVoiceEngine engine(
- &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr,
+ &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(),
new FakeVoEWrapper(&voe));
EXPECT_TRUE(voe.IsInited());
}
@@ -116,7 +116,7 @@
EXPECT_CALL(apm_, ApplyConfig(testing::_));
EXPECT_CALL(apm_, SetExtraOptions(testing::_));
EXPECT_CALL(apm_, Initialize()).WillOnce(Return(0));
- engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, factory, nullptr,
+ engine_.reset(new cricket::WebRtcVoiceEngine(&adm_, factory,
new FakeVoEWrapper(&voe_)));
send_parameters_.codecs.push_back(kPcmuCodec);
recv_parameters_.codecs.push_back(kPcmuCodec);
@@ -3466,7 +3466,7 @@
// If the VoiceEngine wants to gather available codecs early, that's fine but
// we never want it to create a decoder at this stage.
cricket::WebRtcVoiceEngine engine(
- nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
webrtc::Call::Create(webrtc::Call::Config(&event_log)));
@@ -3483,7 +3483,7 @@
EXPECT_CALL(adm, Release()).Times(3).WillRepeatedly(Return(0));
{
cricket::WebRtcVoiceEngine engine(
- &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ &adm, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
webrtc::Call::Create(webrtc::Call::Config(&event_log)));
@@ -3551,7 +3551,7 @@
// TODO(ossu): Why are the payload types of codecs with non-static payload
// type assignments checked here? It shouldn't really matter.
cricket::WebRtcVoiceEngine engine(
- nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
for (const cricket::AudioCodec& codec : engine.send_codecs()) {
if (codec.name == "CN" && codec.clockrate == 16000) {
EXPECT_EQ(105, codec.id);
@@ -3587,7 +3587,7 @@
// Tests that VoE supports at least 32 channels
TEST(WebRtcVoiceEngineTest, Has32Channels) {
cricket::WebRtcVoiceEngine engine(
- nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
+ nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory());
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
webrtc::Call::Create(webrtc::Call::Config(&event_log)));
@@ -3620,7 +3620,7 @@
// SetRecvParameters returns true.
// I think it will become clear once audio decoder injection is completed.
cricket::WebRtcVoiceEngine engine(
- nullptr, webrtc::CreateBuiltinAudioDecoderFactory(), nullptr);
+ nullptr, webrtc::CreateBuiltinAudioDecoderFactory());
webrtc::RtcEventLogNullImpl event_log;
std::unique_ptr<webrtc::Call> call(
webrtc::Call::Create(webrtc::Call::Config(&event_log)));