Reimplement the builtin audio codec factories using the new stuff in api/

The whole point of all the audio codec stuff we've recently published
in api/ is to function as lego bricks so that building stuff like our
builtin audio codec factories will be easy.

(This has landed once before, but got reverted because of Chromium test
failures---apparently, someone isn't ignoring the case of the codec names
like they're supposed to. The quick fix was to preserve the same case
used by the old implementation.)

BUG=webrtc:7821, webrtc:7822

Review-Url: https://codereview.webrtc.org/2998263002
Cr-Commit-Position: refs/heads/master@{#19512}
diff --git a/webrtc/api/audio_codecs/builtin_audio_decoder_factory.cc b/webrtc/api/audio_codecs/builtin_audio_decoder_factory.cc
index 9bd049b..69a3e7c 100644
--- a/webrtc/api/audio_codecs/builtin_audio_decoder_factory.cc
+++ b/webrtc/api/audio_codecs/builtin_audio_decoder_factory.cc
@@ -10,12 +10,70 @@
 
 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
 
-#include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.h"
+#include <memory>
+#include <vector>
+
+#include "webrtc/api/audio_codecs/L16/audio_decoder_L16.h"
+#include "webrtc/api/audio_codecs/audio_decoder_factory_template.h"
+#include "webrtc/api/audio_codecs/g711/audio_decoder_g711.h"
+#if WEBRTC_USE_BUILTIN_G722
+#include "webrtc/api/audio_codecs/g722/audio_decoder_g722.h"  // nogncheck
+#endif
+#if WEBRTC_USE_BUILTIN_ILBC
+#include "webrtc/api/audio_codecs/ilbc/audio_decoder_ilbc.h"  // nogncheck
+#endif
+#if WEBRTC_USE_BUILTIN_ISAC_FIX
+#include "webrtc/api/audio_codecs/isac/audio_decoder_isac_fix.h"  // nogncheck
+#elif WEBRTC_USE_BUILTIN_ISAC_FLOAT
+#include "webrtc/api/audio_codecs/isac/audio_decoder_isac_float.h"  // nogncheck
+#endif
+#if WEBRTC_USE_BUILTIN_OPUS
+#include "webrtc/api/audio_codecs/opus/audio_decoder_opus.h"  // nogncheck
+#endif
 
 namespace webrtc {
 
+namespace {
+
+// Modify an audio decoder to not advertise support for anything.
+template <typename T>
+struct NotAdvertised {
+  using Config = typename T::Config;
+  static rtc::Optional<Config> SdpToConfig(const SdpAudioFormat& audio_format) {
+    return T::SdpToConfig(audio_format);
+  }
+  static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs) {
+    // Don't advertise support for anything.
+  }
+  static std::unique_ptr<AudioDecoder> MakeAudioDecoder(const Config& config) {
+    return T::MakeAudioDecoder(config);
+  }
+};
+
+}  // namespace
+
 rtc::scoped_refptr<AudioDecoderFactory> CreateBuiltinAudioDecoderFactory() {
-  return CreateBuiltinAudioDecoderFactoryInternal();
+  return CreateAudioDecoderFactory<
+
+#if WEBRTC_USE_BUILTIN_OPUS
+      AudioDecoderOpus,
+#endif
+
+#if WEBRTC_USE_BUILTIN_ISAC_FIX
+      AudioDecoderIsacFix,
+#elif WEBRTC_USE_BUILTIN_ISAC_FLOAT
+      AudioDecoderIsacFloat,
+#endif
+
+#if WEBRTC_USE_BUILTIN_G722
+      AudioDecoderG722,
+#endif
+
+#if WEBRTC_USE_BUILTIN_ILBC
+      AudioDecoderIlbc,
+#endif
+
+      AudioDecoderG711, NotAdvertised<AudioDecoderL16>>();
 }
 
 }  // namespace webrtc