Chromium Code Reviews| Index: webrtc/modules/audio_coding/main/acm2/rent_a_codec.h |
| diff --git a/webrtc/modules/audio_coding/main/acm2/rent_a_codec.h b/webrtc/modules/audio_coding/main/acm2/rent_a_codec.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cfbb4ce0a55505af9e1fe134bfad6df468f44ac1 |
| --- /dev/null |
| +++ b/webrtc/modules/audio_coding/main/acm2/rent_a_codec.h |
| @@ -0,0 +1,127 @@ |
| +/* |
| + * Copyright (c) 2015 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. |
| + */ |
| + |
| +#ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_RENT_A_CODEC_H_ |
| +#define WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_RENT_A_CODEC_H_ |
| + |
| +#include <stddef.h> |
| + |
| +#include "webrtc/base/array_view.h" |
| +#include "webrtc/base/maybe.h" |
| +#include "webrtc/typedefs.h" |
| + |
| +namespace webrtc { |
| + |
| +struct CodecInst; |
| + |
| +namespace acm2 { |
| + |
| +class RentACodec { |
| + public: |
| + enum class CodecId { |
| +#if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX) |
| + kISAC, |
| +#endif |
| +#ifdef WEBRTC_CODEC_ISAC |
| + kISACSWB, |
| +#endif |
| + // Mono |
| + kPCM16B, |
| + kPCM16Bwb, |
| + kPCM16Bswb32kHz, |
| + // Stereo |
| + kPCM16B_2ch, |
| + kPCM16Bwb_2ch, |
| + kPCM16Bswb32kHz_2ch, |
| + // Mono |
| + kPCMU, |
| + kPCMA, |
| + // Stereo |
| + kPCMU_2ch, |
| + kPCMA_2ch, |
| +#ifdef WEBRTC_CODEC_ILBC |
| + kILBC, |
| +#endif |
| +#ifdef WEBRTC_CODEC_G722 |
| + kG722, // Mono |
| + kG722_2ch, // Stereo |
| +#endif |
| +#ifdef WEBRTC_CODEC_OPUS |
| + kOpus, // Mono and stereo |
| +#endif |
| + kCNNB, |
| + kCNWB, |
| + kCNSWB, |
| +#ifdef ENABLE_48000_HZ |
| + kCNFB, |
| +#endif |
| + kAVT, |
| +#ifdef WEBRTC_CODEC_RED |
| + kRED, |
| +#endif |
| + kNumCodecs, // Implementation detail. Don't use. |
| + |
| +// Set unsupported codecs to -1. |
| +#if !defined(WEBRTC_CODEC_ISAC) && !defined(WEBRTC_CODEC_ISACFX) |
| + kISAC = -1, |
| +#endif |
| +#ifndef WEBRTC_CODEC_ISAC |
| + kISACSWB = -1, |
| +#endif |
| + // 48 kHz not supported, always set to -1. |
| + kPCM16Bswb48kHz = -1, |
| +#ifndef WEBRTC_CODEC_ILBC |
| + kILBC = -1, |
| +#endif |
| +#ifndef WEBRTC_CODEC_G722 |
| + kG722 = -1, // Mono |
| + kG722_2ch = -1, // Stereo |
| +#endif |
| +#ifndef WEBRTC_CODEC_OPUS |
| + kOpus = -1, // Mono and stereo |
| +#endif |
| +#ifndef WEBRTC_CODEC_RED |
| + kRED = -1, |
| +#endif |
| +#ifndef ENABLE_48000_HZ |
| + kCNFB = -1, |
| +#endif |
| + |
| + kNone = -1 |
| + }; |
| + |
| + static inline size_t NumberOfCodecs() { |
| + return static_cast<size_t>(CodecId::kNumCodecs); |
| + } |
| + static inline rtc::Maybe<int> CodecIndexFromId(CodecId codec_id) { |
|
hlundin-webrtc
2015/10/27 13:52:02
I wouldn't mind an empty line between each method
kwiberg-webrtc
2015/10/27 14:43:23
Done.
|
| + const int i = static_cast<int>(codec_id); |
| + return i < static_cast<int>(NumberOfCodecs()) ? i : rtc::Maybe<int>(); |
| + } |
| + static inline rtc::Maybe<CodecId> CodecIdFromIndex(int codec_index) { |
| + return static_cast<size_t>(codec_index) < NumberOfCodecs() |
| + ? static_cast<RentACodec::CodecId>(codec_index) |
| + : rtc::Maybe<RentACodec::CodecId>(); |
| + } |
| + static rtc::Maybe<CodecId> CodecIdByParams(const char* payload_name, |
| + int sampling_freq_hz, |
| + int channels); |
| + static rtc::Maybe<CodecInst> CodecInstById(CodecId codec_id); |
| + static rtc::Maybe<CodecInst> CodecInstByParams(const char* payload_name, |
|
the sun
2015/10/27 14:07:07
Sorry for the naïve question, but... Isn't this th
kwiberg-webrtc
2015/10/27 14:43:23
They're all needed at the moment, because old call
|
| + int sampling_freq_hz, |
| + int channels); |
| + static bool IsCodecValid(const CodecInst& codec_inst); |
| + |
| + static rtc::ArrayView<const CodecInst> Database(); |
| +}; |
| + |
| +} // namespace acm2 |
| +} // namespace webrtc |
| + |
| +#endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_RENT_A_CODEC_H_ |