Index: webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.cc |
diff --git a/webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.cc b/webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.cc |
deleted file mode 100644 |
index f853cbda31d4a03bd161d48d12b268855a0e848a..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.cc |
+++ /dev/null |
@@ -1,257 +0,0 @@ |
-/* |
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory_internal.h" |
- |
-#include <memory> |
-#include <vector> |
- |
-#include "webrtc/common_types.h" |
-#include "webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h" |
-#include "webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h" |
-#include "webrtc/rtc_base/checks.h" |
-#include "webrtc/rtc_base/optional.h" |
-#ifdef WEBRTC_CODEC_G722 |
-#include "webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.h" |
-#endif |
-#ifdef WEBRTC_CODEC_ILBC |
-#include "webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h" |
-#endif |
-#ifdef WEBRTC_CODEC_ISACFX |
-#include "webrtc/modules/audio_coding/codecs/isac/fix/include/audio_decoder_isacfix.h" // nogncheck |
-#endif |
-#ifdef WEBRTC_CODEC_ISAC |
-#include "webrtc/modules/audio_coding/codecs/isac/main/include/audio_decoder_isac.h" // nogncheck |
-#endif |
-#ifdef WEBRTC_CODEC_OPUS |
-#include "webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.h" |
-#endif |
-#include "webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h" |
- |
-namespace webrtc { |
- |
-namespace { |
- |
-struct NamedDecoderConstructor { |
- const char* name; |
- |
- // If |format| is good, return true and (if |out| isn't null) reset |*out| to |
- // a new decoder object. If the |format| is not good, return false. |
- bool (*constructor)(const SdpAudioFormat& format, |
- std::unique_ptr<AudioDecoder>* out); |
-}; |
- |
-// TODO(kwiberg): These factory functions should probably be moved to each |
-// decoder. |
-NamedDecoderConstructor decoder_constructors[] = { |
- {"pcmu", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.clockrate_hz == 8000 && format.num_channels >= 1) { |
- if (out) { |
- out->reset(new AudioDecoderPcmU(format.num_channels)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
- {"pcma", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.clockrate_hz == 8000 && format.num_channels >= 1) { |
- if (out) { |
- out->reset(new AudioDecoderPcmA(format.num_channels)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#ifdef WEBRTC_CODEC_ILBC |
- {"ilbc", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.clockrate_hz == 8000 && format.num_channels == 1) { |
- if (out) { |
- out->reset(new AudioDecoderIlbcImpl); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#endif |
-#if defined(WEBRTC_CODEC_ISACFX) |
- {"isac", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.clockrate_hz == 16000 && format.num_channels == 1) { |
- if (out) { |
- out->reset(new AudioDecoderIsacFixImpl(format.clockrate_hz)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#elif defined(WEBRTC_CODEC_ISAC) |
- {"isac", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if ((format.clockrate_hz == 16000 || format.clockrate_hz == 32000) && |
- format.num_channels == 1) { |
- if (out) { |
- out->reset(new AudioDecoderIsacFloatImpl(format.clockrate_hz)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#endif |
- {"l16", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.num_channels >= 1) { |
- if (out) { |
- out->reset(new AudioDecoderPcm16B(format.clockrate_hz, |
- format.num_channels)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#ifdef WEBRTC_CODEC_G722 |
- {"g722", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- if (format.clockrate_hz == 8000) { |
- if (format.num_channels == 1) { |
- if (out) { |
- out->reset(new AudioDecoderG722Impl); |
- } |
- return true; |
- } else if (format.num_channels == 2) { |
- if (out) { |
- out->reset(new AudioDecoderG722StereoImpl); |
- } |
- return true; |
- } |
- } |
- return false; |
- }}, |
-#endif |
-#ifdef WEBRTC_CODEC_OPUS |
- {"opus", |
- [](const SdpAudioFormat& format, std::unique_ptr<AudioDecoder>* out) { |
- const rtc::Optional<int> num_channels = [&] { |
- auto stereo = format.parameters.find("stereo"); |
- if (stereo != format.parameters.end()) { |
- if (stereo->second == "0") { |
- return rtc::Optional<int>(1); |
- } else if (stereo->second == "1") { |
- return rtc::Optional<int>(2); |
- } else { |
- return rtc::Optional<int>(); // Bad stereo parameter. |
- } |
- } |
- return rtc::Optional<int>(1); // Default to mono. |
- }(); |
- if (format.clockrate_hz == 48000 && format.num_channels == 2 && |
- num_channels) { |
- if (out) { |
- out->reset(new AudioDecoderOpusImpl(*num_channels)); |
- } |
- return true; |
- } else { |
- return false; |
- } |
- }}, |
-#endif |
-}; |
- |
-class BuiltinAudioDecoderFactory : public AudioDecoderFactory { |
- public: |
- std::vector<AudioCodecSpec> GetSupportedDecoders() override { |
- // Although this looks a bit strange, it means specs need only be |
- // initialized once, and that that initialization is thread-safe. |
- static std::vector<AudioCodecSpec> specs = [] { |
- std::vector<AudioCodecSpec> specs; |
-#ifdef WEBRTC_CODEC_OPUS |
- AudioCodecInfo opus_info{48000, 1, 64000, 6000, 510000}; |
- opus_info.allow_comfort_noise = false; |
- opus_info.supports_network_adaption = true; |
- // clang-format off |
- SdpAudioFormat opus_format({"opus", 48000, 2, { |
- {"minptime", "10"}, |
- {"useinbandfec", "1"} |
- }}); |
- // clang-format on |
- specs.push_back({std::move(opus_format), opus_info}); |
-#endif |
-#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) |
- specs.push_back(AudioCodecSpec{{"ISAC", 16000, 1}, |
- {16000, 1, 32000, 10000, 56000}}); |
-#endif |
-#if (defined(WEBRTC_CODEC_ISAC)) |
- specs.push_back(AudioCodecSpec{{"ISAC", 32000, 1}, |
- {32000, 1, 56000, 10000, 56000}}); |
-#endif |
-#ifdef WEBRTC_CODEC_G722 |
- specs.push_back(AudioCodecSpec{{"G722", 8000, 1}, |
- {16000, 1, 64000}}); |
-#endif |
-#ifdef WEBRTC_CODEC_ILBC |
- specs.push_back(AudioCodecSpec{{"ILBC", 8000, 1}, |
- {8000, 1, 13300}}); |
-#endif |
- specs.push_back(AudioCodecSpec{{"PCMU", 8000, 1}, |
- {8000, 1, 64000}}); |
- specs.push_back(AudioCodecSpec{{"PCMA", 8000, 1}, |
- {8000, 1, 64000}}); |
- return specs; |
- }(); |
- return specs; |
- } |
- |
- bool IsSupportedDecoder(const SdpAudioFormat& format) override { |
- for (const auto& dc : decoder_constructors) { |
- if (STR_CASE_CMP(format.name.c_str(), dc.name) == 0) { |
- return dc.constructor(format, nullptr); |
- } |
- } |
- return false; |
- } |
- |
- std::unique_ptr<AudioDecoder> MakeAudioDecoder( |
- const SdpAudioFormat& format) override { |
- for (const auto& dc : decoder_constructors) { |
- if (STR_CASE_CMP(format.name.c_str(), dc.name) == 0) { |
- std::unique_ptr<AudioDecoder> decoder; |
- bool ok = dc.constructor(format, &decoder); |
- RTC_DCHECK_EQ(ok, decoder != nullptr); |
- if (decoder) { |
- const int expected_sample_rate_hz = |
- STR_CASE_CMP(format.name.c_str(), "g722") == 0 |
- ? 2 * format.clockrate_hz |
- : format.clockrate_hz; |
- RTC_CHECK_EQ(expected_sample_rate_hz, decoder->SampleRateHz()); |
- } |
- return decoder; |
- } |
- } |
- return nullptr; |
- } |
-}; |
- |
-} // namespace |
- |
-rtc::scoped_refptr<AudioDecoderFactory> |
-CreateBuiltinAudioDecoderFactoryInternal() { |
- return rtc::scoped_refptr<AudioDecoderFactory>( |
- new rtc::RefCountedObject<BuiltinAudioDecoderFactory>); |
-} |
- |
-} // namespace webrtc |