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