annotate ffmpeg/libavutil/channel_layout.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
yading@11 3 * Copyright (c) 2008 Peter Ross
yading@11 4 *
yading@11 5 * This file is part of FFmpeg.
yading@11 6 *
yading@11 7 * FFmpeg is free software; you can redistribute it and/or
yading@11 8 * modify it under the terms of the GNU Lesser General Public
yading@11 9 * License as published by the Free Software Foundation; either
yading@11 10 * version 2.1 of the License, or (at your option) any later version.
yading@11 11 *
yading@11 12 * FFmpeg is distributed in the hope that it will be useful,
yading@11 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 15 * Lesser General Public License for more details.
yading@11 16 *
yading@11 17 * You should have received a copy of the GNU Lesser General Public
yading@11 18 * License along with FFmpeg; if not, write to the Free Software
yading@11 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 20 */
yading@11 21
yading@11 22 #ifndef AVUTIL_CHANNEL_LAYOUT_H
yading@11 23 #define AVUTIL_CHANNEL_LAYOUT_H
yading@11 24
yading@11 25 #include <stdint.h>
yading@11 26
yading@11 27 /**
yading@11 28 * @file
yading@11 29 * audio channel layout utility functions
yading@11 30 */
yading@11 31
yading@11 32 /**
yading@11 33 * @addtogroup lavu_audio
yading@11 34 * @{
yading@11 35 */
yading@11 36
yading@11 37 /**
yading@11 38 * @defgroup channel_masks Audio channel masks
yading@11 39 *
yading@11 40 * A channel layout is a 64-bits integer with a bit set for every channel.
yading@11 41 * The number of bits set must be equal to the number of channels.
yading@11 42 * The value 0 means that the channel layout is not known.
yading@11 43 * @note this data structure is not powerful enough to handle channels
yading@11 44 * combinations that have the same channel multiple times, such as
yading@11 45 * dual-mono.
yading@11 46 *
yading@11 47 * @{
yading@11 48 */
yading@11 49 #define AV_CH_FRONT_LEFT 0x00000001
yading@11 50 #define AV_CH_FRONT_RIGHT 0x00000002
yading@11 51 #define AV_CH_FRONT_CENTER 0x00000004
yading@11 52 #define AV_CH_LOW_FREQUENCY 0x00000008
yading@11 53 #define AV_CH_BACK_LEFT 0x00000010
yading@11 54 #define AV_CH_BACK_RIGHT 0x00000020
yading@11 55 #define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
yading@11 56 #define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
yading@11 57 #define AV_CH_BACK_CENTER 0x00000100
yading@11 58 #define AV_CH_SIDE_LEFT 0x00000200
yading@11 59 #define AV_CH_SIDE_RIGHT 0x00000400
yading@11 60 #define AV_CH_TOP_CENTER 0x00000800
yading@11 61 #define AV_CH_TOP_FRONT_LEFT 0x00001000
yading@11 62 #define AV_CH_TOP_FRONT_CENTER 0x00002000
yading@11 63 #define AV_CH_TOP_FRONT_RIGHT 0x00004000
yading@11 64 #define AV_CH_TOP_BACK_LEFT 0x00008000
yading@11 65 #define AV_CH_TOP_BACK_CENTER 0x00010000
yading@11 66 #define AV_CH_TOP_BACK_RIGHT 0x00020000
yading@11 67 #define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
yading@11 68 #define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
yading@11 69 #define AV_CH_WIDE_LEFT 0x0000000080000000ULL
yading@11 70 #define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
yading@11 71 #define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
yading@11 72 #define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
yading@11 73 #define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL
yading@11 74
yading@11 75 /** Channel mask value used for AVCodecContext.request_channel_layout
yading@11 76 to indicate that the user requests the channel order of the decoder output
yading@11 77 to be the native codec channel order. */
yading@11 78 #define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
yading@11 79
yading@11 80 /**
yading@11 81 * @}
yading@11 82 * @defgroup channel_mask_c Audio channel convenience macros
yading@11 83 * @{
yading@11 84 * */
yading@11 85 #define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
yading@11 86 #define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
yading@11 87 #define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
yading@11 88 #define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
yading@11 89 #define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
yading@11 90 #define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
yading@11 91 #define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
yading@11 92 #define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
yading@11 93 #define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
yading@11 94 #define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
yading@11 95 #define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
yading@11 96 #define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
yading@11 97 #define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
yading@11 98 #define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
yading@11 99 #define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
yading@11 100 #define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
yading@11 101 #define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
yading@11 102 #define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
yading@11 103 #define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
yading@11 104 #define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
yading@11 105 #define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
yading@11 106 #define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
yading@11 107 #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
yading@11 108 #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
yading@11 109 #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
yading@11 110 #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
yading@11 111 #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
yading@11 112
yading@11 113 enum AVMatrixEncoding {
yading@11 114 AV_MATRIX_ENCODING_NONE,
yading@11 115 AV_MATRIX_ENCODING_DOLBY,
yading@11 116 AV_MATRIX_ENCODING_DPLII,
yading@11 117 AV_MATRIX_ENCODING_NB
yading@11 118 };
yading@11 119
yading@11 120 /**
yading@11 121 * @}
yading@11 122 */
yading@11 123
yading@11 124 /**
yading@11 125 * Return a channel layout id that matches name, or 0 if no match is found.
yading@11 126 *
yading@11 127 * name can be one or several of the following notations,
yading@11 128 * separated by '+' or '|':
yading@11 129 * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
yading@11 130 * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
yading@11 131 * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
yading@11 132 * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
yading@11 133 * - a number of channels, in decimal, optionally followed by 'c', yielding
yading@11 134 * the default channel layout for that number of channels (@see
yading@11 135 * av_get_default_channel_layout);
yading@11 136 * - a channel layout mask, in hexadecimal starting with "0x" (see the
yading@11 137 * AV_CH_* macros).
yading@11 138 *
yading@11 139 * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7"
yading@11 140 */
yading@11 141 uint64_t av_get_channel_layout(const char *name);
yading@11 142
yading@11 143 /**
yading@11 144 * Return a description of a channel layout.
yading@11 145 * If nb_channels is <= 0, it is guessed from the channel_layout.
yading@11 146 *
yading@11 147 * @param buf put here the string containing the channel layout
yading@11 148 * @param buf_size size in bytes of the buffer
yading@11 149 */
yading@11 150 void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
yading@11 151
yading@11 152 struct AVBPrint;
yading@11 153 /**
yading@11 154 * Append a description of a channel layout to a bprint buffer.
yading@11 155 */
yading@11 156 void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
yading@11 157
yading@11 158 /**
yading@11 159 * Return the number of channels in the channel layout.
yading@11 160 */
yading@11 161 int av_get_channel_layout_nb_channels(uint64_t channel_layout);
yading@11 162
yading@11 163 /**
yading@11 164 * Return default channel layout for a given number of channels.
yading@11 165 */
yading@11 166 int64_t av_get_default_channel_layout(int nb_channels);
yading@11 167
yading@11 168 /**
yading@11 169 * Get the index of a channel in channel_layout.
yading@11 170 *
yading@11 171 * @param channel a channel layout describing exactly one channel which must be
yading@11 172 * present in channel_layout.
yading@11 173 *
yading@11 174 * @return index of channel in channel_layout on success, a negative AVERROR
yading@11 175 * on error.
yading@11 176 */
yading@11 177 int av_get_channel_layout_channel_index(uint64_t channel_layout,
yading@11 178 uint64_t channel);
yading@11 179
yading@11 180 /**
yading@11 181 * Get the channel with the given index in channel_layout.
yading@11 182 */
yading@11 183 uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
yading@11 184
yading@11 185 /**
yading@11 186 * Get the name of a given channel.
yading@11 187 *
yading@11 188 * @return channel name on success, NULL on error.
yading@11 189 */
yading@11 190 const char *av_get_channel_name(uint64_t channel);
yading@11 191
yading@11 192 /**
yading@11 193 * Get the description of a given channel.
yading@11 194 *
yading@11 195 * @param channel a channel layout with a single channel
yading@11 196 * @return channel description on success, NULL on error
yading@11 197 */
yading@11 198 const char *av_get_channel_description(uint64_t channel);
yading@11 199
yading@11 200 /**
yading@11 201 * Get the value and name of a standard channel layout.
yading@11 202 *
yading@11 203 * @param[in] index index in an internal list, starting at 0
yading@11 204 * @param[out] layout channel layout mask
yading@11 205 * @param[out] name name of the layout
yading@11 206 * @return 0 if the layout exists,
yading@11 207 * <0 if index is beyond the limits
yading@11 208 */
yading@11 209 int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
yading@11 210 const char **name);
yading@11 211
yading@11 212 /**
yading@11 213 * @}
yading@11 214 */
yading@11 215
yading@11 216 #endif /* AVUTIL_CHANNEL_LAYOUT_H */