FFmpeg
mov_chan.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 Justin Ruggles
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /**
22  * mov 'chan' tag reading/writing.
23  * @author Justin Ruggles
24  */
25 
26 #include <stdint.h>
27 
29 #include "libavcodec/codec_id.h"
30 #include "mov_chan.h"
31 
32 /**
33  * Channel Layout Tag
34  * This tells which channels are present in the audio stream and the order in
35  * which they appear.
36  *
37  * @note We're using the channel layout tag to indicate channel order
38  * when the value is greater than 0x10000. The Apple documentation has
39  * some contradictions as to how this is actually supposed to be handled.
40  *
41  * Core Audio File Format Spec:
42  * "The high 16 bits indicates a specific ordering of the channels."
43  * Core Audio Data Types Reference:
44  * "These identifiers specify the channels included in a layout but
45  * do not specify a particular ordering of those channels."
46  */
48 #define MOV_CH_LAYOUT_UNKNOWN 0xFFFF0000
50  MOV_CH_LAYOUT_USE_BITMAP = ( 1 << 16) | 0,
51  MOV_CH_LAYOUT_DISCRETEINORDER = (147 << 16) | 0,
52  MOV_CH_LAYOUT_MONO = (100 << 16) | 1,
53  MOV_CH_LAYOUT_STEREO = (101 << 16) | 2,
54  MOV_CH_LAYOUT_STEREOHEADPHONES = (102 << 16) | 2,
55  MOV_CH_LAYOUT_MATRIXSTEREO = (103 << 16) | 2,
56  MOV_CH_LAYOUT_MIDSIDE = (104 << 16) | 2,
57  MOV_CH_LAYOUT_XY = (105 << 16) | 2,
58  MOV_CH_LAYOUT_BINAURAL = (106 << 16) | 2,
60  MOV_CH_LAYOUT_QUADRAPHONIC = (108 << 16) | 4,
61  MOV_CH_LAYOUT_PENTAGONAL = (109 << 16) | 5,
62  MOV_CH_LAYOUT_HEXAGONAL = (110 << 16) | 6,
63  MOV_CH_LAYOUT_OCTAGONAL = (111 << 16) | 8,
64  MOV_CH_LAYOUT_CUBE = (112 << 16) | 8,
65  MOV_CH_LAYOUT_MPEG_3_0_A = (113 << 16) | 3,
66  MOV_CH_LAYOUT_MPEG_3_0_B = (114 << 16) | 3,
67  MOV_CH_LAYOUT_MPEG_4_0_A = (115 << 16) | 4,
68  MOV_CH_LAYOUT_MPEG_4_0_B = (116 << 16) | 4,
69  MOV_CH_LAYOUT_MPEG_5_0_A = (117 << 16) | 5,
70  MOV_CH_LAYOUT_MPEG_5_0_B = (118 << 16) | 5,
71  MOV_CH_LAYOUT_MPEG_5_0_C = (119 << 16) | 5,
72  MOV_CH_LAYOUT_MPEG_5_0_D = (120 << 16) | 5,
73  MOV_CH_LAYOUT_MPEG_5_1_A = (121 << 16) | 6,
74  MOV_CH_LAYOUT_MPEG_5_1_B = (122 << 16) | 6,
75  MOV_CH_LAYOUT_MPEG_5_1_C = (123 << 16) | 6,
76  MOV_CH_LAYOUT_MPEG_5_1_D = (124 << 16) | 6,
77  MOV_CH_LAYOUT_MPEG_6_1_A = (125 << 16) | 7,
78  MOV_CH_LAYOUT_MPEG_7_1_A = (126 << 16) | 8,
79  MOV_CH_LAYOUT_MPEG_7_1_B = (127 << 16) | 8,
80  MOV_CH_LAYOUT_MPEG_7_1_C = (128 << 16) | 8,
82  MOV_CH_LAYOUT_SMPTE_DTV = (130 << 16) | 8,
83  MOV_CH_LAYOUT_ITU_2_1 = (131 << 16) | 3,
84  MOV_CH_LAYOUT_ITU_2_2 = (132 << 16) | 4,
85  MOV_CH_LAYOUT_DVD_4 = (133 << 16) | 3,
86  MOV_CH_LAYOUT_DVD_5 = (134 << 16) | 4,
87  MOV_CH_LAYOUT_DVD_6 = (135 << 16) | 5,
88  MOV_CH_LAYOUT_DVD_10 = (136 << 16) | 4,
89  MOV_CH_LAYOUT_DVD_11 = (137 << 16) | 5,
90  MOV_CH_LAYOUT_DVD_18 = (138 << 16) | 5,
91  MOV_CH_LAYOUT_AUDIOUNIT_6_0 = (139 << 16) | 6,
92  MOV_CH_LAYOUT_AUDIOUNIT_7_0 = (140 << 16) | 7,
94  MOV_CH_LAYOUT_AAC_6_0 = (141 << 16) | 6,
95  MOV_CH_LAYOUT_AAC_6_1 = (142 << 16) | 7,
96  MOV_CH_LAYOUT_AAC_7_0 = (143 << 16) | 7,
97  MOV_CH_LAYOUT_AAC_OCTAGONAL = (144 << 16) | 8,
98  MOV_CH_LAYOUT_TMH_10_2_STD = (145 << 16) | 16,
99  MOV_CH_LAYOUT_TMH_10_2_FULL = (146 << 16) | 21,
100  MOV_CH_LAYOUT_AC3_1_0_1 = (149 << 16) | 2,
101  MOV_CH_LAYOUT_AC3_3_0 = (150 << 16) | 3,
102  MOV_CH_LAYOUT_AC3_3_1 = (151 << 16) | 4,
103  MOV_CH_LAYOUT_AC3_3_0_1 = (152 << 16) | 4,
104  MOV_CH_LAYOUT_AC3_2_1_1 = (153 << 16) | 4,
105  MOV_CH_LAYOUT_AC3_3_1_1 = (154 << 16) | 5,
106  MOV_CH_LAYOUT_EAC3_6_0_A = (155 << 16) | 6,
107  MOV_CH_LAYOUT_EAC3_7_0_A = (156 << 16) | 7,
108  MOV_CH_LAYOUT_EAC3_6_1_A = (157 << 16) | 7,
109  MOV_CH_LAYOUT_EAC3_6_1_B = (158 << 16) | 7,
110  MOV_CH_LAYOUT_EAC3_6_1_C = (159 << 16) | 7,
111  MOV_CH_LAYOUT_EAC3_7_1_A = (160 << 16) | 8,
112  MOV_CH_LAYOUT_EAC3_7_1_B = (161 << 16) | 8,
113  MOV_CH_LAYOUT_EAC3_7_1_C = (162 << 16) | 8,
114  MOV_CH_LAYOUT_EAC3_7_1_D = (163 << 16) | 8,
115  MOV_CH_LAYOUT_EAC3_7_1_E = (164 << 16) | 8,
116  MOV_CH_LAYOUT_EAC3_7_1_F = (165 << 16) | 8,
117  MOV_CH_LAYOUT_EAC3_7_1_G = (166 << 16) | 8,
118  MOV_CH_LAYOUT_EAC3_7_1_H = (167 << 16) | 8,
119  MOV_CH_LAYOUT_DTS_3_1 = (168 << 16) | 4,
120  MOV_CH_LAYOUT_DTS_4_1 = (169 << 16) | 5,
121  MOV_CH_LAYOUT_DTS_6_0_A = (170 << 16) | 6,
122  MOV_CH_LAYOUT_DTS_6_0_B = (171 << 16) | 6,
123  MOV_CH_LAYOUT_DTS_6_0_C = (172 << 16) | 6,
124  MOV_CH_LAYOUT_DTS_6_1_A = (173 << 16) | 7,
125  MOV_CH_LAYOUT_DTS_6_1_B = (174 << 16) | 7,
126  MOV_CH_LAYOUT_DTS_6_1_C = (175 << 16) | 7,
127  MOV_CH_LAYOUT_DTS_6_1_D = (182 << 16) | 7,
128  MOV_CH_LAYOUT_DTS_7_0 = (176 << 16) | 7,
129  MOV_CH_LAYOUT_DTS_7_1 = (177 << 16) | 8,
130  MOV_CH_LAYOUT_DTS_8_0_A = (178 << 16) | 8,
131  MOV_CH_LAYOUT_DTS_8_0_B = (179 << 16) | 8,
132  MOV_CH_LAYOUT_DTS_8_1_A = (180 << 16) | 9,
133  MOV_CH_LAYOUT_DTS_8_1_B = (181 << 16) | 9,
134 };
135 
137  uint32_t tag;
138  uint64_t layout;
139 };
140 
145  { MOV_CH_LAYOUT_UNKNOWN, 0 },
146  { MOV_CH_LAYOUT_TMH_10_2_STD, 0 }, // L, R, C, Vhc, Lsd, Rsd,
147  // Ls, Rs, Vhl, Vhr, Lw, Rw,
148  // Csd, Cs, LFE1, LFE2
149  { MOV_CH_LAYOUT_TMH_10_2_FULL, 0 }, // L, R, C, Vhc, Lsd, Rsd,
150  // Ls, Rs, Vhl, Vhr, Lw, Rw,
151  // Csd, Cs, LFE1, LFE2, Lc, Rc,
152  // HI, VI, Haptic
153  { 0, 0 },
154 };
155 
158  { 0, 0 },
159 };
160 
166  { MOV_CH_LAYOUT_XY, AV_CH_LAYOUT_STEREO }, // X (left), Y (right)
167 
169 
172  { 0, 0 },
173 };
174 
179 
180  { MOV_CH_LAYOUT_ITU_2_1, AV_CH_LAYOUT_2_1 }, // L, R, Cs
181 
182  { MOV_CH_LAYOUT_DVD_4, AV_CH_LAYOUT_2POINT1 }, // L, R, LFE
183  { 0, 0 },
184 };
185 
187  { MOV_CH_LAYOUT_AMBISONIC_B_FORMAT, 0 }, // W, X, Y, Z
188 
189  { MOV_CH_LAYOUT_QUADRAPHONIC, AV_CH_LAYOUT_QUAD }, // L, R, Rls, Rrs
190 
193  { MOV_CH_LAYOUT_AC3_3_1, AV_CH_LAYOUT_4POINT0 }, // L, C, R, Cs
194 
195  { MOV_CH_LAYOUT_ITU_2_2, AV_CH_LAYOUT_2_2 }, // L, R, Ls, Rs
196 
197  { MOV_CH_LAYOUT_DVD_5, AV_CH_LAYOUT_2_1 | // L, R, LFE, Cs
199  { MOV_CH_LAYOUT_AC3_2_1_1, AV_CH_LAYOUT_2_1 | // L, R, Cs, LFE
201 
202  { MOV_CH_LAYOUT_DVD_10, AV_CH_LAYOUT_3POINT1 }, // L, R, C, LFE
203  { MOV_CH_LAYOUT_AC3_3_0_1, AV_CH_LAYOUT_3POINT1 }, // L, C, R, LFE
204  { MOV_CH_LAYOUT_DTS_3_1, AV_CH_LAYOUT_3POINT1 }, // C, L, R, LFE
205  { 0, 0 },
206 };
207 
209  { MOV_CH_LAYOUT_PENTAGONAL, AV_CH_LAYOUT_5POINT0_BACK }, // L, R, Rls, Rrs, C
210 
211  { MOV_CH_LAYOUT_MPEG_5_0_A, AV_CH_LAYOUT_5POINT0 }, // L, R, C, Ls, Rs
212  { MOV_CH_LAYOUT_MPEG_5_0_B, AV_CH_LAYOUT_5POINT0 }, // L, R, Ls, Rs, C
213  { MOV_CH_LAYOUT_MPEG_5_0_C, AV_CH_LAYOUT_5POINT0 }, // L, C, R, Ls, Rs
214  { MOV_CH_LAYOUT_MPEG_5_0_D, AV_CH_LAYOUT_5POINT0 }, // C, L, R, Ls, Rs
215 
216  { MOV_CH_LAYOUT_DVD_6, AV_CH_LAYOUT_2_2 | // L, R, LFE, Ls, Rs
218  { MOV_CH_LAYOUT_DVD_18, AV_CH_LAYOUT_2_2 | // L, R, Ls, Rs, LFE
220 
221  { MOV_CH_LAYOUT_DVD_11, AV_CH_LAYOUT_4POINT1 }, // L, R, C, LFE, Cs
222  { MOV_CH_LAYOUT_AC3_3_1_1, AV_CH_LAYOUT_4POINT1 }, // L, C, R, Cs, LFE
223  { MOV_CH_LAYOUT_DTS_4_1, AV_CH_LAYOUT_4POINT1 }, // C, L, R, Cs, LFE
224  { 0, 0 },
225 };
226 
228  { MOV_CH_LAYOUT_HEXAGONAL, AV_CH_LAYOUT_HEXAGONAL }, // L, R, Rls, Rrs, C, Cs
229  { MOV_CH_LAYOUT_DTS_6_0_C, AV_CH_LAYOUT_HEXAGONAL }, // C, Cs, L, R, Rls, Rrs
230 
231  { MOV_CH_LAYOUT_MPEG_5_1_A, AV_CH_LAYOUT_5POINT1 }, // L, R, C, LFE, Ls, Rs
232  { MOV_CH_LAYOUT_MPEG_5_1_B, AV_CH_LAYOUT_5POINT1 }, // L, R, Ls, Rs, C, LFE
233  { MOV_CH_LAYOUT_MPEG_5_1_C, AV_CH_LAYOUT_5POINT1 }, // L, C, R, Ls, Rs, LFE
234  { MOV_CH_LAYOUT_MPEG_5_1_D, AV_CH_LAYOUT_5POINT1 }, // C, L, R, Ls, Rs, LFE
235 
236  { MOV_CH_LAYOUT_AUDIOUNIT_6_0, AV_CH_LAYOUT_6POINT0 }, // L, R, Ls, Rs, C, Cs
237  { MOV_CH_LAYOUT_AAC_6_0, AV_CH_LAYOUT_6POINT0 }, // C, L, R, Ls, Rs, Cs
238  { MOV_CH_LAYOUT_EAC3_6_0_A, AV_CH_LAYOUT_6POINT0 }, // L, C, R, Ls, Rs, Cs
239 
240  { MOV_CH_LAYOUT_DTS_6_0_A, AV_CH_LAYOUT_6POINT0_FRONT }, // Lc, Rc, L, R, Ls, Rs
241 
242  { MOV_CH_LAYOUT_DTS_6_0_B, AV_CH_LAYOUT_5POINT0_BACK | // C, L, R, Rls, Rrs, Ts
244  { 0, 0 },
245 };
246 
248  { MOV_CH_LAYOUT_MPEG_6_1_A, AV_CH_LAYOUT_6POINT1 }, // L, R, C, LFE, Ls, Rs, Cs
249  { MOV_CH_LAYOUT_AAC_6_1, AV_CH_LAYOUT_6POINT1 }, // C, L, R, Ls, Rs, Cs, LFE
250  { MOV_CH_LAYOUT_EAC3_6_1_A, AV_CH_LAYOUT_6POINT1 }, // L, C, R, Ls, Rs, LFE, Cs
251  { MOV_CH_LAYOUT_DTS_6_1_D, AV_CH_LAYOUT_6POINT1 }, // C, L, R, Ls, Rs, LFE, Cs
252 
253  { MOV_CH_LAYOUT_AUDIOUNIT_7_0, AV_CH_LAYOUT_7POINT0 }, // L, R, Ls, Rs, C, Rls, Rrs
254  { MOV_CH_LAYOUT_AAC_7_0, AV_CH_LAYOUT_7POINT0 }, // C, L, R, Ls, Rs, Rls, Rrs
255  { MOV_CH_LAYOUT_EAC3_7_0_A, AV_CH_LAYOUT_7POINT0 }, // L, C, R, Ls, Rs, Rls, Rrs
256 
257  { MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT, AV_CH_LAYOUT_7POINT0_FRONT }, // L, R, Ls, Rs, C, Lc, Rc
258  { MOV_CH_LAYOUT_DTS_7_0, AV_CH_LAYOUT_7POINT0_FRONT }, // Lc, C, Rc, L, R, Ls, Rs
259 
260  { MOV_CH_LAYOUT_EAC3_6_1_B, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Ts
262 
263  { MOV_CH_LAYOUT_EAC3_6_1_C, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Vhc
265 
266  { MOV_CH_LAYOUT_DTS_6_1_A, AV_CH_LAYOUT_6POINT1_FRONT }, // Lc, Rc, L, R, Ls, Rs, LFE
267 
268  { MOV_CH_LAYOUT_DTS_6_1_B, AV_CH_LAYOUT_5POINT1_BACK | // C, L, R, Rls, Rrs, Ts, LFE
270 
271  { MOV_CH_LAYOUT_DTS_6_1_C, AV_CH_LAYOUT_6POINT1_BACK }, // C, Cs, L, R, Rls, Rrs, LFE
272  { 0, 0 },
273 };
274 
276  { MOV_CH_LAYOUT_OCTAGONAL, AV_CH_LAYOUT_OCTAGONAL }, // L, R, Rls, Rrs, C, Cs, Ls, Rs
277  { MOV_CH_LAYOUT_AAC_OCTAGONAL, AV_CH_LAYOUT_OCTAGONAL }, // C, L, R, Ls, Rs, Rls, Rrs, Cs
278 
279  { MOV_CH_LAYOUT_CUBE, AV_CH_LAYOUT_QUAD | // L, R, Rls, Rrs, Vhl, Vhr, Rlt, Rrt
284 
285  { MOV_CH_LAYOUT_MPEG_7_1_A, AV_CH_LAYOUT_7POINT1_WIDE }, // L, R, C, LFE, Ls, Rs, Lc, Rc
286  { MOV_CH_LAYOUT_MPEG_7_1_B, AV_CH_LAYOUT_7POINT1_WIDE }, // C, Lc, Rc, L, R, Ls, Rs, LFE
287  { MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1, AV_CH_LAYOUT_7POINT1_WIDE }, // L, R, Ls, Rs, C, LFE, Lc, Rc
288  { MOV_CH_LAYOUT_EAC3_7_1_B, AV_CH_LAYOUT_7POINT1_WIDE }, // L, C, R, Ls, Rs, LFE, Lc, Rc
289  { MOV_CH_LAYOUT_DTS_7_1, AV_CH_LAYOUT_7POINT1_WIDE }, // Lc, C, Rc, L, R, Ls, Rs, LFE
290 
291  { MOV_CH_LAYOUT_MPEG_7_1_C, AV_CH_LAYOUT_7POINT1 }, // L, R, C, LFE, Ls, Rs, Rls, Rrs
292  { MOV_CH_LAYOUT_EAC3_7_1_A, AV_CH_LAYOUT_7POINT1 }, // L, C, R, Ls, Rs, LFE, Rls, Rrs
293 
294  { MOV_CH_LAYOUT_SMPTE_DTV, AV_CH_LAYOUT_5POINT1 | // L, R, C, LFE, Ls, Rs, Lt, Rt
296 
297  { MOV_CH_LAYOUT_EAC3_7_1_C, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Lsd, Rsd
300 
301  { MOV_CH_LAYOUT_EAC3_7_1_D, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Lw, Rw
304 
305  { MOV_CH_LAYOUT_EAC3_7_1_E, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Vhl, Vhr
308 
309  { MOV_CH_LAYOUT_EAC3_7_1_F, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Cs, Ts
312 
313  { MOV_CH_LAYOUT_EAC3_7_1_G, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Cs, Vhc
316 
317  { MOV_CH_LAYOUT_EAC3_7_1_H, AV_CH_LAYOUT_5POINT1 | // L, C, R, Ls, Rs, LFE, Ts, Vhc
320 
321  { MOV_CH_LAYOUT_DTS_8_0_A, AV_CH_LAYOUT_2_2 | // Lc, Rc, L, R, Ls, Rs, Rls, Rrs
326 
327  { MOV_CH_LAYOUT_DTS_8_0_B, AV_CH_LAYOUT_5POINT0 | // Lc, C, Rc, L, R, Ls, Cs, Rs
331  { 0, 0 },
332 };
333 
335  { MOV_CH_LAYOUT_DTS_8_1_A, AV_CH_LAYOUT_2_2 | // Lc, Rc, L, R, Ls, Rs, Rls, Rrs, LFE
341 
342  { MOV_CH_LAYOUT_DTS_8_1_B, AV_CH_LAYOUT_7POINT1_WIDE | // Lc, C, Rc, L, R, Ls, Cs, Rs, LFE
344  { 0, 0 },
345 };
346 
347 static const struct MovChannelLayoutMap * const mov_ch_layout_map[] = {
358 };
359 
384  0,
385 };
386 
402  0,
403 };
404 
414  0,
415 };
416 
429  0,
430 };
431 
432 static const struct {
435 } mov_codec_ch_layouts[] = {
451  { AV_CODEC_ID_NONE, NULL },
452 };
453 
454 /**
455  * Get the channel layout for the specified channel layout tag.
456  *
457  * @param[in] tag channel layout tag
458  * @param[out] bitmap channel bitmap (only used if needed)
459  * @return channel layout
460  */
461 static uint64_t mov_get_channel_layout(uint32_t tag, uint32_t bitmap)
462 {
463  int i, channels;
464  const struct MovChannelLayoutMap *layout_map;
465 
466  /* use ff_mov_get_channel_label() to build a layout instead */
468  return 0;
469 
470  /* handle the use of the channel bitmap */
472  return bitmap < 0x40000 ? bitmap : 0;
473 
474  /* get the layout map based on the channel count for the specified layout tag */
475  channels = tag & 0xFFFF;
476  if (channels > 9)
477  channels = 0;
478  layout_map = mov_ch_layout_map[channels];
479 
480  /* find the channel layout for the specified layout tag */
481  for (i = 0; layout_map[i].tag != 0; i++) {
482  if (layout_map[i].tag == tag)
483  break;
484  }
485  return layout_map[i].layout;
486 }
487 
488 static uint32_t mov_get_channel_label(uint32_t label)
489 {
490  if (label == 0)
491  return 0;
492  if (label <= 18)
493  return 1U << (label - 1);
494  if (label == 38)
495  return AV_CH_STEREO_LEFT;
496  if (label == 39)
497  return AV_CH_STEREO_RIGHT;
498  return 0;
499 }
500 
502  uint64_t channel_layout,
503  uint32_t *bitmap)
504 {
505  int i, j;
506  uint32_t tag = 0;
507  const enum MovChannelLayoutTag *layouts = NULL;
508 
509  /* find the layout list for the specified codec */
510  for (i = 0; mov_codec_ch_layouts[i].codec_id != AV_CODEC_ID_NONE; i++) {
512  break;
513  }
515  layouts = mov_codec_ch_layouts[i].layouts;
516 
517  if (layouts) {
518  int channels;
519  const struct MovChannelLayoutMap *layout_map;
520 
521  /* get the layout map based on the channel count */
523  if (channels > 9)
524  channels = 0;
525  layout_map = mov_ch_layout_map[channels];
526 
527  /* find the layout tag for the specified channel layout */
528  for (i = 0; layouts[i] != 0; i++) {
529  if ((layouts[i] & 0xFFFF) != channels)
530  continue;
531  for (j = 0; layout_map[j].tag != 0; j++) {
532  if (layout_map[j].tag == layouts[i] &&
533  layout_map[j].layout == channel_layout)
534  break;
535  }
536  if (layout_map[j].tag)
537  break;
538  }
539  tag = layouts[i];
540  }
541 
542  /* if no tag was found, use channel bitmap as a backup if possible */
543  if (tag == 0 && channel_layout > 0 && channel_layout < 0x40000) {
545  *bitmap = (uint32_t)channel_layout;
546  } else
547  *bitmap = 0;
548 
549  /* TODO: set channel descriptions as a secondary backup */
550 
551  return tag;
552 }
553 
555  int64_t size)
556 {
557  uint32_t layout_tag, bitmap, num_descr, label_mask;
558  int i;
559 
560  if (size < 12)
561  return AVERROR_INVALIDDATA;
562 
563  layout_tag = avio_rb32(pb);
564  bitmap = avio_rb32(pb);
565  num_descr = avio_rb32(pb);
566 
567  av_log(s, AV_LOG_TRACE, "chan: layout=%"PRIu32" "
568  "bitmap=%"PRIu32" num_descr=%"PRIu32"\n",
569  layout_tag, bitmap, num_descr);
570 
571  if (size < 12ULL + num_descr * 20ULL)
572  return 0;
573 
574  label_mask = 0;
575  for (i = 0; i < num_descr; i++) {
576  uint32_t label;
577  if (pb->eof_reached) {
579  "reached EOF while reading channel layout\n");
580  return AVERROR_INVALIDDATA;
581  }
582  label = avio_rb32(pb); // mChannelLabel
583  avio_rb32(pb); // mChannelFlags
584  avio_rl32(pb); // mCoordinates[0]
585  avio_rl32(pb); // mCoordinates[1]
586  avio_rl32(pb); // mCoordinates[2]
587  size -= 20;
588  if (layout_tag == 0) {
589  uint32_t mask_incr = mov_get_channel_label(label);
590  if (mask_incr == 0) {
591  label_mask = 0;
592  break;
593  }
594  label_mask |= mask_incr;
595  }
596  }
597  if (layout_tag == 0) {
598  if (label_mask)
599  st->codecpar->channel_layout = label_mask;
600  } else
601  st->codecpar->channel_layout = mov_get_channel_layout(layout_tag, bitmap);
602  avio_skip(pb, size - 12);
603 
604  return 0;
605 }
MOV_CH_LAYOUT_MPEG_4_0_B
@ MOV_CH_LAYOUT_MPEG_4_0_B
Definition: mov_chan.c:68
AV_CODEC_ID_PCM_S16LE
@ AV_CODEC_ID_PCM_S16LE
Definition: codec_id.h:314
AV_CH_LAYOUT_7POINT0
#define AV_CH_LAYOUT_7POINT0
Definition: channel_layout.h:110
AV_CH_LAYOUT_6POINT1
#define AV_CH_LAYOUT_6POINT1
Definition: channel_layout.h:107
AV_CODEC_ID_PCM_F32BE
@ AV_CODEC_ID_PCM_F32BE
Definition: codec_id.h:334
MOV_CH_LAYOUT_AAC_OCTAGONAL
@ MOV_CH_LAYOUT_AAC_OCTAGONAL
Definition: mov_chan.c:97
MOV_CH_LAYOUT_MPEG_5_0_D
@ MOV_CH_LAYOUT_MPEG_5_0_D
Definition: mov_chan.c:72
AV_CH_LAYOUT_5POINT0_BACK
#define AV_CH_LAYOUT_5POINT0_BACK
Definition: channel_layout.h:102
AV_CODEC_ID_AC3
@ AV_CODEC_ID_AC3
Definition: codec_id.h:426
MOV_CH_LAYOUT_MPEG_7_1_B
@ MOV_CH_LAYOUT_MPEG_7_1_B
Definition: mov_chan.c:79
MOV_CH_LAYOUT_MPEG_3_0_B
@ MOV_CH_LAYOUT_MPEG_3_0_B
Definition: mov_chan.c:66
AV_CH_TOP_FRONT_CENTER
#define AV_CH_TOP_FRONT_CENTER
Definition: channel_layout.h:62
codec_id
enum AVCodecID codec_id
Definition: mov_chan.c:433
MOV_CH_LAYOUT_DTS_7_0
@ MOV_CH_LAYOUT_DTS_7_0
Definition: mov_chan.c:128
MOV_CH_LAYOUT_MPEG_5_0_B
@ MOV_CH_LAYOUT_MPEG_5_0_B
Definition: mov_chan.c:70
layouts
enum MovChannelLayoutTag * layouts
Definition: mov_chan.c:434
MOV_CH_LAYOUT_DTS_6_1_A
@ MOV_CH_LAYOUT_DTS_6_1_A
Definition: mov_chan.c:124
AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_MONO
Definition: channel_layout.h:90
MOV_CH_LAYOUT_AC3_2_1_1
@ MOV_CH_LAYOUT_AC3_2_1_1
Definition: mov_chan.c:104
AV_CH_TOP_FRONT_RIGHT
#define AV_CH_TOP_FRONT_RIGHT
Definition: channel_layout.h:63
MOV_CH_LAYOUT_DTS_6_0_B
@ MOV_CH_LAYOUT_DTS_6_0_B
Definition: mov_chan.c:122
AV_CH_LAYOUT_HEXAGONAL
#define AV_CH_LAYOUT_HEXAGONAL
Definition: channel_layout.h:106
MOV_CH_LAYOUT_DVD_4
@ MOV_CH_LAYOUT_DVD_4
Definition: mov_chan.c:85
AV_CODEC_ID_ALAC
@ AV_CODEC_ID_ALAC
Definition: codec_id.h:439
MOV_CH_LAYOUT_DISCRETEINORDER
@ MOV_CH_LAYOUT_DISCRETEINORDER
Definition: mov_chan.c:51
AV_CH_LAYOUT_6POINT0_FRONT
#define AV_CH_LAYOUT_6POINT0_FRONT
Definition: channel_layout.h:105
AV_CH_LAYOUT_6POINT1_FRONT
#define AV_CH_LAYOUT_6POINT1_FRONT
Definition: channel_layout.h:109
AV_CH_TOP_FRONT_LEFT
#define AV_CH_TOP_FRONT_LEFT
Definition: channel_layout.h:61
MOV_CH_LAYOUT_STEREO
@ MOV_CH_LAYOUT_STEREO
Definition: mov_chan.c:53
MOV_CH_LAYOUT_EAC3_7_1_H
@ MOV_CH_LAYOUT_EAC3_7_1_H
Definition: mov_chan.c:118
AV_CH_WIDE_LEFT
#define AV_CH_WIDE_LEFT
Definition: channel_layout.h:69
AV_CH_SURROUND_DIRECT_RIGHT
#define AV_CH_SURROUND_DIRECT_RIGHT
Definition: channel_layout.h:72
AV_CH_WIDE_RIGHT
#define AV_CH_WIDE_RIGHT
Definition: channel_layout.h:70
AV_CH_TOP_BACK_LEFT
#define AV_CH_TOP_BACK_LEFT
Definition: channel_layout.h:64
MovChannelLayoutTag
MovChannelLayoutTag
mov 'chan' tag reading/writing.
Definition: mov_chan.c:47
MOV_CH_LAYOUT_AC3_3_1
@ MOV_CH_LAYOUT_AC3_3_1
Definition: mov_chan.c:102
AV_CH_LAYOUT_6POINT0
#define AV_CH_LAYOUT_6POINT0
Definition: channel_layout.h:104
MOV_CH_LAYOUT_TMH_10_2_FULL
@ MOV_CH_LAYOUT_TMH_10_2_FULL
Definition: mov_chan.c:99
MOV_CH_LAYOUT_STEREOHEADPHONES
@ MOV_CH_LAYOUT_STEREOHEADPHONES
Definition: mov_chan.c:54
MOV_CH_LAYOUT_XY
@ MOV_CH_LAYOUT_XY
Definition: mov_chan.c:57
AV_CODEC_ID_PCM_S16BE
@ AV_CODEC_ID_PCM_S16BE
Definition: codec_id.h:315
U
#define U(x)
Definition: vp56_arith.h:37
MOV_CH_LAYOUT_MPEG_7_1_A
@ MOV_CH_LAYOUT_MPEG_7_1_A
Definition: mov_chan.c:78
AV_CH_BACK_LEFT
#define AV_CH_BACK_LEFT
Definition: channel_layout.h:53
mov_get_channel_layout
static uint64_t mov_get_channel_layout(uint32_t tag, uint32_t bitmap)
Get the channel layout for the specified channel layout tag.
Definition: mov_chan.c:461
mov_ch_layouts_alac
static enum MovChannelLayoutTag mov_ch_layouts_alac[]
Definition: mov_chan.c:405
MOV_CH_LAYOUT_DTS_7_1
@ MOV_CH_LAYOUT_DTS_7_1
Definition: mov_chan.c:129
MOV_CH_LAYOUT_MPEG_4_0_A
@ MOV_CH_LAYOUT_MPEG_4_0_A
Definition: mov_chan.c:67
MOV_CH_LAYOUT_DVD_6
@ MOV_CH_LAYOUT_DVD_6
Definition: mov_chan.c:87
MOV_CH_LAYOUT_DVD_18
@ MOV_CH_LAYOUT_DVD_18
Definition: mov_chan.c:90
AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_STEREO
Definition: channel_layout.h:91
AV_CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_QUAD
Definition: channel_layout.h:99
MOV_CH_LAYOUT_MPEG_7_1_C
@ MOV_CH_LAYOUT_MPEG_7_1_C
Definition: mov_chan.c:80
MOV_CH_LAYOUT_EAC3_7_1_B
@ MOV_CH_LAYOUT_EAC3_7_1_B
Definition: mov_chan.c:112
AV_CODEC_ID_PCM_S8
@ AV_CODEC_ID_PCM_S8
Definition: codec_id.h:318
avio_rb32
unsigned int avio_rb32(AVIOContext *s)
Definition: aviobuf.c:790
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:206
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
MOV_CH_LAYOUT_DVD_5
@ MOV_CH_LAYOUT_DVD_5
Definition: mov_chan.c:86
codec_id.h
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition: channel_layout.h:52
s
#define s(width, name)
Definition: cbs_vp9.c:257
MOV_CH_LAYOUT_DTS_8_0_A
@ MOV_CH_LAYOUT_DTS_8_0_A
Definition: mov_chan.c:130
MOV_CH_LAYOUT_AC3_3_0
@ MOV_CH_LAYOUT_AC3_3_0
Definition: mov_chan.c:101
MOV_CH_LAYOUT_DTS_6_1_B
@ MOV_CH_LAYOUT_DTS_6_1_B
Definition: mov_chan.c:125
mov_ch_layout_map_7ch
static const struct MovChannelLayoutMap mov_ch_layout_map_7ch[]
Definition: mov_chan.c:247
MOV_CH_LAYOUT_EAC3_7_1_D
@ MOV_CH_LAYOUT_EAC3_7_1_D
Definition: mov_chan.c:114
AV_CH_LAYOUT_7POINT0_FRONT
#define AV_CH_LAYOUT_7POINT0_FRONT
Definition: channel_layout.h:111
AV_CH_LAYOUT_STEREO_DOWNMIX
#define AV_CH_LAYOUT_STEREO_DOWNMIX
Definition: channel_layout.h:117
MOV_CH_LAYOUT_DVD_11
@ MOV_CH_LAYOUT_DVD_11
Definition: mov_chan.c:89
channels
channels
Definition: aptx.h:33
MOV_CH_LAYOUT_MPEG_5_0_A
@ MOV_CH_LAYOUT_MPEG_5_0_A
Definition: mov_chan.c:69
MOV_CH_LAYOUT_AAC_6_1
@ MOV_CH_LAYOUT_AAC_6_1
Definition: mov_chan.c:95
AV_CH_LAYOUT_2_1
#define AV_CH_LAYOUT_2_1
Definition: channel_layout.h:93
AV_CH_STEREO_RIGHT
#define AV_CH_STEREO_RIGHT
See AV_CH_STEREO_LEFT.
Definition: channel_layout.h:68
AVFormatContext
Format I/O context.
Definition: avformat.h:1200
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:1095
MOV_CH_LAYOUT_EAC3_6_1_B
@ MOV_CH_LAYOUT_EAC3_6_1_B
Definition: mov_chan.c:109
MOV_CH_LAYOUT_USE_BITMAP
@ MOV_CH_LAYOUT_USE_BITMAP
Definition: mov_chan.c:50
AV_CH_TOP_CENTER
#define AV_CH_TOP_CENTER
Definition: channel_layout.h:60
mov_ch_layout_map_1ch
static const struct MovChannelLayoutMap mov_ch_layout_map_1ch[]
Definition: mov_chan.c:156
NULL
#define NULL
Definition: coverity.c:32
MOV_CH_LAYOUT_MPEG_6_1_A
@ MOV_CH_LAYOUT_MPEG_6_1_A
Definition: mov_chan.c:77
MOV_CH_LAYOUT_OCTAGONAL
@ MOV_CH_LAYOUT_OCTAGONAL
Definition: mov_chan.c:63
mov_codec_ch_layouts
static const struct @266 mov_codec_ch_layouts[]
MOV_CH_LAYOUT_ITU_2_2
@ MOV_CH_LAYOUT_ITU_2_2
Definition: mov_chan.c:84
AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT1
Definition: channel_layout.h:101
MOV_CH_LAYOUT_MIDSIDE
@ MOV_CH_LAYOUT_MIDSIDE
Definition: mov_chan.c:56
MovChannelLayoutMap::layout
uint64_t layout
Definition: mov_chan.c:138
MOV_CH_LAYOUT_AAC_6_0
@ MOV_CH_LAYOUT_AAC_6_0
Definition: mov_chan.c:94
MOV_CH_LAYOUT_DTS_3_1
@ MOV_CH_LAYOUT_DTS_3_1
Definition: mov_chan.c:119
AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_FRONT_LEFT_OF_CENTER
Definition: channel_layout.h:55
MovChannelLayoutMap
Definition: mov_chan.c:136
MOV_CH_LAYOUT_UNKNOWN
#define MOV_CH_LAYOUT_UNKNOWN
Definition: mov_chan.c:48
av_get_channel_layout_nb_channels
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
Definition: channel_layout.c:226
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:47
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:425
avio_rl32
unsigned int avio_rl32(AVIOContext *s)
Definition: aviobuf.c:759
MOV_CH_LAYOUT_EAC3_7_1_A
@ MOV_CH_LAYOUT_EAC3_7_1_A
Definition: mov_chan.c:111
AVIOContext
Bytestream IO Context.
Definition: avio.h:161
AV_CODEC_ID_PCM_S24LE
@ AV_CODEC_ID_PCM_S24LE
Definition: codec_id.h:326
MOV_CH_LAYOUT_DTS_8_1_B
@ MOV_CH_LAYOUT_DTS_8_1_B
Definition: mov_chan.c:133
MOV_CH_LAYOUT_DTS_6_0_A
@ MOV_CH_LAYOUT_DTS_6_0_A
Definition: mov_chan.c:121
MOV_CH_LAYOUT_MATRIXSTEREO
@ MOV_CH_LAYOUT_MATRIXSTEREO
Definition: mov_chan.c:55
MOV_CH_LAYOUT_PENTAGONAL
@ MOV_CH_LAYOUT_PENTAGONAL
Definition: mov_chan.c:61
MOV_CH_LAYOUT_EAC3_7_0_A
@ MOV_CH_LAYOUT_EAC3_7_0_A
Definition: mov_chan.c:107
size
int size
Definition: twinvq_data.h:10344
MOV_CH_LAYOUT_HEXAGONAL
@ MOV_CH_LAYOUT_HEXAGONAL
Definition: mov_chan.c:62
MOV_CH_LAYOUT_EAC3_7_1_F
@ MOV_CH_LAYOUT_EAC3_7_1_F
Definition: mov_chan.c:116
MOV_CH_LAYOUT_AMBISONIC_B_FORMAT
@ MOV_CH_LAYOUT_AMBISONIC_B_FORMAT
Definition: mov_chan.c:59
MOV_CH_LAYOUT_EAC3_7_1_E
@ MOV_CH_LAYOUT_EAC3_7_1_E
Definition: mov_chan.c:115
mov_get_channel_label
static uint32_t mov_get_channel_label(uint32_t label)
Definition: mov_chan.c:488
ff_mov_get_channel_layout_tag
uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id, uint64_t channel_layout, uint32_t *bitmap)
mov 'chan' tag reading/writing.
Definition: mov_chan.c:501
AV_CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_5POINT1_BACK
Definition: channel_layout.h:103
AV_CH_TOP_BACK_RIGHT
#define AV_CH_TOP_BACK_RIGHT
Definition: channel_layout.h:66
AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_FRONT_RIGHT_OF_CENTER
Definition: channel_layout.h:56
MOV_CH_LAYOUT_QUADRAPHONIC
@ MOV_CH_LAYOUT_QUADRAPHONIC
Definition: mov_chan.c:60
MOV_CH_LAYOUT_DTS_6_1_C
@ MOV_CH_LAYOUT_DTS_6_1_C
Definition: mov_chan.c:126
AV_CH_LAYOUT_3POINT1
#define AV_CH_LAYOUT_3POINT1
Definition: channel_layout.h:95
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
mov_ch_layout_map_5ch
static const struct MovChannelLayoutMap mov_ch_layout_map_5ch[]
Definition: mov_chan.c:208
AV_CH_LAYOUT_OCTAGONAL
#define AV_CH_LAYOUT_OCTAGONAL
Definition: channel_layout.h:115
AV_CH_LAYOUT_5POINT0
#define AV_CH_LAYOUT_5POINT0
Definition: channel_layout.h:100
MOV_CH_LAYOUT_EAC3_7_1_G
@ MOV_CH_LAYOUT_EAC3_7_1_G
Definition: mov_chan.c:117
mov_ch_layout_map_9ch
static const struct MovChannelLayoutMap mov_ch_layout_map_9ch[]
Definition: mov_chan.c:334
MOV_CH_LAYOUT_AC3_1_0_1
@ MOV_CH_LAYOUT_AC3_1_0_1
Definition: mov_chan.c:100
mov_ch_layout_map_8ch
static const struct MovChannelLayoutMap mov_ch_layout_map_8ch[]
Definition: mov_chan.c:275
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:48
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:271
MOV_CH_LAYOUT_MPEG_5_1_C
@ MOV_CH_LAYOUT_MPEG_5_1_C
Definition: mov_chan.c:75
AV_CH_LAYOUT_2POINT1
#define AV_CH_LAYOUT_2POINT1
Definition: channel_layout.h:92
MOV_CH_LAYOUT_MPEG_5_1_A
@ MOV_CH_LAYOUT_MPEG_5_1_A
Definition: mov_chan.c:73
MOV_CH_LAYOUT_EAC3_7_1_C
@ MOV_CH_LAYOUT_EAC3_7_1_C
Definition: mov_chan.c:113
MOV_CH_LAYOUT_DTS_6_0_C
@ MOV_CH_LAYOUT_DTS_6_0_C
Definition: mov_chan.c:123
MOV_CH_LAYOUT_EAC3_6_1_C
@ MOV_CH_LAYOUT_EAC3_6_1_C
Definition: mov_chan.c:110
AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1
Definition: channel_layout.h:112
MOV_CH_LAYOUT_DTS_4_1
@ MOV_CH_LAYOUT_DTS_4_1
Definition: mov_chan.c:120
AV_CODEC_ID_PCM_F64BE
@ AV_CODEC_ID_PCM_F64BE
Definition: codec_id.h:336
AV_CH_LAYOUT_4POINT1
#define AV_CH_LAYOUT_4POINT1
Definition: channel_layout.h:97
AV_CH_BACK_CENTER
#define AV_CH_BACK_CENTER
Definition: channel_layout.h:57
MOV_CH_LAYOUT_EAC3_6_1_A
@ MOV_CH_LAYOUT_EAC3_6_1_A
Definition: mov_chan.c:108
AV_CH_LAYOUT_7POINT1_WIDE
#define AV_CH_LAYOUT_7POINT1_WIDE
Definition: channel_layout.h:113
AV_CODEC_ID_PCM_S32BE
@ AV_CODEC_ID_PCM_S32BE
Definition: codec_id.h:323
MOV_CH_LAYOUT_AAC_7_0
@ MOV_CH_LAYOUT_AAC_7_0
Definition: mov_chan.c:96
MOV_CH_LAYOUT_AC3_3_1_1
@ MOV_CH_LAYOUT_AC3_3_1_1
Definition: mov_chan.c:105
mov_ch_layout_map
static const struct MovChannelLayoutMap *const mov_ch_layout_map[]
Definition: mov_chan.c:347
MovChannelLayoutMap::tag
uint32_t tag
Definition: mov_chan.c:137
mov_chan.h
tag
uint32_t tag
Definition: movenc.c:1596
AVStream
Stream structure.
Definition: avformat.h:935
MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT
@ MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT
Definition: mov_chan.c:93
AV_CH_LAYOUT_SURROUND
#define AV_CH_LAYOUT_SURROUND
Definition: channel_layout.h:94
MOV_CH_LAYOUT_MPEG_5_1_B
@ MOV_CH_LAYOUT_MPEG_5_1_B
Definition: mov_chan.c:74
MOV_CH_LAYOUT_TMH_10_2_STD
@ MOV_CH_LAYOUT_TMH_10_2_STD
Definition: mov_chan.c:98
mov_ch_layout_map_6ch
static const struct MovChannelLayoutMap mov_ch_layout_map_6ch[]
Definition: mov_chan.c:227
channel_layout.h
MOV_CH_LAYOUT_ITU_2_1
@ MOV_CH_LAYOUT_ITU_2_1
Definition: mov_chan.c:83
MOV_CH_LAYOUT_MPEG_5_1_D
@ MOV_CH_LAYOUT_MPEG_5_1_D
Definition: mov_chan.c:76
MOV_CH_LAYOUT_DTS_8_1_A
@ MOV_CH_LAYOUT_DTS_8_1_A
Definition: mov_chan.c:132
MOV_CH_LAYOUT_USE_DESCRIPTIONS
@ MOV_CH_LAYOUT_USE_DESCRIPTIONS
Definition: mov_chan.c:49
MOV_CH_LAYOUT_MONO
@ MOV_CH_LAYOUT_MONO
Definition: mov_chan.c:52
AVIOContext::eof_reached
int eof_reached
true if was unable to read due to error or eof
Definition: avio.h:239
AV_CH_SURROUND_DIRECT_LEFT
#define AV_CH_SURROUND_DIRECT_LEFT
Definition: channel_layout.h:71
MOV_CH_LAYOUT_BINAURAL
@ MOV_CH_LAYOUT_BINAURAL
Definition: mov_chan.c:58
avio_skip
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:347
mov_ch_layouts_aac
static enum MovChannelLayoutTag mov_ch_layouts_aac[]
Definition: mov_chan.c:360
MOV_CH_LAYOUT_AC3_3_0_1
@ MOV_CH_LAYOUT_AC3_3_0_1
Definition: mov_chan.c:103
MOV_CH_LAYOUT_DTS_8_0_B
@ MOV_CH_LAYOUT_DTS_8_0_B
Definition: mov_chan.c:131
AV_CODEC_ID_PCM_S32LE
@ AV_CODEC_ID_PCM_S32LE
Definition: codec_id.h:322
mov_ch_layout_map_2ch
static const struct MovChannelLayoutMap mov_ch_layout_map_2ch[]
Definition: mov_chan.c:161
AV_CODEC_ID_PCM_U8
@ AV_CODEC_ID_PCM_U8
Definition: codec_id.h:319
MOV_CH_LAYOUT_AUDIOUNIT_6_0
@ MOV_CH_LAYOUT_AUDIOUNIT_6_0
Definition: mov_chan.c:91
AV_CODEC_ID_PCM_F64LE
@ AV_CODEC_ID_PCM_F64LE
Definition: codec_id.h:337
MOV_CH_LAYOUT_MPEG_3_0_A
@ MOV_CH_LAYOUT_MPEG_3_0_A
Definition: mov_chan.c:65
AVCodecParameters::channel_layout
uint64_t channel_layout
Audio only.
Definition: codec_par.h:162
MOV_CH_LAYOUT_DTS_6_1_D
@ MOV_CH_LAYOUT_DTS_6_1_D
Definition: mov_chan.c:127
AV_CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_4POINT0
Definition: channel_layout.h:96
MOV_CH_LAYOUT_MPEG_5_0_C
@ MOV_CH_LAYOUT_MPEG_5_0_C
Definition: mov_chan.c:71
AV_CH_LAYOUT_6POINT1_BACK
#define AV_CH_LAYOUT_6POINT1_BACK
Definition: channel_layout.h:108
AV_CODEC_ID_PCM_F32LE
@ AV_CODEC_ID_PCM_F32LE
Definition: codec_id.h:335
mov_ch_layout_map_3ch
static const struct MovChannelLayoutMap mov_ch_layout_map_3ch[]
Definition: mov_chan.c:175
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1
@ MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1
Definition: mov_chan.c:81
AV_CH_BACK_RIGHT
#define AV_CH_BACK_RIGHT
Definition: channel_layout.h:54
MOV_CH_LAYOUT_EAC3_6_0_A
@ MOV_CH_LAYOUT_EAC3_6_0_A
Definition: mov_chan.c:106
mov_ch_layout_map_misc
static const struct MovChannelLayoutMap mov_ch_layout_map_misc[]
Definition: mov_chan.c:141
AV_CH_STEREO_LEFT
#define AV_CH_STEREO_LEFT
Stereo downmix.
Definition: channel_layout.h:67
MOV_CH_LAYOUT_AUDIOUNIT_7_0
@ MOV_CH_LAYOUT_AUDIOUNIT_7_0
Definition: mov_chan.c:92
mov_ch_layouts_wav
static enum MovChannelLayoutTag mov_ch_layouts_wav[]
Definition: mov_chan.c:417
AV_CODEC_ID_PCM_S24BE
@ AV_CODEC_ID_PCM_S24BE
Definition: codec_id.h:327
AV_CH_LAYOUT_2_2
#define AV_CH_LAYOUT_2_2
Definition: channel_layout.h:98
mov_ch_layouts_ac3
static enum MovChannelLayoutTag mov_ch_layouts_ac3[]
Definition: mov_chan.c:387
MOV_CH_LAYOUT_CUBE
@ MOV_CH_LAYOUT_CUBE
Definition: mov_chan.c:64
MOV_CH_LAYOUT_SMPTE_DTV
@ MOV_CH_LAYOUT_SMPTE_DTV
Definition: mov_chan.c:82
mov_ch_layout_map_4ch
static const struct MovChannelLayoutMap mov_ch_layout_map_4ch[]
Definition: mov_chan.c:186
ff_mov_read_chan
int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st, int64_t size)
Read 'chan' tag from the input stream.
Definition: mov_chan.c:554
MOV_CH_LAYOUT_DVD_10
@ MOV_CH_LAYOUT_DVD_10
Definition: mov_chan.c:88