FFmpeg
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 #include <stdlib.h>
27 
28 #include "version.h"
29 #include "attributes.h"
30 
31 /**
32  * @file
33  * @ingroup lavu_audio_channels
34  * Public libavutil channel layout APIs header.
35  */
36 
37 
38 /**
39  * @defgroup lavu_audio_channels Audio channels
40  * @ingroup lavu_audio
41  *
42  * Audio channel layout utility functions
43  *
44  * @{
45  */
46 
47 enum AVChannel {
48  ///< Invalid channel index
68  /** Stereo downmix. */
70  /** See above. */
82 
83  /** Channel is empty can be safely skipped. */
84  AV_CHAN_UNUSED = 0x200,
85 
86  /** Channel contains data, but its position is unknown. */
87  AV_CHAN_UNKNOWN = 0x300,
88 
89  /**
90  * Range of channels between AV_CHAN_AMBISONIC_BASE and
91  * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system.
92  *
93  * Given a channel id `<i>` between AV_CHAN_AMBISONIC_BASE and
94  * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `<n>` is
95  * `<n> = <i> - AV_CHAN_AMBISONIC_BASE`.
96  *
97  * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel
98  * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels
99  * implicitly by their position in the stream.
100  */
102  // leave space for 1024 ids, which correspond to maximum order-32 harmonics,
103  // which should be enough for the foreseeable use cases
105 };
106 
108  /**
109  * Only the channel count is specified, without any further information
110  * about the channel order.
111  */
113  /**
114  * The native channel order, i.e. the channels are in the same order in
115  * which they are defined in the AVChannel enum. This supports up to 63
116  * different channels.
117  */
119  /**
120  * The channel order does not correspond to any other predefined order and
121  * is stored as an explicit map. For example, this could be used to support
122  * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE)
123  * channels at arbitrary positions.
124  */
126  /**
127  * The audio is represented as the decomposition of the sound field into
128  * spherical harmonics. Each channel corresponds to a single expansion
129  * component. Channels are ordered according to ACN (Ambisonic Channel
130  * Number).
131  *
132  * The channel with the index n in the stream contains the spherical
133  * harmonic of degree l and order m given by
134  * @code{.unparsed}
135  * l = floor(sqrt(n)),
136  * m = n - l * (l + 1).
137  * @endcode
138  *
139  * Conversely given a spherical harmonic of degree l and order m, the
140  * corresponding channel index n is given by
141  * @code{.unparsed}
142  * n = l * (l + 1) + m.
143  * @endcode
144  *
145  * Normalization is assumed to be SN3D (Schmidt Semi-Normalization)
146  * as defined in AmbiX format $ 2.1.
147  */
149 };
150 
151 
152 /**
153  * @defgroup channel_masks Audio channel masks
154  *
155  * A channel layout is a 64-bits integer with a bit set for every channel.
156  * The number of bits set must be equal to the number of channels.
157  * The value 0 means that the channel layout is not known.
158  * @note this data structure is not powerful enough to handle channels
159  * combinations that have the same channel multiple times, such as
160  * dual-mono.
161  *
162  * @{
163  */
164 #define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT )
165 #define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT )
166 #define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER )
167 #define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY )
168 #define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT )
169 #define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT )
170 #define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER )
171 #define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER)
172 #define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER )
173 #define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT )
174 #define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT )
175 #define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER )
176 #define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT )
177 #define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER )
178 #define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT )
179 #define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT )
180 #define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER )
181 #define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT )
182 #define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT )
183 #define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT )
184 #define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT )
185 #define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT )
186 #define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT )
187 #define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT)
188 #define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2 )
189 #define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT )
190 #define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT )
191 #define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER )
192 #define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT )
193 #define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT )
194 
195 #if FF_API_OLD_CHANNEL_LAYOUT
196 /** Channel mask value used for AVCodecContext.request_channel_layout
197  to indicate that the user requests the channel order of the decoder output
198  to be the native codec channel order.
199  @deprecated channel order is now indicated in a special field in
200  AVChannelLayout
201  */
202 #define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
203 #endif
204 
205 /**
206  * @}
207  * @defgroup channel_mask_c Audio channel layouts
208  * @{
209  * */
210 #define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
211 #define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
212 #define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
213 #define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
214 #define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
215 #define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
216 #define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
217 #define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
218 #define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
219 #define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
220 #define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
221 #define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
222 #define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
223 #define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
224 #define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
225 #define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
226 #define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
227 #define AV_CH_LAYOUT_3POINT1POINT2 (AV_CH_LAYOUT_3POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
228 #define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
229 #define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
230 #define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
231 #define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
232 #define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
233 #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
234 #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
235 #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
236 #define AV_CH_LAYOUT_5POINT1POINT2_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
237 #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
238 #define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
239 #define AV_CH_LAYOUT_5POINT1POINT4_BACK (AV_CH_LAYOUT_5POINT1POINT2_BACK|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
240 #define AV_CH_LAYOUT_7POINT1POINT2 (AV_CH_LAYOUT_7POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
241 #define AV_CH_LAYOUT_7POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
242 #define AV_CH_LAYOUT_7POINT2POINT3 (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_CENTER|AV_CH_LOW_FREQUENCY_2)
243 #define AV_CH_LAYOUT_9POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT4_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
244 #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
245 #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
246 #define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_7POINT1POINT4_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT)
247 
248 #define AV_CH_LAYOUT_7POINT1_TOP_BACK AV_CH_LAYOUT_5POINT1POINT2_BACK
249 
259 };
260 
261 /**
262  * @}
263  */
264 
265 /**
266  * An AVChannelCustom defines a single channel within a custom order layout
267  *
268  * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the
269  * public ABI.
270  *
271  * No new fields may be added to it without a major version bump.
272  */
273 typedef struct AVChannelCustom {
274  enum AVChannel id;
275  char name[16];
276  void *opaque;
278 
279 /**
280  * An AVChannelLayout holds information about the channel layout of audio data.
281  *
282  * A channel layout here is defined as a set of channels ordered in a specific
283  * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an
284  * AVChannelLayout carries only the channel count).
285  * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by
286  * ignoring everything but the channel count, as long as av_channel_layout_check()
287  * considers they are valid.
288  *
289  * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the
290  * public ABI and may be used by the caller. E.g. it may be allocated on stack
291  * or embedded in caller-defined structs.
292  *
293  * AVChannelLayout can be initialized as follows:
294  * - default initialization with {0}, followed by setting all used fields
295  * correctly;
296  * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers;
297  * - with a constructor function, such as av_channel_layout_default(),
298  * av_channel_layout_from_mask() or av_channel_layout_from_string().
299  *
300  * The channel layout must be unitialized with av_channel_layout_uninit()
301  *
302  * Copying an AVChannelLayout via assigning is forbidden,
303  * av_channel_layout_copy() must be used instead (and its return value should
304  * be checked)
305  *
306  * No new fields may be added to it without a major version bump, except for
307  * new elements of the union fitting in sizeof(uint64_t).
308  */
309 typedef struct AVChannelLayout {
310  /**
311  * Channel order used in this layout.
312  * This is a mandatory field.
313  */
315 
316  /**
317  * Number of channels in this layout. Mandatory field.
318  */
320 
321  /**
322  * Details about which channels are present in this layout.
323  * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be
324  * used.
325  */
326  union {
327  /**
328  * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used
329  * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels.
330  * It is a bitmask, where the position of each set bit means that the
331  * AVChannel with the corresponding value is present.
332  *
333  * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO
334  * is present in the layout. Otherwise it is not present.
335  *
336  * @note when a channel layout using a bitmask is constructed or
337  * modified manually (i.e. not using any of the av_channel_layout_*
338  * functions), the code doing it must ensure that the number of set bits
339  * is equal to nb_channels.
340  */
341  uint64_t mask;
342  /**
343  * This member must be used when the channel order is
344  * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each
345  * element signalling the presence of the AVChannel with the
346  * corresponding value in map[i].id.
347  *
348  * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the
349  * i-th channel in the audio data.
350  *
351  * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and
352  * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic
353  * component with ACN index (as defined above)
354  * n = map[i].id - AV_CHAN_AMBISONIC_BASE.
355  *
356  * map[i].name may be filled with a 0-terminated string, in which case
357  * it will be used for the purpose of identifying the channel with the
358  * convenience functions below. Otherise it must be zeroed.
359  */
361  } u;
362 
363  /**
364  * For some private data of the user.
365  */
366  void *opaque;
368 
369 /**
370  * Macro to define native channel layouts
371  *
372  * @note This doesn't use designated initializers for compatibility with C++ 17 and older.
373  */
374 #define AV_CHANNEL_LAYOUT_MASK(nb, m) \
375  { /* .order */ AV_CHANNEL_ORDER_NATIVE, \
376  /* .nb_channels */ (nb), \
377  /* .u.mask */ { m }, \
378  /* .opaque */ NULL }
379 
380 /**
381  * @name Common pre-defined channel layouts
382  * @{
383  */
384 #define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO)
385 #define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO)
386 #define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1)
387 #define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1)
388 #define AV_CHANNEL_LAYOUT_SURROUND AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND)
389 #define AV_CHANNEL_LAYOUT_3POINT1 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1)
390 #define AV_CHANNEL_LAYOUT_4POINT0 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0)
391 #define AV_CHANNEL_LAYOUT_4POINT1 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1)
392 #define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2)
393 #define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD)
394 #define AV_CHANNEL_LAYOUT_5POINT0 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0)
395 #define AV_CHANNEL_LAYOUT_5POINT1 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1)
396 #define AV_CHANNEL_LAYOUT_5POINT0_BACK AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK)
397 #define AV_CHANNEL_LAYOUT_5POINT1_BACK AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK)
398 #define AV_CHANNEL_LAYOUT_6POINT0 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0)
399 #define AV_CHANNEL_LAYOUT_6POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT)
400 #define AV_CHANNEL_LAYOUT_3POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_3POINT1POINT2)
401 #define AV_CHANNEL_LAYOUT_HEXAGONAL AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL)
402 #define AV_CHANNEL_LAYOUT_6POINT1 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1)
403 #define AV_CHANNEL_LAYOUT_6POINT1_BACK AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK)
404 #define AV_CHANNEL_LAYOUT_6POINT1_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT)
405 #define AV_CHANNEL_LAYOUT_7POINT0 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0)
406 #define AV_CHANNEL_LAYOUT_7POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT)
407 #define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1)
408 #define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE)
409 #define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK)
410 #define AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_5POINT1POINT2_BACK)
411 #define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL)
412 #define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE)
413 #define AV_CHANNEL_LAYOUT_5POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(10, AV_CH_LAYOUT_5POINT1POINT4_BACK)
414 #define AV_CHANNEL_LAYOUT_7POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(10, AV_CH_LAYOUT_7POINT1POINT2)
415 #define AV_CHANNEL_LAYOUT_7POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT1POINT4_BACK)
416 #define AV_CHANNEL_LAYOUT_7POINT2POINT3 AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT2POINT3)
417 #define AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(14, AV_CH_LAYOUT_9POINT1POINT4_BACK)
418 #define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL)
419 #define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX)
420 #define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2)
421 
422 #define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK
423 
424 #define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \
425  { /* .order */ AV_CHANNEL_ORDER_AMBISONIC, \
426  /* .nb_channels */ 4, \
427  /* .u.mask */ { 0 }, \
428  /* .opaque */ NULL }
429 /** @} */
430 
431 struct AVBPrint;
432 
433 #if FF_API_OLD_CHANNEL_LAYOUT
434 /**
435  * @name Deprecated Functions
436  * @{
437  */
438 
439 /**
440  * Return a channel layout id that matches name, or 0 if no match is found.
441  *
442  * name can be one or several of the following notations,
443  * separated by '+' or '|':
444  * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
445  * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
446  * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
447  * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
448  * - a number of channels, in decimal, followed by 'c', yielding
449  * the default channel layout for that number of channels (@see
450  * av_get_default_channel_layout);
451  * - a channel layout mask, in hexadecimal starting with "0x" (see the
452  * AV_CH_* macros).
453  *
454  * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7"
455  *
456  * @deprecated use av_channel_layout_from_string()
457  */
459 uint64_t av_get_channel_layout(const char *name);
460 
461 /**
462  * Return a channel layout and the number of channels based on the specified name.
463  *
464  * This function is similar to (@see av_get_channel_layout), but can also parse
465  * unknown channel layout specifications.
466  *
467  * @param[in] name channel layout specification string
468  * @param[out] channel_layout parsed channel layout (0 if unknown)
469  * @param[out] nb_channels number of channels
470  *
471  * @return 0 on success, AVERROR(EINVAL) if the parsing fails.
472  * @deprecated use av_channel_layout_from_string()
473  */
475 int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels);
476 
477 /**
478  * Return a description of a channel layout.
479  * If nb_channels is <= 0, it is guessed from the channel_layout.
480  *
481  * @param buf put here the string containing the channel layout
482  * @param buf_size size in bytes of the buffer
483  * @param nb_channels number of channels
484  * @param channel_layout channel layout bitset
485  * @deprecated use av_channel_layout_describe()
486  */
488 void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
489 
490 /**
491  * Append a description of a channel layout to a bprint buffer.
492  * @deprecated use av_channel_layout_describe()
493  */
495 void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
496 
497 /**
498  * Return the number of channels in the channel layout.
499  * @deprecated use AVChannelLayout.nb_channels
500  */
502 int av_get_channel_layout_nb_channels(uint64_t channel_layout);
503 
504 /**
505  * Return default channel layout for a given number of channels.
506  *
507  * @deprecated use av_channel_layout_default()
508  */
510 int64_t av_get_default_channel_layout(int nb_channels);
511 
512 /**
513  * Get the index of a channel in channel_layout.
514  *
515  * @param channel_layout channel layout bitset
516  * @param channel a channel layout describing exactly one channel which must be
517  * present in channel_layout.
518  *
519  * @return index of channel in channel_layout on success, a negative AVERROR
520  * on error.
521  *
522  * @deprecated use av_channel_layout_index_from_channel()
523  */
525 int av_get_channel_layout_channel_index(uint64_t channel_layout,
526  uint64_t channel);
527 
528 /**
529  * Get the channel with the given index in channel_layout.
530  * @deprecated use av_channel_layout_channel_from_index()
531  */
533 uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
534 
535 /**
536  * Get the name of a given channel.
537  *
538  * @return channel name on success, NULL on error.
539  *
540  * @deprecated use av_channel_name()
541  */
543 const char *av_get_channel_name(uint64_t channel);
544 
545 /**
546  * Get the description of a given channel.
547  *
548  * @param channel a channel layout with a single channel
549  * @return channel description on success, NULL on error
550  * @deprecated use av_channel_description()
551  */
553 const char *av_get_channel_description(uint64_t channel);
554 
555 /**
556  * Get the value and name of a standard channel layout.
557  *
558  * @param[in] index index in an internal list, starting at 0
559  * @param[out] layout channel layout mask
560  * @param[out] name name of the layout
561  * @return 0 if the layout exists,
562  * <0 if index is beyond the limits
563  * @deprecated use av_channel_layout_standard()
564  */
566 int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
567  const char **name);
568 /**
569  * @}
570  */
571 #endif
572 
573 /**
574  * Get a human readable string in an abbreviated form describing a given channel.
575  * This is the inverse function of @ref av_channel_from_string().
576  *
577  * @param buf pre-allocated buffer where to put the generated string
578  * @param buf_size size in bytes of the buffer.
579  * @param channel the AVChannel whose name to get
580  * @return amount of bytes needed to hold the output string, or a negative AVERROR
581  * on failure. If the returned value is bigger than buf_size, then the
582  * string was truncated.
583  */
584 int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel);
585 
586 /**
587  * bprint variant of av_channel_name().
588  *
589  * @note the string will be appended to the bprint buffer.
590  */
591 void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id);
592 
593 /**
594  * Get a human readable string describing a given channel.
595  *
596  * @param buf pre-allocated buffer where to put the generated string
597  * @param buf_size size in bytes of the buffer.
598  * @param channel the AVChannel whose description to get
599  * @return amount of bytes needed to hold the output string, or a negative AVERROR
600  * on failure. If the returned value is bigger than buf_size, then the
601  * string was truncated.
602  */
603 int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel);
604 
605 /**
606  * bprint variant of av_channel_description().
607  *
608  * @note the string will be appended to the bprint buffer.
609  */
610 void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id);
611 
612 /**
613  * This is the inverse function of @ref av_channel_name().
614  *
615  * @return the channel with the given name
616  * AV_CHAN_NONE when name does not identify a known channel
617  */
618 enum AVChannel av_channel_from_string(const char *name);
619 
620 /**
621  * Initialize a native channel layout from a bitmask indicating which channels
622  * are present.
623  *
624  * @param channel_layout the layout structure to be initialized
625  * @param mask bitmask describing the channel layout
626  *
627  * @return 0 on success
628  * AVERROR(EINVAL) for invalid mask values
629  */
630 int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask);
631 
632 /**
633  * Initialize a channel layout from a given string description.
634  * The input string can be represented by:
635  * - the formal channel layout name (returned by av_channel_layout_describe())
636  * - single or multiple channel names (returned by av_channel_name(), eg. "FL",
637  * or concatenated with "+", each optionally containing a custom name after
638  * a "@", eg. "FL@Left+FR@Right+LFE")
639  * - a decimal or hexadecimal value of a native channel layout (eg. "4" or "0x4")
640  * - the number of channels with default layout (eg. "4c")
641  * - the number of unordered channels (eg. "4C" or "4 channels")
642  * - the ambisonic order followed by optional non-diegetic channels (eg.
643  * "ambisonic 2+stereo")
644  *
645  * @param channel_layout input channel layout
646  * @param str string describing the channel layout
647  * @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise
648  */
650  const char *str);
651 
652 /**
653  * Get the default channel layout for a given number of channels.
654  *
655  * @param ch_layout the layout structure to be initialized
656  * @param nb_channels number of channels
657  */
658 void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels);
659 
660 /**
661  * Iterate over all standard channel layouts.
662  *
663  * @param opaque a pointer where libavutil will store the iteration state. Must
664  * point to NULL to start the iteration.
665  *
666  * @return the standard channel layout or NULL when the iteration is
667  * finished
668  */
669 const AVChannelLayout *av_channel_layout_standard(void **opaque);
670 
671 /**
672  * Free any allocated data in the channel layout and reset the channel
673  * count to 0.
674  *
675  * @param channel_layout the layout structure to be uninitialized
676  */
677 void av_channel_layout_uninit(AVChannelLayout *channel_layout);
678 
679 /**
680  * Make a copy of a channel layout. This differs from just assigning src to dst
681  * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM.
682  *
683  * @note the destination channel_layout will be always uninitialized before copy.
684  *
685  * @param dst destination channel layout
686  * @param src source channel layout
687  * @return 0 on success, a negative AVERROR on error.
688  */
690 
691 /**
692  * Get a human-readable string describing the channel layout properties.
693  * The string will be in the same format that is accepted by
694  * @ref av_channel_layout_from_string(), allowing to rebuild the same
695  * channel layout, except for opaque pointers.
696  *
697  * @param channel_layout channel layout to be described
698  * @param buf pre-allocated buffer where to put the generated string
699  * @param buf_size size in bytes of the buffer.
700  * @return amount of bytes needed to hold the output string, or a negative AVERROR
701  * on failure. If the returned value is bigger than buf_size, then the
702  * string was truncated.
703  */
704 int av_channel_layout_describe(const AVChannelLayout *channel_layout,
705  char *buf, size_t buf_size);
706 
707 /**
708  * bprint variant of av_channel_layout_describe().
709  *
710  * @note the string will be appended to the bprint buffer.
711  * @return 0 on success, or a negative AVERROR value on failure.
712  */
713 int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout,
714  struct AVBPrint *bp);
715 
716 /**
717  * Get the channel with the given index in a channel layout.
718  *
719  * @param channel_layout input channel layout
720  * @param idx index of the channel
721  * @return channel with the index idx in channel_layout on success or
722  * AV_CHAN_NONE on failure (if idx is not valid or the channel order is
723  * unspecified)
724  */
725 enum AVChannel
726 av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx);
727 
728 /**
729  * Get the index of a given channel in a channel layout. In case multiple
730  * channels are found, only the first match will be returned.
731  *
732  * @param channel_layout input channel layout
733  * @param channel the channel whose index to obtain
734  * @return index of channel in channel_layout on success or a negative number if
735  * channel is not present in channel_layout.
736  */
737 int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout,
738  enum AVChannel channel);
739 
740 /**
741  * Get the index in a channel layout of a channel described by the given string.
742  * In case multiple channels are found, only the first match will be returned.
743  *
744  * This function accepts channel names in the same format as
745  * @ref av_channel_from_string().
746  *
747  * @param channel_layout input channel layout
748  * @param name string describing the channel whose index to obtain
749  * @return a channel index described by the given string, or a negative AVERROR
750  * value.
751  */
752 int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout,
753  const char *name);
754 
755 /**
756  * Get a channel described by the given string.
757  *
758  * This function accepts channel names in the same format as
759  * @ref av_channel_from_string().
760  *
761  * @param channel_layout input channel layout
762  * @param name string describing the channel to obtain
763  * @return a channel described by the given string in channel_layout on success
764  * or AV_CHAN_NONE on failure (if the string is not valid or the channel
765  * order is unspecified)
766  */
767 enum AVChannel
769  const char *name);
770 
771 /**
772  * Find out what channels from a given set are present in a channel layout,
773  * without regard for their positions.
774  *
775  * @param channel_layout input channel layout
776  * @param mask a combination of AV_CH_* representing a set of channels
777  * @return a bitfield representing all the channels from mask that are present
778  * in channel_layout
779  */
780 uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout,
781  uint64_t mask);
782 
783 /**
784  * Check whether a channel layout is valid, i.e. can possibly describe audio
785  * data.
786  *
787  * @param channel_layout input channel layout
788  * @return 1 if channel_layout is valid, 0 otherwise.
789  */
790 int av_channel_layout_check(const AVChannelLayout *channel_layout);
791 
792 /**
793  * Check whether two channel layouts are semantically the same, i.e. the same
794  * channels are present on the same positions in both.
795  *
796  * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is
797  * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC,
798  * they are considered equal iff the channel counts are the same in both.
799  *
800  * @param chl input channel layout
801  * @param chl1 input channel layout
802  * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative
803  * AVERROR code if one or both are invalid.
804  */
805 int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1);
806 
807 /**
808  * @}
809  */
810 
811 #endif /* AVUTIL_CHANNEL_LAYOUT_H */
av_get_channel_layout_string
attribute_deprecated 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.
Definition: channel_layout.c:321
AVChannelOrder
AVChannelOrder
Definition: channel_layout.h:107
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
AV_CHAN_WIDE_LEFT
@ AV_CHAN_WIDE_LEFT
Definition: channel_layout.h:72
av_get_channel_name
const attribute_deprecated char * av_get_channel_name(uint64_t channel)
Get the name of a given channel.
Definition: channel_layout.c:353
AVChannelLayout::map
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
Definition: channel_layout.h:360
av_channel_layout_channel_from_index
enum AVChannel av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx)
Get the channel with the given index in a channel layout.
Definition: channel_layout.c:808
av_get_standard_channel_layout
attribute_deprecated int av_get_standard_channel_layout(unsigned index, uint64_t *layout, const char **name)
Get the value and name of a standard channel layout.
Definition: channel_layout.c:389
AVChannelLayout::order
enum AVChannelOrder order
Channel order used in this layout.
Definition: channel_layout.h:314
AVChannelLayout::mask
uint64_t mask
This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used for AV_CHANNEL_ORDER_AMBISONIC ...
Definition: channel_layout.h:341
av_get_channel_layout_nb_channels
attribute_deprecated int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
Definition: channel_layout.c:330
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:319
av_channel_layout_describe_bprint
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, struct AVBPrint *bp)
bprint variant of av_channel_layout_describe().
Definition: channel_layout.c:742
av_channel_layout_extract_channel
attribute_deprecated uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index)
Get the channel with the given index in channel_layout.
Definition: channel_layout.c:375
AV_CHAN_SURROUND_DIRECT_LEFT
@ AV_CHAN_SURROUND_DIRECT_LEFT
Definition: channel_layout.h:74
av_channel_description_bprint
void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id)
bprint variant of av_channel_description().
Definition: channel_layout.c:116
AV_CHAN_TOP_BACK_RIGHT
@ AV_CHAN_TOP_BACK_RIGHT
Definition: channel_layout.h:67
av_get_channel_layout_channel_index
attribute_deprecated int av_get_channel_layout_channel_index(uint64_t channel_layout, uint64_t channel)
Get the index of a channel in channel_layout.
Definition: channel_layout.c:343
AV_CHAN_STEREO_RIGHT
@ AV_CHAN_STEREO_RIGHT
See above.
Definition: channel_layout.h:71
AV_CHAN_BOTTOM_FRONT_LEFT
@ AV_CHAN_BOTTOM_FRONT_LEFT
Definition: channel_layout.h:80
AV_MATRIX_ENCODING_DOLBY
@ AV_MATRIX_ENCODING_DOLBY
Definition: channel_layout.h:252
av_get_channel_description
const attribute_deprecated char * av_get_channel_description(uint64_t channel)
Get the description of a given channel.
Definition: channel_layout.c:364
mask
static const uint16_t mask[17]
Definition: lzw.c:38
av_channel_layout_describe
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
Definition: channel_layout.c:788
AVChannelCustom
An AVChannelCustom defines a single channel within a custom order layout.
Definition: channel_layout.h:273
AV_MATRIX_ENCODING_NB
@ AV_MATRIX_ENCODING_NB
Definition: channel_layout.h:258
AV_CHAN_UNKNOWN
@ AV_CHAN_UNKNOWN
Channel contains data, but its position is unknown.
Definition: channel_layout.h:87
AV_CHANNEL_ORDER_UNSPEC
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
Definition: channel_layout.h:112
av_channel_layout_from_mask
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
Definition: channel_layout.c:401
AV_CHAN_SIDE_RIGHT
@ AV_CHAN_SIDE_RIGHT
Definition: channel_layout.h:60
av_channel_layout_index_from_string
int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, const char *name)
Get the index in a channel layout of a channel described by the given string.
Definition: channel_layout.c:882
av_channel_layout_standard
const AVChannelLayout * av_channel_layout_standard(void **opaque)
Iterate over all standard channel layouts.
Definition: channel_layout.c:987
AV_MATRIX_ENCODING_DPLIIX
@ AV_MATRIX_ENCODING_DPLIIX
Definition: channel_layout.h:254
AV_CHAN_TOP_SIDE_LEFT
@ AV_CHAN_TOP_SIDE_LEFT
Definition: channel_layout.h:77
AV_CHAN_TOP_SIDE_RIGHT
@ AV_CHAN_TOP_SIDE_RIGHT
Definition: channel_layout.h:78
AVMatrixEncoding
AVMatrixEncoding
Definition: channel_layout.h:250
AV_MATRIX_ENCODING_DOLBYHEADPHONE
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
Definition: channel_layout.h:257
AV_CHANNEL_ORDER_AMBISONIC
@ AV_CHANNEL_ORDER_AMBISONIC
The audio is represented as the decomposition of the sound field into spherical harmonics.
Definition: channel_layout.h:148
AV_CHAN_TOP_BACK_CENTER
@ AV_CHAN_TOP_BACK_CENTER
Definition: channel_layout.h:66
AV_CHAN_BOTTOM_FRONT_RIGHT
@ AV_CHAN_BOTTOM_FRONT_RIGHT
Definition: channel_layout.h:81
av_get_channel_layout
attribute_deprecated uint64_t av_get_channel_layout(const char *name)
Return a channel layout id that matches name, or 0 if no match is found.
Definition: channel_layout.c:249
AV_CHAN_TOP_CENTER
@ AV_CHAN_TOP_CENTER
Definition: channel_layout.h:61
index
int index
Definition: gxfenc.c:89
AV_CHAN_FRONT_RIGHT_OF_CENTER
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
Definition: channel_layout.h:57
AV_CHAN_FRONT_RIGHT
@ AV_CHAN_FRONT_RIGHT
Definition: channel_layout.h:51
AV_CHAN_FRONT_CENTER
@ AV_CHAN_FRONT_CENTER
Definition: channel_layout.h:52
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:309
AV_MATRIX_ENCODING_NONE
@ AV_MATRIX_ENCODING_NONE
Definition: channel_layout.h:251
AV_CHAN_LOW_FREQUENCY
@ AV_CHAN_LOW_FREQUENCY
Definition: channel_layout.h:53
AV_CHAN_BACK_RIGHT
@ AV_CHAN_BACK_RIGHT
Definition: channel_layout.h:55
AV_CHAN_SIDE_LEFT
@ AV_CHAN_SIDE_LEFT
Definition: channel_layout.h:59
AV_CHAN_AMBISONIC_END
@ AV_CHAN_AMBISONIC_END
Definition: channel_layout.h:104
attribute_deprecated
#define attribute_deprecated
Definition: attributes.h:104
av_channel_description
int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel)
Get a human readable string describing a given channel.
Definition: channel_layout.c:130
AV_CHAN_TOP_FRONT_RIGHT
@ AV_CHAN_TOP_FRONT_RIGHT
Definition: channel_layout.h:64
attributes.h
AV_CHANNEL_ORDER_NATIVE
@ AV_CHANNEL_ORDER_NATIVE
The native channel order, i.e.
Definition: channel_layout.h:118
AV_CHAN_FRONT_LEFT_OF_CENTER
@ AV_CHAN_FRONT_LEFT_OF_CENTER
Definition: channel_layout.h:56
AV_CHAN_UNUSED
@ AV_CHAN_UNUSED
Channel is empty can be safely skipped.
Definition: channel_layout.h:84
av_channel_layout_compare
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
Definition: channel_layout.c:944
av_channel_layout_default
void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels)
Get the default channel layout for a given number of channels.
Definition: channel_layout.c:974
layout
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame 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
Definition: filter_design.txt:18
AVChannel
AVChannel
Definition: channel_layout.h:47
av_channel_layout_from_string
int av_channel_layout_from_string(AVChannelLayout *channel_layout, const char *str)
Initialize a channel layout from a given string description.
Definition: channel_layout.c:414
AV_CHAN_SURROUND_DIRECT_RIGHT
@ AV_CHAN_SURROUND_DIRECT_RIGHT
Definition: channel_layout.h:75
av_channel_name
int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel)
Get a human readable string in an abbreviated form describing a given channel.
Definition: channel_layout.c:101
AVChannelCustom::name
char name[16]
Definition: channel_layout.h:275
AV_CHAN_STEREO_LEFT
@ AV_CHAN_STEREO_LEFT
Stereo downmix.
Definition: channel_layout.h:69
version.h
av_bprint_channel_layout
attribute_deprecated 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.
Definition: channel_layout.c:287
av_channel_layout_check
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
Definition: channel_layout.c:918
AV_CHAN_BACK_CENTER
@ AV_CHAN_BACK_CENTER
Definition: channel_layout.h:58
av_channel_from_string
enum AVChannel av_channel_from_string(const char *name)
This is the inverse function of av_channel_name().
Definition: channel_layout.c:145
AV_CHAN_NONE
@ AV_CHAN_NONE
Invalid channel index.
Definition: channel_layout.h:49
AVChannelCustom::opaque
void * opaque
Definition: channel_layout.h:276
AV_CHANNEL_ORDER_CUSTOM
@ AV_CHANNEL_ORDER_CUSTOM
The channel order does not correspond to any other predefined order and is stored as an explicit map.
Definition: channel_layout.h:125
AVChannelLayout::opaque
void * opaque
For some private data of the user.
Definition: channel_layout.h:366
AV_CHAN_LOW_FREQUENCY_2
@ AV_CHAN_LOW_FREQUENCY_2
Definition: channel_layout.h:76
av_channel_layout_subset
uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, uint64_t mask)
Find out what channels from a given set are present in a channel layout, without regard for their pos...
Definition: channel_layout.c:1000
AV_CHAN_TOP_BACK_LEFT
@ AV_CHAN_TOP_BACK_LEFT
Definition: channel_layout.h:65
AV_MATRIX_ENCODING_DOLBYEX
@ AV_MATRIX_ENCODING_DOLBYEX
Definition: channel_layout.h:256
av_channel_layout_channel_from_string
enum AVChannel av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, const char *name)
Get a channel described by the given string.
Definition: channel_layout.c:837
av_channel_layout_index_from_channel
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
Definition: channel_layout.c:848
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:642
AV_CHAN_BACK_LEFT
@ AV_CHAN_BACK_LEFT
Definition: channel_layout.h:54
AV_CHAN_BOTTOM_FRONT_CENTER
@ AV_CHAN_BOTTOM_FRONT_CENTER
Definition: channel_layout.h:79
av_channel_layout_copy
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
Definition: channel_layout.c:649
AV_CHAN_TOP_FRONT_CENTER
@ AV_CHAN_TOP_FRONT_CENTER
Definition: channel_layout.h:63
AV_CHAN_WIDE_RIGHT
@ AV_CHAN_WIDE_RIGHT
Definition: channel_layout.h:73
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AV_CHAN_TOP_FRONT_LEFT
@ AV_CHAN_TOP_FRONT_LEFT
Definition: channel_layout.h:62
AV_MATRIX_ENCODING_DPLIIZ
@ AV_MATRIX_ENCODING_DPLIIZ
Definition: channel_layout.h:255
AV_CHAN_AMBISONIC_BASE
@ AV_CHAN_AMBISONIC_BASE
Range of channels between AV_CHAN_AMBISONIC_BASE and AV_CHAN_AMBISONIC_END represent Ambisonic compon...
Definition: channel_layout.h:101
AVChannelLayout::u
union AVChannelLayout::@334 u
Details about which channels are present in this layout.
av_get_extended_channel_layout
attribute_deprecated int av_get_extended_channel_layout(const char *name, uint64_t *channel_layout, int *nb_channels)
Return a channel layout and the number of channels based on the specified name.
Definition: channel_layout.c:265
AV_CHAN_FRONT_LEFT
@ AV_CHAN_FRONT_LEFT
Definition: channel_layout.h:50
av_channel_name_bprint
void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id)
bprint variant of av_channel_name().
Definition: channel_layout.c:87
AVChannelCustom::id
enum AVChannel id
Definition: channel_layout.h:274
channel
channel
Definition: ebur128.h:39
av_get_default_channel_layout
attribute_deprecated int64_t av_get_default_channel_layout(int nb_channels)
Return default channel layout for a given number of channels.
Definition: channel_layout.c:335
AV_MATRIX_ENCODING_DPLII
@ AV_MATRIX_ENCODING_DPLII
Definition: channel_layout.h:253