Voice Engine: Require caller to supply an AudioDecoderFactory

So that we don't have to be capable of creating one ourselves, which
requires a dependency on the audio decoders.

In the process, remove the default values for the VoEBase::Init() arguments,
since there isn't a sensible default value for the audio decoder factory
anymore.

BUG=webrtc:8396

Change-Id: Idb433efa49e1a68e8206d369d27b3c255185777a
Reviewed-on: https://webrtc-review.googlesource.com/18200
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20552}
diff --git a/call/BUILD.gn b/call/BUILD.gn
index d41dd70..cb5d341 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -202,6 +202,7 @@
       "..:webrtc_common",
       "../api:array_view",
       "../api:mock_audio_mixer",
+      "../api/audio_codecs:builtin_audio_decoder_factory",
       "../logging:rtc_event_log_api",
       "../modules/audio_device:mock_audio_device",
       "../modules/audio_mixer",
diff --git a/call/call_unittest.cc b/call/call_unittest.cc
index d614de6..aeba5a8 100644
--- a/call/call_unittest.cc
+++ b/call/call_unittest.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <utility>
 
+#include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/test/mock_audio_mixer.h"
 #include "call/audio_state.h"
 #include "call/call.h"
@@ -456,7 +457,8 @@
   audio_state_config.voice_engine = voice_engine.voe;
   audio_state_config.audio_mixer = mock_mixer;
   audio_state_config.audio_processing = AudioProcessing::Create();
-  voice_engine.base->Init(&mock_adm, audio_state_config.audio_processing.get());
+  voice_engine.base->Init(&mock_adm, audio_state_config.audio_processing.get(),
+                          CreateBuiltinAudioDecoderFactory());
   auto audio_state = AudioState::Create(audio_state_config);
 
   RtcEventLogNullImpl event_log;
diff --git a/voice_engine/BUILD.gn b/voice_engine/BUILD.gn
index f4bbd96..23e4f7a 100644
--- a/voice_engine/BUILD.gn
+++ b/voice_engine/BUILD.gn
@@ -61,8 +61,6 @@
     "../api:refcountedbase",
     "../api:transport_api",
     "../api/audio_codecs:audio_codecs_api",
-    "../api/audio_codecs:builtin_audio_decoder_factory",
-    "../api/audio_codecs:builtin_audio_encoder_factory",
     "../audio/utility:audio_frame_operations",
     "../call:rtp_interfaces",
     "../common_audio",
@@ -101,6 +99,7 @@
   rtc_test("voice_engine_unittests") {
     deps = [
       ":voice_engine",
+      "../api/audio_codecs:builtin_audio_decoder_factory",
       "../common_audio",
       "../modules:module_api",
       "../modules/audio_coding",
diff --git a/voice_engine/include/voe_base.h b/voice_engine/include/voe_base.h
index a62a2b4..06a8cf3 100644
--- a/voice_engine/include/voe_base.h
+++ b/voice_engine/include/voe_base.h
@@ -92,13 +92,12 @@
   // functionality in a separate (reference counted) module.
   // - The AudioProcessing module handles capture-side processing.
   // - An AudioDecoderFactory - used to create audio decoders.
-  // If NULL is passed for either of ADM or AudioDecoderFactory, VoiceEngine
+  // If NULL is passed for ADM, VoiceEngine
   // will create its own. Returns -1 in case of an error, 0 otherwise.
-  // TODO(ajm): Remove default NULLs.
-  virtual int Init(AudioDeviceModule* external_adm = NULL,
-                   AudioProcessing* external_apm = nullptr,
-                   const rtc::scoped_refptr<AudioDecoderFactory>&
-                       decoder_factory = nullptr) = 0;
+  virtual int Init(
+      AudioDeviceModule* external_adm,
+      AudioProcessing* external_apm,
+      const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) = 0;
   // This method is WIP - DO NOT USE!
   // Returns NULL before Init() is called.
   virtual AudioDeviceModule* audio_device_module() = 0;
diff --git a/voice_engine/voe_base_impl.cc b/voice_engine/voe_base_impl.cc
index 9e7a5f4..585ce44 100644
--- a/voice_engine/voe_base_impl.cc
+++ b/voice_engine/voe_base_impl.cc
@@ -10,7 +10,6 @@
 
 #include "voice_engine/voe_base_impl.h"
 
-#include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "common_audio/signal_processing/include/signal_processing_library.h"
 #include "modules/audio_coding/include/audio_coding_module.h"
 #include "modules/audio_device/audio_device_impl.h"
@@ -272,10 +271,8 @@
   }
 #endif
 
-  if (decoder_factory)
-    decoder_factory_ = decoder_factory;
-  else
-    decoder_factory_ = CreateBuiltinAudioDecoderFactory();
+  RTC_DCHECK(decoder_factory);
+  decoder_factory_ = decoder_factory;
 
   return 0;
 }
diff --git a/voice_engine/voe_base_unittest.cc b/voice_engine/voe_base_unittest.cc
index 72f2e0a..51fdf4e 100644
--- a/voice_engine/voe_base_unittest.cc
+++ b/voice_engine/voe_base_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "voice_engine/include/voe_base.h"
 
+#include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "modules/audio_device/include/fake_audio_device.h"
 #include "modules/audio_processing/include/mock_audio_processing.h"
 #include "rtc_base/refcountedobject.h"
@@ -39,11 +40,13 @@
 };
 
 TEST_F(VoEBaseTest, InitWithExternalAudioDevice) {
-  EXPECT_EQ(0, base_->Init(&adm_, apm_.get()));
+  EXPECT_EQ(0,
+            base_->Init(&adm_, apm_.get(), CreateBuiltinAudioDecoderFactory()));
 }
 
 TEST_F(VoEBaseTest, CreateChannelAfterInit) {
-  EXPECT_EQ(0, base_->Init(&adm_, apm_.get(), nullptr));
+  EXPECT_EQ(0,
+            base_->Init(&adm_, apm_.get(), CreateBuiltinAudioDecoderFactory()));
   int channelID = base_->CreateChannel();
   EXPECT_NE(channelID, -1);
   EXPECT_EQ(0, base_->DeleteChannel(channelID));