aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/audio_coding/main/acm2/acm_codec_database.h
diff options
context:
space:
mode:
Diffstat (limited to 'webrtc/modules/audio_coding/main/acm2/acm_codec_database.h')
-rw-r--r--webrtc/modules/audio_coding/main/acm2/acm_codec_database.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_codec_database.h b/webrtc/modules/audio_coding/main/acm2/acm_codec_database.h
new file mode 100644
index 0000000000..84c8846a57
--- /dev/null
+++ b/webrtc/modules/audio_coding/main/acm2/acm_codec_database.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2012 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.
+ */
+
+/*
+ * This file generates databases with information about all supported audio
+ * codecs.
+ */
+
+#ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_ACM_CODEC_DATABASE_H_
+#define WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_ACM_CODEC_DATABASE_H_
+
+#include "webrtc/common_types.h"
+#include "webrtc/engine_configurations.h"
+#include "webrtc/modules/audio_coding/main/acm2/rent_a_codec.h"
+#include "webrtc/modules/audio_coding/neteq/include/neteq.h"
+
+namespace webrtc {
+
+namespace acm2 {
+
+// TODO(tlegrand): replace class ACMCodecDB with a namespace.
+class ACMCodecDB {
+ public:
+ // kMaxNumCodecs - Maximum number of codecs that can be activated in one
+ // build.
+ // kMaxNumPacketSize - Maximum number of allowed packet sizes for one codec.
+ // These might need to be increased if adding a new codec to the database
+ static const int kMaxNumCodecs = 50;
+ static const int kMaxNumPacketSize = 6;
+
+ // Codec specific settings
+ //
+ // num_packet_sizes - number of allowed packet sizes.
+ // packet_sizes_samples - list of the allowed packet sizes.
+ // basic_block_samples - assigned a value different from 0 if the codec
+ // requires to be fed with a specific number of samples
+ // that can be different from packet size.
+ // channel_support - number of channels supported to encode;
+ // 1 = mono, 2 = stereo, etc.
+ struct CodecSettings {
+ int num_packet_sizes;
+ int packet_sizes_samples[kMaxNumPacketSize];
+ int basic_block_samples;
+ int channel_support;
+ };
+
+ // Gets codec information from database at the position in database given by
+ // [codec_id].
+ // Input:
+ // [codec_id] - number that specifies at what position in the database to
+ // get the information.
+ // Output:
+ // [codec_inst] - filled with information about the codec.
+ // Return:
+ // 0 if successful, otherwise -1.
+ static int Codec(int codec_id, CodecInst* codec_inst);
+
+ // Returns codec id from database, given the information received in the input
+ // [codec_inst].
+ // Input:
+ // [codec_inst] - Information about the codec for which we require the
+ // database id.
+ // Return:
+ // codec id if successful, otherwise < 0.
+ static int CodecNumber(const CodecInst& codec_inst);
+ static int CodecId(const CodecInst& codec_inst);
+ static int CodecId(const char* payload_name, int frequency, int channels);
+ static int ReceiverCodecNumber(const CodecInst& codec_inst);
+
+ // Returns the codec sampling frequency for codec with id = "codec_id" in
+ // database.
+ // TODO(tlegrand): Check if function is needed, or if we can change
+ // to access database directly.
+ // Input:
+ // [codec_id] - number that specifies at what position in the database to
+ // get the information.
+ // Return:
+ // codec sampling frequency if successful, otherwise -1.
+ static int CodecFreq(int codec_id);
+
+ // Check if the payload type is valid, meaning that it is in the valid range
+ // of 0 to 127.
+ // Input:
+ // [payload_type] - payload type.
+ static bool ValidPayloadType(int payload_type);
+
+ // Databases with information about the supported codecs
+ // database_ - stored information about all codecs: payload type, name,
+ // sampling frequency, packet size in samples, default channel
+ // support, and default rate.
+ // codec_settings_ - stored codec settings: number of allowed packet sizes,
+ // a vector with the allowed packet sizes, basic block
+ // samples, and max number of channels that are supported.
+ // neteq_decoders_ - list of supported decoders in NetEQ.
+ static const CodecInst database_[kMaxNumCodecs];
+ static const CodecSettings codec_settings_[kMaxNumCodecs];
+
+ private:
+ static const NetEqDecoder neteq_decoders_[kMaxNumCodecs];
+
+ friend class RentACodec;
+};
+
+} // namespace acm2
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_ACM_CODEC_DATABASE_H_