123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- * Copyright (c) 2019 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 API_AUDIO_CHANNEL_LAYOUT_H_
- #define API_AUDIO_CHANNEL_LAYOUT_H_
- namespace webrtc {
- // This file is derived from Chromium's base/channel_layout.h.
- // Enumerates the various representations of the ordering of audio channels.
- // Logged to UMA, so never reuse a value, always add new/greater ones!
- enum ChannelLayout {
- CHANNEL_LAYOUT_NONE = 0,
- CHANNEL_LAYOUT_UNSUPPORTED = 1,
- // Front C
- CHANNEL_LAYOUT_MONO = 2,
- // Front L, Front R
- CHANNEL_LAYOUT_STEREO = 3,
- // Front L, Front R, Back C
- CHANNEL_LAYOUT_2_1 = 4,
- // Front L, Front R, Front C
- CHANNEL_LAYOUT_SURROUND = 5,
- // Front L, Front R, Front C, Back C
- CHANNEL_LAYOUT_4_0 = 6,
- // Front L, Front R, Side L, Side R
- CHANNEL_LAYOUT_2_2 = 7,
- // Front L, Front R, Back L, Back R
- CHANNEL_LAYOUT_QUAD = 8,
- // Front L, Front R, Front C, Side L, Side R
- CHANNEL_LAYOUT_5_0 = 9,
- // Front L, Front R, Front C, LFE, Side L, Side R
- CHANNEL_LAYOUT_5_1 = 10,
- // Front L, Front R, Front C, Back L, Back R
- CHANNEL_LAYOUT_5_0_BACK = 11,
- // Front L, Front R, Front C, LFE, Back L, Back R
- CHANNEL_LAYOUT_5_1_BACK = 12,
- // Front L, Front R, Front C, Side L, Side R, Back L, Back R
- CHANNEL_LAYOUT_7_0 = 13,
- // Front L, Front R, Front C, LFE, Side L, Side R, Back L, Back R
- CHANNEL_LAYOUT_7_1 = 14,
- // Front L, Front R, Front C, LFE, Side L, Side R, Front LofC, Front RofC
- CHANNEL_LAYOUT_7_1_WIDE = 15,
- // Stereo L, Stereo R
- CHANNEL_LAYOUT_STEREO_DOWNMIX = 16,
- // Stereo L, Stereo R, LFE
- CHANNEL_LAYOUT_2POINT1 = 17,
- // Stereo L, Stereo R, Front C, LFE
- CHANNEL_LAYOUT_3_1 = 18,
- // Stereo L, Stereo R, Front C, Rear C, LFE
- CHANNEL_LAYOUT_4_1 = 19,
- // Stereo L, Stereo R, Front C, Side L, Side R, Back C
- CHANNEL_LAYOUT_6_0 = 20,
- // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC
- CHANNEL_LAYOUT_6_0_FRONT = 21,
- // Stereo L, Stereo R, Front C, Rear L, Rear R, Rear C
- CHANNEL_LAYOUT_HEXAGONAL = 22,
- // Stereo L, Stereo R, Front C, LFE, Side L, Side R, Rear Center
- CHANNEL_LAYOUT_6_1 = 23,
- // Stereo L, Stereo R, Front C, LFE, Back L, Back R, Rear Center
- CHANNEL_LAYOUT_6_1_BACK = 24,
- // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC, LFE
- CHANNEL_LAYOUT_6_1_FRONT = 25,
- // Front L, Front R, Front C, Side L, Side R, Front LofC, Front RofC
- CHANNEL_LAYOUT_7_0_FRONT = 26,
- // Front L, Front R, Front C, LFE, Back L, Back R, Front LofC, Front RofC
- CHANNEL_LAYOUT_7_1_WIDE_BACK = 27,
- // Front L, Front R, Front C, Side L, Side R, Rear L, Back R, Back C.
- CHANNEL_LAYOUT_OCTAGONAL = 28,
- // Channels are not explicitly mapped to speakers.
- CHANNEL_LAYOUT_DISCRETE = 29,
- // Front L, Front R, Front C. Front C contains the keyboard mic audio. This
- // layout is only intended for input for WebRTC. The Front C channel
- // is stripped away in the WebRTC audio input pipeline and never seen outside
- // of that.
- CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC = 30,
- // Front L, Front R, Side L, Side R, LFE
- CHANNEL_LAYOUT_4_1_QUAD_SIDE = 31,
- // Actual channel layout is specified in the bitstream and the actual channel
- // count is unknown at Chromium media pipeline level (useful for audio
- // pass-through mode).
- CHANNEL_LAYOUT_BITSTREAM = 32,
- // Max value, must always equal the largest entry ever logged.
- CHANNEL_LAYOUT_MAX = CHANNEL_LAYOUT_BITSTREAM
- };
- // Note: Do not reorder or reassign these values; other code depends on their
- // ordering to operate correctly. E.g., CoreAudio channel layout computations.
- enum Channels {
- LEFT = 0,
- RIGHT,
- CENTER,
- LFE,
- BACK_LEFT,
- BACK_RIGHT,
- LEFT_OF_CENTER,
- RIGHT_OF_CENTER,
- BACK_CENTER,
- SIDE_LEFT,
- SIDE_RIGHT,
- CHANNELS_MAX =
- SIDE_RIGHT, // Must always equal the largest value ever logged.
- };
- // The maximum number of concurrently active channels for all possible layouts.
- // ChannelLayoutToChannelCount() will never return a value higher than this.
- constexpr int kMaxConcurrentChannels = 8;
- // Returns the expected channel position in an interleaved stream. Values of -1
- // mean the channel at that index is not used for that layout. Values range
- // from 0 to ChannelLayoutToChannelCount(layout) - 1.
- int ChannelOrder(ChannelLayout layout, Channels channel);
- // Returns the number of channels in a given ChannelLayout.
- int ChannelLayoutToChannelCount(ChannelLayout layout);
- // Given the number of channels, return the best layout,
- // or return CHANNEL_LAYOUT_UNSUPPORTED if there is no good match.
- ChannelLayout GuessChannelLayout(int channels);
- // Returns a string representation of the channel layout.
- const char* ChannelLayoutToString(ChannelLayout layout);
- } // namespace webrtc
- #endif // API_AUDIO_CHANNEL_LAYOUT_H_
|