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