Index: media/filters/opus_constants.h |
diff --git a/media/filters/opus_constants.h b/media/filters/opus_constants.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f5ccad0c1780e703a1f532e0754f2d73bba35b63 |
--- /dev/null |
+++ b/media/filters/opus_constants.h |
@@ -0,0 +1,112 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MEDIA_FILTERS_OPUS_CONSTANTS_H_ |
+#define MEDIA_FILTERS_OPUS_CONSTANTS_H_ |
+ |
+namespace media { |
+ |
+// The Opus specification is part of IETF RFC 6716: |
+// http://tools.ietf.org/html/rfc6716 |
+ |
+// Opus Extra Data contents: |
+// - "OpusHead" magic signature (64 bits) |
+// - version number (8 bits) |
+// - Channels C (8 bits) |
+// - Pre-skip (16 bits) |
+// - Sampling rate (32 bits) |
+// - Gain in dB (16 bits, S7.8) |
+// - Mapping (8 bits, 0=single stream (mono/stereo) 1=Vorbis mapping, |
+// 2..254: reserved, 255: multistream with no mapping) |
+// |
+// - if (mapping != 0) |
+// - N = total number of streams (8 bits) |
+// - M = number of paired streams (8 bits) |
+// - C times channel origin |
+// - if (C<2*M) |
+// - stream = byte/2 |
+// - if (byte&0x1 == 0) |
+// - left |
+// else |
+// - right |
+// - else |
+// - stream = byte-M |
+ |
+enum { |
+ // Default audio output channel layout. Used to initialize |stream_map| in |
+ // OpusExtraData, and passed to opus_multistream_decoder_create() when the |
+ // extra data does not contain mapping information. The values are valid only |
+ // for mono and stereo output: Opus streams with more than 2 channels require |
+ // a stream map. |
+ OPUS_MAX_CHANNELS_WITH_DEFAULT_LAYOUT = 2, |
+ |
+ // Opus uses Vorbis channel mapping, and Vorbis channel mapping specifies |
+ // mappings for up to 8 channels. This information is part of the Vorbis I |
+ // Specification: |
+ // http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html |
+ OPUS_MAX_VORBIS_CHANNELS = 8, |
+ |
+ // Size of the Opus extra data excluding optional mapping information. |
+ OPUS_EXTRADATA_SIZE = 19, |
+ // Offset for magic signature "OpusHead" |
+ OPUS_EXTRADATA_LABEL_OFFSET = 0, |
+ // Offset to the Opus version number |
+ OPUS_EXTRADATA_VERSION_OFFSET = 8, |
+ // Offset to the channel count byte in the Opus extra data |
+ OPUS_EXTRADATA_CHANNELS_OFFSET = 9, |
+ // Offset to the pre-skip value in the Opus extra data |
+ OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET = 10, |
+ // Offset to the sampling rate value in the Opus extra data |
+ OPUS_EXTRADATA_SAMPLE_RATE_OFFSET = 12, |
+ // Offset to the gain value in the Opus extra data |
+ OPUS_EXTRADATA_GAIN_OFFSET = 16, |
+ // Offset to the channel mapping byte in the Opus extra data |
+ OPUS_EXTRADATA_CHANNEL_MAPPING_OFFSET = 18, |
+ |
+ // Extra Data contains a stream map, beyond the always present |
+ // |OPUS_EXTRADATA_SIZE| bytes of data. The mapping data contains stream |
+ // count, coupling information, and per channel mapping values: |
+ // - Byte 0: Number of streams. |
+ // - Byte 1: Number coupled. |
+ // - Byte 2: Starting at byte 2 are |extra_data->channels| uint8 mapping |
+ // values. |
+ OPUS_EXTRADATA_NUM_STREAMS_OFFSET = OPUS_EXTRADATA_SIZE, |
+ OPUS_EXTRADATA_NUM_COUPLED_OFFSET = OPUS_EXTRADATA_NUM_STREAMS_OFFSET + 1, |
+ OPUS_EXTRADATA_STREAM_MAP_OFFSET = OPUS_EXTRADATA_NUM_STREAMS_OFFSET + 2, |
+}; |
+ |
+// Vorbis channel ordering for streams with >= 2 channels: |
+// 2 Channels |
+// L, R |
+// 3 Channels |
+// L, Center, R |
+// 4 Channels |
+// Front L, Front R, Back L, Back R |
+// 5 Channels |
+// Front L, Center, Front R, Back L, Back R |
+// 6 Channels (5.1) |
+// Front L, Center, Front R, Back L, Back R, LFE |
+// 7 channels (6.1) |
+// Front L, Front Center, Front R, Side L, Side R, Back Center, LFE |
+// 8 Channels (7.1) |
+// Front L, Center, Front R, Side L, Side R, Back L, Back R, LFE |
+// |
+// Channel ordering information is taken from section 4.3.9 of the Vorbis I |
+// Specification: |
+// http://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9 |
+extern const uint8_t |
+ kDefaultOpusChannelLayout[OPUS_MAX_CHANNELS_WITH_DEFAULT_LAYOUT]; |
+ |
+// These are the FFmpeg channel layouts expressed using the position of each |
+// channel in the output stream from libopus. |
+extern const uint8_t kFFmpegChannelDecodingLayouts[OPUS_MAX_VORBIS_CHANNELS] |
+ [OPUS_MAX_VORBIS_CHANNELS]; |
+ |
+// Opus internal to Vorbis channel order mapping written in the header. |
+extern const uint8_t |
+ kOpusVorbisChannelMap[OPUS_MAX_VORBIS_CHANNELS][OPUS_MAX_VORBIS_CHANNELS]; |
+ |
+} // namespace media |
+ |
+#endif // MEDIA_FILTERS_OPUS_CONSTANTS_H_ |