FFmpeg
isom.c
Go to the documentation of this file.
1 /*
2  * ISO Media common code
3  * Copyright (c) 2001 Fabrice Bellard
4  * Copyright (c) 2002 Francois Revol <revol@free.fr>
5  * Copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #include "avformat.h"
25 #include "internal.h"
26 #include "isom.h"
27 #include "libavcodec/mpeg4audio.h"
29 #include "libavutil/avstring.h"
30 #include "libavutil/intreadwrite.h"
31 
32 /* http://www.mp4ra.org */
33 /* ordered by muxing preference */
35  { AV_CODEC_ID_MOV_TEXT , 0x08 },
36  { AV_CODEC_ID_MPEG4 , 0x20 },
37  { AV_CODEC_ID_H264 , 0x21 },
38  { AV_CODEC_ID_HEVC , 0x23 },
39  { AV_CODEC_ID_AAC , 0x40 },
40  { AV_CODEC_ID_MP4ALS , 0x40 }, /* 14496-3 ALS */
41  { AV_CODEC_ID_MPEG2VIDEO , 0x61 }, /* MPEG-2 Main */
42  { AV_CODEC_ID_MPEG2VIDEO , 0x60 }, /* MPEG-2 Simple */
43  { AV_CODEC_ID_MPEG2VIDEO , 0x62 }, /* MPEG-2 SNR */
44  { AV_CODEC_ID_MPEG2VIDEO , 0x63 }, /* MPEG-2 Spatial */
45  { AV_CODEC_ID_MPEG2VIDEO , 0x64 }, /* MPEG-2 High */
46  { AV_CODEC_ID_MPEG2VIDEO , 0x65 }, /* MPEG-2 422 */
47  { AV_CODEC_ID_AAC , 0x66 }, /* MPEG-2 AAC Main */
48  { AV_CODEC_ID_AAC , 0x67 }, /* MPEG-2 AAC Low */
49  { AV_CODEC_ID_AAC , 0x68 }, /* MPEG-2 AAC SSR */
50  { AV_CODEC_ID_MP3 , 0x69 }, /* 13818-3 */
51  { AV_CODEC_ID_MP2 , 0x69 }, /* 11172-3 */
52  { AV_CODEC_ID_MPEG1VIDEO , 0x6A }, /* 11172-2 */
53  { AV_CODEC_ID_MP3 , 0x6B }, /* 11172-3 */
54  { AV_CODEC_ID_MJPEG , 0x6C }, /* 10918-1 */
55  { AV_CODEC_ID_PNG , 0x6D },
56  { AV_CODEC_ID_JPEG2000 , 0x6E }, /* 15444-1 */
57  { AV_CODEC_ID_VC1 , 0xA3 },
58  { AV_CODEC_ID_DIRAC , 0xA4 },
59  { AV_CODEC_ID_AC3 , 0xA5 },
60  { AV_CODEC_ID_EAC3 , 0xA6 },
61  { AV_CODEC_ID_DTS , 0xA9 }, /* mp4ra.org */
62  { AV_CODEC_ID_OPUS , 0xAD }, /* mp4ra.org */
63  { AV_CODEC_ID_VP9 , 0xB1 }, /* mp4ra.org */
64  { AV_CODEC_ID_FLAC , 0xC1 }, /* nonstandard, update when there is a standard value */
65  { AV_CODEC_ID_TSCC2 , 0xD0 }, /* nonstandard, camtasia uses it */
66  { AV_CODEC_ID_EVRC , 0xD1 }, /* nonstandard, pvAuthor uses it */
67  { AV_CODEC_ID_VORBIS , 0xDD }, /* nonstandard, gpac uses it */
68  { AV_CODEC_ID_DVD_SUBTITLE, 0xE0 }, /* nonstandard, see unsupported-embedded-subs-2.mp4 */
69  { AV_CODEC_ID_QCELP , 0xE1 },
70  { AV_CODEC_ID_MPEG4SYSTEMS, 0x01 },
71  { AV_CODEC_ID_MPEG4SYSTEMS, 0x02 },
72  { AV_CODEC_ID_NONE , 0 },
73 };
74 
76 /* { AV_CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */
77 
78  { AV_CODEC_ID_RAWVIDEO, MKTAG('r', 'a', 'w', ' ') }, /* uncompressed RGB */
79  { AV_CODEC_ID_RAWVIDEO, MKTAG('y', 'u', 'v', '2') }, /* uncompressed YUV422 */
80  { AV_CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') }, /* uncompressed 8-bit 4:2:2 */
81  { AV_CODEC_ID_RAWVIDEO, MKTAG('y', 'u', 'v', 's') }, /* same as 2VUY but byte-swapped */
82 
83  { AV_CODEC_ID_RAWVIDEO, MKTAG('L', '5', '5', '5') },
84  { AV_CODEC_ID_RAWVIDEO, MKTAG('L', '5', '6', '5') },
85  { AV_CODEC_ID_RAWVIDEO, MKTAG('B', '5', '6', '5') },
86  { AV_CODEC_ID_RAWVIDEO, MKTAG('2', '4', 'B', 'G') },
87  { AV_CODEC_ID_RAWVIDEO, MKTAG('B', 'G', 'R', 'A') },
88  { AV_CODEC_ID_RAWVIDEO, MKTAG('R', 'G', 'B', 'A') },
89  { AV_CODEC_ID_RAWVIDEO, MKTAG('A', 'B', 'G', 'R') },
90  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', '1', '6', 'g') },
91  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', '4', '8', 'r') },
92  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', '6', '4', 'a') },
93  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', 'x', 'b', 'g') }, /* BOXX */
94  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', 'x', 'r', 'g') },
95  { AV_CODEC_ID_RAWVIDEO, MKTAG('b', 'x', 'y', 'v') },
96  { AV_CODEC_ID_RAWVIDEO, MKTAG('N', 'O', '1', '6') },
97  { AV_CODEC_ID_RAWVIDEO, MKTAG('D', 'V', 'O', 'O') }, /* Digital Voodoo SD 8 Bit */
98  { AV_CODEC_ID_RAWVIDEO, MKTAG('R', '4', '2', '0') }, /* Radius DV YUV PAL */
99  { AV_CODEC_ID_RAWVIDEO, MKTAG('R', '4', '1', '1') }, /* Radius DV YUV NTSC */
100 
101  { AV_CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') }, /* uncompressed 10-bit RGB */
102  { AV_CODEC_ID_R10K, MKTAG('R', '1', '0', 'g') }, /* uncompressed 10-bit RGB */
103  { AV_CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, /* uncompressed 10-bit RGB */
104  { AV_CODEC_ID_AVUI, MKTAG('A', 'V', 'U', 'I') }, /* AVID Uncompressed deinterleaved UYVY422 */
105  { AV_CODEC_ID_AVRP, MKTAG('A', 'V', 'r', 'p') }, /* Avid 1:1 10-bit RGB Packer */
106  { AV_CODEC_ID_AVRP, MKTAG('S', 'U', 'D', 'S') }, /* Avid DS Uncompressed */
107  { AV_CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, /* uncompressed 10-bit 4:2:2 */
108  { AV_CODEC_ID_V210, MKTAG('b', 'x', 'y', '2') }, /* BOXX 10-bit 4:2:2 */
109  { AV_CODEC_ID_V308, MKTAG('v', '3', '0', '8') }, /* uncompressed 8-bit 4:4:4 */
110  { AV_CODEC_ID_V408, MKTAG('v', '4', '0', '8') }, /* uncompressed 8-bit 4:4:4:4 */
111  { AV_CODEC_ID_V410, MKTAG('v', '4', '1', '0') }, /* uncompressed 10-bit 4:4:4 */
112  { AV_CODEC_ID_Y41P, MKTAG('Y', '4', '1', 'P') }, /* uncompressed 12-bit 4:1:1 */
113  { AV_CODEC_ID_YUV4, MKTAG('y', 'u', 'v', '4') }, /* libquicktime packed yuv420p */
114  { AV_CODEC_ID_TARGA_Y216, MKTAG('Y', '2', '1', '6') },
115 
116  { AV_CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, /* PhotoJPEG */
117  { AV_CODEC_ID_MJPEG, MKTAG('m', 'j', 'p', 'a') }, /* Motion-JPEG (format A) */
118  { AV_CODEC_ID_AVRN , MKTAG('A', 'V', 'D', 'J') }, /* MJPEG with alpha-channel (AVID JFIF meridien compressed) */
119 /* { AV_CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') }, *//* MJPEG with alpha-channel (AVID ABVB/Truevision NuVista) */
120  { AV_CODEC_ID_MJPEG, MKTAG('d', 'm', 'b', '1') }, /* Motion JPEG OpenDML */
121  { AV_CODEC_ID_MJPEGB, MKTAG('m', 'j', 'p', 'b') }, /* Motion-JPEG (format B) */
122 
123  { AV_CODEC_ID_SVQ1, MKTAG('S', 'V', 'Q', '1') }, /* Sorenson Video v1 */
124  { AV_CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') }, /* Sorenson Video v1 */
125  { AV_CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', 'i') }, /* Sorenson Video v1 (from QT specs)*/
126  { AV_CODEC_ID_SVQ3, MKTAG('S', 'V', 'Q', '3') }, /* Sorenson Video v3 */
127 
128  { AV_CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
129  { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') }, /* OpenDiVX *//* sample files at http://heroinewarrior.com/xmovie.php3 use this tag */
130  { AV_CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
131  { AV_CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') }, /* experimental: 3IVX files before ivx D4 4.5.1 */
132 
133  { AV_CODEC_ID_H263, MKTAG('h', '2', '6', '3') }, /* H.263 */
134  { AV_CODEC_ID_H263, MKTAG('s', '2', '6', '3') }, /* H.263 ?? works */
135 
136  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 'p') }, /* DV PAL */
137  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, /* DV NTSC */
138  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'p', 'p') }, /* DVCPRO PAL produced by FCP */
139  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'p') }, /* DVCPRO50 PAL produced by FCP */
140  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'n') }, /* DVCPRO50 NTSC produced by FCP */
141  { AV_CODEC_ID_DVVIDEO, MKTAG('A', 'V', 'd', 'v') }, /* AVID DV */
142  { AV_CODEC_ID_DVVIDEO, MKTAG('A', 'V', 'd', '1') }, /* AVID DV100 */
143  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'q') }, /* DVCPRO HD 720p50 */
144  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'p') }, /* DVCPRO HD 720p60 */
145  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') },
146  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '2') },
147  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '4') },
148  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '5') }, /* DVCPRO HD 50i produced by FCP */
149  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '6') }, /* DVCPRO HD 60i produced by FCP */
150  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '3') }, /* DVCPRO HD 30p produced by FCP */
151 
152  { AV_CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, /* On2 VP3 */
153  { AV_CODEC_ID_RPZA, MKTAG('r', 'p', 'z', 'a') }, /* Apple Video (RPZA) */
154  { AV_CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */
155  { AV_CODEC_ID_8BPS, MKTAG('8', 'B', 'P', 'S') }, /* Planar RGB (8BPS) */
156  { AV_CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */
157  { AV_CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */
158  { AV_CODEC_ID_SGIRLE, MKTAG('r', 'l', 'e', '1') }, /* SGI RLE 8-bit */
159  { AV_CODEC_ID_MSRLE, MKTAG('W', 'R', 'L', 'E') },
160  { AV_CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
161  { AV_CODEC_ID_CDTOONS, MKTAG('Q', 'k', 'B', 'k') }, /* CDToons */
162 
163  { AV_CODEC_ID_RAWVIDEO, MKTAG('W', 'R', 'A', 'W') },
164 
165  { AV_CODEC_ID_HEVC, MKTAG('h', 'e', 'v', '1') }, /* HEVC/H.265 which indicates parameter sets may be in ES */
166  { AV_CODEC_ID_HEVC, MKTAG('h', 'v', 'c', '1') }, /* HEVC/H.265 which indicates parameter sets shall not be in ES */
167  { AV_CODEC_ID_HEVC, MKTAG('d', 'v', 'h', 'e') }, /* HEVC-based Dolby Vision derived from hev1 */
168  /* dvh1 is handled within mov.c */
169 
170  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
171  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '2') },
172  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '3') },
173  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '4') },
174  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', 'p') }, /* AVC-Intra 50M 720p24/30/60 */
175  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', 'q') }, /* AVC-Intra 50M 720p25/50 */
176  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', '2') }, /* AVC-Intra 50M 1080p25/50 */
177  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', '3') }, /* AVC-Intra 50M 1080p24/30/60 */
178  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', '5') }, /* AVC-Intra 50M 1080i50 */
179  { AV_CODEC_ID_H264, MKTAG('a', 'i', '5', '6') }, /* AVC-Intra 50M 1080i60 */
180  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', 'p') }, /* AVC-Intra 100M 720p24/30/60 */
181  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', 'q') }, /* AVC-Intra 100M 720p25/50 */
182  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', '2') }, /* AVC-Intra 100M 1080p25/50 */
183  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', '3') }, /* AVC-Intra 100M 1080p24/30/60 */
184  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', '5') }, /* AVC-Intra 100M 1080i50 */
185  { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', '6') }, /* AVC-Intra 100M 1080i60 */
186  { AV_CODEC_ID_H264, MKTAG('A', 'V', 'i', 'n') }, /* AVC-Intra with implicit SPS/PPS */
187  { AV_CODEC_ID_H264, MKTAG('a', 'i', 'v', 'x') }, /* XAVC 10-bit 4:2:2 */
188  { AV_CODEC_ID_H264, MKTAG('r', 'v', '6', '4') }, /* X-Com Radvision */
189  { AV_CODEC_ID_H264, MKTAG('x', 'a', 'l', 'g') }, /* XAVC-L HD422 produced by FCP */
190  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'l', 'g') }, /* Panasonic P2 AVC-LongG */
191  { AV_CODEC_ID_H264, MKTAG('d', 'v', 'a', '1') }, /* AVC-based Dolby Vision derived from avc1 */
192  { AV_CODEC_ID_H264, MKTAG('d', 'v', 'a', 'v') }, /* AVC-based Dolby Vision derived from avc3 */
193 
194  { AV_CODEC_ID_VP8, MKTAG('v', 'p', '0', '8') }, /* VP8 */
195  { AV_CODEC_ID_VP9, MKTAG('v', 'p', '0', '9') }, /* VP9 */
196  { AV_CODEC_ID_AV1, MKTAG('a', 'v', '0', '1') }, /* AV1 */
197 
198  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', '1', 'v', ' ') },
199  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', '1', 'v', '1') }, /* Apple MPEG-1 Camcorder */
200  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'e', 'g') }, /* MPEG */
201  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', '1', 'v') }, /* CoreMedia CMVideoCodecType */
202  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', '2', 'v', '1') }, /* Apple MPEG-2 Camcorder */
203  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '1') }, /* MPEG-2 HDV 720p30 */
204  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '2') }, /* MPEG-2 HDV 1080i60 */
205  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '3') }, /* MPEG-2 HDV 1080i50 */
206  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '4') }, /* MPEG-2 HDV 720p24 */
207  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '5') }, /* MPEG-2 HDV 720p25 */
208  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '6') }, /* MPEG-2 HDV 1080p24 */
209  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '7') }, /* MPEG-2 HDV 1080p25 */
210  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '8') }, /* MPEG-2 HDV 1080p30 */
211  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '9') }, /* MPEG-2 HDV 720p60 JVC */
212  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', 'a') }, /* MPEG-2 HDV 720p50 */
213  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'n') }, /* MPEG-2 IMX NTSC 525/60 50mb/s produced by FCP */
214  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'p') }, /* MPEG-2 IMX PAL 625/50 50mb/s produced by FCP */
215  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '4', 'n') }, /* MPEG-2 IMX NTSC 525/60 40mb/s produced by FCP */
216  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '4', 'p') }, /* MPEG-2 IMX PAL 625/50 40mb/s produced by FCP */
217  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'n') }, /* MPEG-2 IMX NTSC 525/60 30mb/s produced by FCP */
218  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'p') }, /* MPEG-2 IMX PAL 625/50 30mb/s produced by FCP */
219  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', '1') }, /* XDCAM HD422 720p30 CBR */
220  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', '4') }, /* XDCAM HD422 720p24 CBR */
221  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', '5') }, /* XDCAM HD422 720p25 CBR */
222  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', '9') }, /* XDCAM HD422 720p60 CBR */
223  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'a') }, /* XDCAM HD422 720p50 CBR */
224  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'b') }, /* XDCAM HD422 1080i60 CBR */
225  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'c') }, /* XDCAM HD422 1080i50 CBR */
226  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'd') }, /* XDCAM HD422 1080p24 CBR */
227  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'e') }, /* XDCAM HD422 1080p25 CBR */
228  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'f') }, /* XDCAM HD422 1080p30 CBR */
229  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '1') }, /* XDCAM EX 720p30 VBR */
230  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '2') }, /* XDCAM HD 1080i60 */
231  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '3') }, /* XDCAM HD 1080i50 VBR */
232  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '4') }, /* XDCAM EX 720p24 VBR */
233  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '5') }, /* XDCAM EX 720p25 VBR */
234  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '6') }, /* XDCAM HD 1080p24 VBR */
235  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '7') }, /* XDCAM HD 1080p25 VBR */
236  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '8') }, /* XDCAM HD 1080p30 VBR */
237  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '9') }, /* XDCAM EX 720p60 VBR */
238  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'a') }, /* XDCAM EX 720p50 VBR */
239  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'b') }, /* XDCAM EX 1080i60 VBR */
240  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'c') }, /* XDCAM EX 1080i50 VBR */
241  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'd') }, /* XDCAM EX 1080p24 VBR */
242  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'e') }, /* XDCAM EX 1080p25 VBR */
243  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'f') }, /* XDCAM EX 1080p30 VBR */
244  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'h', 'd') }, /* XDCAM HD 540p */
245  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'h', '2') }, /* XDCAM HD422 540p */
246  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('A', 'V', 'm', 'p') }, /* AVID IMX PAL */
247  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', '2', 'v') }, /* FCP5 */
248 
249  { AV_CODEC_ID_JPEG2000, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
250 
251  { AV_CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, /* Truevision Targa */
252  { AV_CODEC_ID_TIFF, MKTAG('t', 'i', 'f', 'f') }, /* TIFF embedded in MOV */
253  { AV_CODEC_ID_GIF, MKTAG('g', 'i', 'f', ' ') }, /* embedded gif files as frames (usually one "click to play movie" frame) */
254  { AV_CODEC_ID_PNG, MKTAG('p', 'n', 'g', ' ') },
255  { AV_CODEC_ID_PNG, MKTAG('M', 'N', 'G', ' ') },
256 
257  { AV_CODEC_ID_VC1, MKTAG('v', 'c', '-', '1') }, /* SMPTE RP 2025 */
258  { AV_CODEC_ID_CAVS, MKTAG('a', 'v', 's', '2') },
259 
260  { AV_CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
261  { AV_CODEC_ID_DNXHD, MKTAG('A', 'V', 'd', 'n') }, /* AVID DNxHD */
262  { AV_CODEC_ID_DNXHD, MKTAG('A', 'V', 'd', 'h') }, /* AVID DNxHR */
263  { AV_CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
264  { AV_CODEC_ID_MSMPEG4V3, MKTAG('3', 'I', 'V', 'D') }, /* 3ivx DivX Doctor */
265  { AV_CODEC_ID_RAWVIDEO, MKTAG('A', 'V', '1', 'x') }, /* AVID 1:1x */
266  { AV_CODEC_ID_RAWVIDEO, MKTAG('A', 'V', 'u', 'p') },
267  { AV_CODEC_ID_SGI, MKTAG('s', 'g', 'i', ' ') }, /* SGI */
268  { AV_CODEC_ID_DPX, MKTAG('d', 'p', 'x', ' ') }, /* DPX */
269  { AV_CODEC_ID_EXR, MKTAG('e', 'x', 'r', ' ') }, /* OpenEXR */
270 
271  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'h') }, /* Apple ProRes 422 High Quality */
272  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'n') }, /* Apple ProRes 422 Standard Definition */
273  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 's') }, /* Apple ProRes 422 LT */
274  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'o') }, /* Apple ProRes 422 Proxy */
275  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', '4', 'h') }, /* Apple ProRes 4444 */
276  { AV_CODEC_ID_PRORES, MKTAG('a', 'p', '4', 'x') }, /* Apple ProRes 4444 XQ */
277  { AV_CODEC_ID_FLIC, MKTAG('f', 'l', 'i', 'c') },
278 
279  { AV_CODEC_ID_AIC, MKTAG('i', 'c', 'o', 'd') },
280 
281  { AV_CODEC_ID_HAP, MKTAG('H', 'a', 'p', '1') },
282  { AV_CODEC_ID_HAP, MKTAG('H', 'a', 'p', '5') },
283  { AV_CODEC_ID_HAP, MKTAG('H', 'a', 'p', 'Y') },
284  { AV_CODEC_ID_HAP, MKTAG('H', 'a', 'p', 'A') },
285  { AV_CODEC_ID_HAP, MKTAG('H', 'a', 'p', 'M') },
286 
287  { AV_CODEC_ID_DXV, MKTAG('D', 'X', 'D', '3') },
288  { AV_CODEC_ID_DXV, MKTAG('D', 'X', 'D', 'I') },
289 
290  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '0', 'R', '0') },
291  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '0', 'R', 'A') },
292  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '0', 'R', 'G') },
293  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '0', 'Y', '2') },
294  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '0', 'Y', '4') },
295  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'R', 'G') },
296  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'R', 'A') },
297  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'G', '0') },
298  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'Y', '0') },
299  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'Y', '2') },
300  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'Y', '4') },
301  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'Y', 'A') },
302  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '2', 'R', 'A') },
303  { AV_CODEC_ID_MAGICYUV, MKTAG('M', '2', 'R', 'G') },
304 
305  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '0') },
306  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '1') },
307  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '2') },
308  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '3') },
309  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '4') },
310  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '5') },
311  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '6') },
312  { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '7') },
313 
314  { AV_CODEC_ID_PIXLET, MKTAG('p', 'x', 'l', 't') },
315 
316  { AV_CODEC_ID_NOTCHLC, MKTAG('n', 'c', 'l', 'c') },
317 
318  { AV_CODEC_ID_NONE, 0 },
319 };
320 
322  { AV_CODEC_ID_AAC, MKTAG('m', 'p', '4', 'a') },
323  { AV_CODEC_ID_AC3, MKTAG('a', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F */
324  { AV_CODEC_ID_AC3, MKTAG('s', 'a', 'c', '3') }, /* Nero Recode */
325  { AV_CODEC_ID_ADPCM_IMA_QT, MKTAG('i', 'm', 'a', '4') },
326  { AV_CODEC_ID_ALAC, MKTAG('a', 'l', 'a', 'c') },
327  { AV_CODEC_ID_AMR_NB, MKTAG('s', 'a', 'm', 'r') }, /* AMR-NB 3gp */
328  { AV_CODEC_ID_AMR_WB, MKTAG('s', 'a', 'w', 'b') }, /* AMR-WB 3gp */
329  { AV_CODEC_ID_DTS, MKTAG('d', 't', 's', 'c') }, /* DTS formats prior to DTS-HD */
330  { AV_CODEC_ID_DTS, MKTAG('d', 't', 's', 'h') }, /* DTS-HD audio formats */
331  { AV_CODEC_ID_DTS, MKTAG('d', 't', 's', 'l') }, /* DTS-HD Lossless formats */
332  { AV_CODEC_ID_DTS, MKTAG('d', 't', 's', 'e') }, /* DTS Express */
333  { AV_CODEC_ID_DTS, MKTAG('D', 'T', 'S', ' ') }, /* non-standard */
334  { AV_CODEC_ID_EAC3, MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F (only valid in ISOBMFF) */
335  { AV_CODEC_ID_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
336  { AV_CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
337  { AV_CODEC_ID_GSM, MKTAG('a', 'g', 's', 'm') },
338  { AV_CODEC_ID_ILBC, MKTAG('i', 'l', 'b', 'c') },
339  { AV_CODEC_ID_MACE3, MKTAG('M', 'A', 'C', '3') },
340  { AV_CODEC_ID_MACE6, MKTAG('M', 'A', 'C', '6') },
341  { AV_CODEC_ID_MP1, MKTAG('.', 'm', 'p', '1') },
342  { AV_CODEC_ID_MP2, MKTAG('.', 'm', 'p', '2') },
343  { AV_CODEC_ID_MP3, MKTAG('.', 'm', 'p', '3') },
344  { AV_CODEC_ID_MP3, MKTAG('m', 'p', '3', ' ') }, /* vlc */
345  { AV_CODEC_ID_MP3, 0x6D730055 },
346  { AV_CODEC_ID_NELLYMOSER, MKTAG('n', 'm', 'o', 's') }, /* Flash Media Server */
347  { AV_CODEC_ID_NELLYMOSER, MKTAG('N', 'E', 'L', 'L') }, /* Perian */
348  { AV_CODEC_ID_PCM_ALAW, MKTAG('a', 'l', 'a', 'w') },
349  { AV_CODEC_ID_PCM_F32BE, MKTAG('f', 'l', '3', '2') },
350  { AV_CODEC_ID_PCM_F32LE, MKTAG('f', 'l', '3', '2') },
351  { AV_CODEC_ID_PCM_F64BE, MKTAG('f', 'l', '6', '4') },
352  { AV_CODEC_ID_PCM_F64LE, MKTAG('f', 'l', '6', '4') },
353  { AV_CODEC_ID_PCM_MULAW, MKTAG('u', 'l', 'a', 'w') },
354  { AV_CODEC_ID_PCM_S16BE, MKTAG('t', 'w', 'o', 's') },
355  { AV_CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') },
356  { AV_CODEC_ID_PCM_S16BE, MKTAG('l', 'p', 'c', 'm') },
357  { AV_CODEC_ID_PCM_S16LE, MKTAG('l', 'p', 'c', 'm') },
358  { AV_CODEC_ID_PCM_S24BE, MKTAG('i', 'n', '2', '4') },
359  { AV_CODEC_ID_PCM_S24LE, MKTAG('i', 'n', '2', '4') },
360  { AV_CODEC_ID_PCM_S32BE, MKTAG('i', 'n', '3', '2') },
361  { AV_CODEC_ID_PCM_S32LE, MKTAG('i', 'n', '3', '2') },
362  { AV_CODEC_ID_PCM_S8, MKTAG('s', 'o', 'w', 't') },
363  { AV_CODEC_ID_PCM_U8, MKTAG('r', 'a', 'w', ' ') },
364  { AV_CODEC_ID_PCM_U8, MKTAG('N', 'O', 'N', 'E') },
365  { AV_CODEC_ID_QCELP, MKTAG('Q', 'c', 'l', 'p') },
366  { AV_CODEC_ID_QCELP, MKTAG('Q', 'c', 'l', 'q') },
367  { AV_CODEC_ID_QCELP, MKTAG('s', 'q', 'c', 'p') }, /* ISO Media fourcc */
368  { AV_CODEC_ID_QDM2, MKTAG('Q', 'D', 'M', '2') },
369  { AV_CODEC_ID_QDMC, MKTAG('Q', 'D', 'M', 'C') },
370  { AV_CODEC_ID_SPEEX, MKTAG('s', 'p', 'e', 'x') }, /* Flash Media Server */
371  { AV_CODEC_ID_SPEEX, MKTAG('S', 'P', 'X', 'N') }, /* ZygoAudio (quality 10 mode) */
372  { AV_CODEC_ID_EVRC, MKTAG('s', 'e', 'v', 'c') }, /* 3GPP2 */
373  { AV_CODEC_ID_SMV, MKTAG('s', 's', 'm', 'v') }, /* 3GPP2 */
374  { AV_CODEC_ID_FLAC, MKTAG('f', 'L', 'a', 'C') }, /* nonstandard */
375  { AV_CODEC_ID_TRUEHD, MKTAG('m', 'l', 'p', 'a') }, /* mp4ra.org */
376  { AV_CODEC_ID_OPUS, MKTAG('O', 'p', 'u', 's') }, /* mp4ra.org */
377  { AV_CODEC_ID_MPEGH_3D_AUDIO, MKTAG('m', 'h', 'm', '1') }, /* MPEG-H 3D Audio bitstream */
378  { AV_CODEC_ID_NONE, 0 },
379 };
380 
382  { AV_CODEC_ID_MOV_TEXT, MKTAG('t', 'e', 'x', 't') },
383  { AV_CODEC_ID_MOV_TEXT, MKTAG('t', 'x', '3', 'g') },
384  { AV_CODEC_ID_EIA_608, MKTAG('c', '6', '0', '8') },
385  { AV_CODEC_ID_NONE, 0 },
386 };
387 
389  { AV_CODEC_ID_BIN_DATA, MKTAG('g', 'p', 'm', 'd') },
390  { AV_CODEC_ID_NONE, 0 },
391 };
392 
393 /* map numeric codes from mdhd atom to ISO 639 */
394 /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */
395 /* http://developer.apple.com/documentation/mac/Text/Text-368.html */
396 /* deprecated by putting the code as 3*5 bits ASCII */
397 static const char mov_mdhd_language_map[][4] = {
398  /* 0-9 */
399  "eng", "fra", "ger", "ita", "dut", "sve", "spa", "dan", "por", "nor",
400  "heb", "jpn", "ara", "fin", "gre", "ice", "mlt", "tur", "hr "/*scr*/, "chi"/*ace?*/,
401  "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", "",
402  "fo ", "", "rus", "chi", "", "iri", "alb", "ron", "ces", "slk",
403  "slv", "yid", "sr ", "mac", "bul", "ukr", "bel", "uzb", "kaz", "aze",
404  /*?*/
405  "aze", "arm", "geo", "mol", "kir", "tgk", "tuk", "mon", "", "pus",
406  "kur", "kas", "snd", "tib", "nep", "san", "mar", "ben", "asm", "guj",
407  "pa ", "ori", "mal", "kan", "tam", "tel", "", "bur", "khm", "lao",
408  /* roman? arabic? */
409  "vie", "ind", "tgl", "may", "may", "amh", "tir", "orm", "som", "swa",
410  /*==rundi?*/
411  "", "run", "", "mlg", "epo", "", "", "", "", "",
412  /* 100 */
413  "", "", "", "", "", "", "", "", "", "",
414  "", "", "", "", "", "", "", "", "", "",
415  "", "", "", "", "", "", "", "", "wel", "baq",
416  "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
417 };
418 
419 int ff_mov_iso639_to_lang(const char lang[4], int mp4)
420 {
421  int i, code = 0;
422 
423  /* old way, only for QT? */
424  for (i = 0; lang[0] && !mp4 && i < FF_ARRAY_ELEMS(mov_mdhd_language_map); i++) {
425  if (!strcmp(lang, mov_mdhd_language_map[i]))
426  return i;
427  }
428  /* XXX:can we do that in mov too? */
429  if (!mp4)
430  return -1;
431  /* handle undefined as such */
432  if (lang[0] == '\0')
433  lang = "und";
434  /* 5 bits ASCII */
435  for (i = 0; i < 3; i++) {
436  uint8_t c = lang[i];
437  c -= 0x60;
438  if (c > 0x1f)
439  return -1;
440  code <<= 5;
441  code |= c;
442  }
443  return code;
444 }
445 
446 int ff_mov_lang_to_iso639(unsigned code, char to[4])
447 {
448  int i;
449  memset(to, 0, 4);
450  /* is it the mangled iso code? */
451  /* see http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt */
452  if (code >= 0x400 && code != 0x7fff) {
453  for (i = 2; i >= 0; i--) {
454  to[i] = 0x60 + (code & 0x1f);
455  code >>= 5;
456  }
457  return 1;
458  }
459  /* old fashion apple lang code */
461  return 0;
462  if (!mov_mdhd_language_map[code][0])
463  return 0;
464  memcpy(to, mov_mdhd_language_map[code], 4);
465  return 1;
466 }
467 
469 {
470  int len = 0;
471  int count = 4;
472  while (count--) {
473  int c = avio_r8(pb);
474  len = (len << 7) | (c & 0x7f);
475  if (!(c & 0x80))
476  break;
477  }
478  return len;
479 }
480 
482 {
483  int len;
484  *tag = avio_r8(pb);
486  av_log(fc, AV_LOG_TRACE, "MPEG-4 description: tag=0x%02x len=%d\n", *tag, len);
487  return len;
488 }
489 
490 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
491 {
492  int flags;
493  if (es_id) *es_id = avio_rb16(pb);
494  else avio_rb16(pb);
495  flags = avio_r8(pb);
496  if (flags & 0x80) //streamDependenceFlag
497  avio_rb16(pb);
498  if (flags & 0x40) { //URL_Flag
499  int len = avio_r8(pb);
500  avio_skip(pb, len);
501  }
502  if (flags & 0x20) //OCRstreamFlag
503  avio_rb16(pb);
504 }
505 
506 static const AVCodecTag mp4_audio_types[] = {
507  { AV_CODEC_ID_MP3ON4, AOT_PS }, /* old mp3on4 draft */
508  { AV_CODEC_ID_MP3ON4, AOT_L1 }, /* layer 1 */
509  { AV_CODEC_ID_MP3ON4, AOT_L2 }, /* layer 2 */
510  { AV_CODEC_ID_MP3ON4, AOT_L3 }, /* layer 3 */
511  { AV_CODEC_ID_MP4ALS, AOT_ALS }, /* MPEG-4 ALS */
513 };
514 
516 {
517  enum AVCodecID codec_id;
518  unsigned v;
519  int len, tag;
520  int ret;
521  int object_type_id = avio_r8(pb);
522  avio_r8(pb); /* stream type */
523  avio_rb24(pb); /* buffer size db */
524 
525  v = avio_rb32(pb);
526 
527  // TODO: fix this with codecpar
528 #if FF_API_LAVF_AVCTX
530  if (v < INT32_MAX)
531  st->codec->rc_max_rate = v;
533 #endif
534 
535  st->codecpar->bit_rate = avio_rb32(pb); /* avg bitrate */
536 
537  codec_id= ff_codec_get_id(ff_mp4_obj_type, object_type_id);
538  if (codec_id)
539  st->codecpar->codec_id = codec_id;
540  av_log(fc, AV_LOG_TRACE, "esds object type id 0x%02x\n", object_type_id);
541  len = ff_mp4_read_descr(fc, pb, &tag);
542  if (tag == MP4DecSpecificDescrTag) {
543  av_log(fc, AV_LOG_TRACE, "Specific MPEG-4 header len=%d\n", len);
544  /* As per 14496-3:2009 9.D.2.2, No decSpecificInfo is defined
545  for MPEG-1 Audio or MPEG-2 Audio; MPEG-2 AAC excluded. */
546  if (object_type_id == 0x69 || object_type_id == 0x6b)
547  return 0;
548  if (!len || (uint64_t)len > (1<<30))
549  return AVERROR_INVALIDDATA;
550  if ((ret = ff_get_extradata(fc, st->codecpar, pb, len)) < 0)
551  return ret;
552  if (st->codecpar->codec_id == AV_CODEC_ID_AAC) {
553  MPEG4AudioConfig cfg = {0};
555  st->codecpar->extradata_size, 1, fc);
556  if (ret < 0)
557  return ret;
558  st->codecpar->channels = cfg.channels;
559  if (cfg.object_type == 29 && cfg.sampling_index < 3) // old mp3on4
561  else if (cfg.ext_sample_rate)
563  else
564  st->codecpar->sample_rate = cfg.sample_rate;
565  av_log(fc, AV_LOG_TRACE, "mp4a config channels %d obj %d ext obj %d "
566  "sample rate %d ext sample rate %d\n", st->codecpar->channels,
567  cfg.object_type, cfg.ext_object_type,
568  cfg.sample_rate, cfg.ext_sample_rate);
570  cfg.object_type)))
572  }
573  }
574  return 0;
575 }
576 
577 typedef struct MovChannelLayout {
578  int64_t channel_layout;
579  uint32_t layout_tag;
581 
583  { AV_CH_LAYOUT_MONO, (100<<16) | 1}, // kCAFChannelLayoutTag_Mono
584  { AV_CH_LAYOUT_STEREO, (101<<16) | 2}, // kCAFChannelLayoutTag_Stereo
585  { AV_CH_LAYOUT_STEREO, (102<<16) | 2}, // kCAFChannelLayoutTag_StereoHeadphones
586  { AV_CH_LAYOUT_2_1, (131<<16) | 3}, // kCAFChannelLayoutTag_ITU_2_1
587  { AV_CH_LAYOUT_QUAD, (132<<16) | 4}, // kCAFChannelLayoutTag_ITU_2_2
588  { AV_CH_LAYOUT_2_2, (132<<16) | 4}, // kCAFChannelLayoutTag_ITU_2_2
589  { AV_CH_LAYOUT_QUAD, (108<<16) | 4}, // kCAFChannelLayoutTag_Quadraphonic
590  { AV_CH_LAYOUT_SURROUND, (113<<16) | 3}, // kCAFChannelLayoutTag_MPEG_3_0_A
591  { AV_CH_LAYOUT_4POINT0, (115<<16) | 4}, // kCAFChannelLayoutTag_MPEG_4_0_A
592  { AV_CH_LAYOUT_5POINT0_BACK, (117<<16) | 5}, // kCAFChannelLayoutTag_MPEG_5_0_A
593  { AV_CH_LAYOUT_5POINT0, (117<<16) | 5}, // kCAFChannelLayoutTag_MPEG_5_0_A
594  { AV_CH_LAYOUT_5POINT1_BACK, (121<<16) | 6}, // kCAFChannelLayoutTag_MPEG_5_1_A
595  { AV_CH_LAYOUT_5POINT1, (121<<16) | 6}, // kCAFChannelLayoutTag_MPEG_5_1_A
596  { AV_CH_LAYOUT_7POINT1, (128<<16) | 8}, // kCAFChannelLayoutTag_MPEG_7_1_C
597  { AV_CH_LAYOUT_7POINT1_WIDE, (126<<16) | 8}, // kCAFChannelLayoutTag_MPEG_7_1_A
598  { AV_CH_LAYOUT_5POINT1_BACK|AV_CH_LAYOUT_STEREO_DOWNMIX, (130<<16) | 8}, // kCAFChannelLayoutTag_SMPTE_DTV
599  { AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY, (133<<16) | 3}, // kCAFChannelLayoutTag_DVD_4
600  { AV_CH_LAYOUT_2_1|AV_CH_LOW_FREQUENCY, (134<<16) | 4}, // kCAFChannelLayoutTag_DVD_5
601  { AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY, (135<<16) | 4}, // kCAFChannelLayoutTag_DVD_6
602  { AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY, (135<<16) | 4}, // kCAFChannelLayoutTag_DVD_6
603  { AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY, (136<<16) | 4}, // kCAFChannelLayoutTag_DVD_10
604  { AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY, (137<<16) | 5}, // kCAFChannelLayoutTag_DVD_11
605  { 0, 0},
606 };
607 #if 0
608 int ff_mov_read_chan(AVFormatContext *s, AVStream *st, int64_t size)
609 {
610  AVCodecContext *codec= st->codec;
611  uint32_t layout_tag;
612  AVIOContext *pb = s->pb;
614 
615  if (size < 12)
616  return AVERROR_INVALIDDATA;
617 
618  layout_tag = avio_rb32(pb);
619  size -= 4;
620  if (layout_tag == 0) { // kCAFChannelLayoutTag_UseChannelDescriptions
621  // Channel descriptions not implemented
622  av_log_ask_for_sample(s, "Unimplemented container channel layout.\n");
623  avio_skip(pb, size);
624  return 0;
625  }
626  if (layout_tag == 0x10000) { // kCAFChannelLayoutTag_UseChannelBitmap
627  codec->channel_layout = avio_rb32(pb);
628  size -= 4;
629  avio_skip(pb, size);
630  return 0;
631  }
632  while (layouts->channel_layout) {
633  if (layout_tag == layouts->layout_tag) {
634  codec->channel_layout = layouts->channel_layout;
635  break;
636  }
637  layouts++;
638  }
639  if (!codec->channel_layout)
640  av_log(s, AV_LOG_WARNING, "Unknown container channel layout.\n");
641  avio_skip(pb, size);
642 
643  return 0;
644 }
645 #endif
646 
647 void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout)
648 {
649  const MovChannelLayout *layouts;
650  uint32_t layout_tag = 0;
651 
652  for (layouts = mov_channel_layout; layouts->channel_layout; layouts++)
653  if (channel_layout == layouts->channel_layout) {
654  layout_tag = layouts->layout_tag;
655  break;
656  }
657 
658  if (layout_tag) {
659  avio_wb32(pb, layout_tag); // mChannelLayoutTag
660  avio_wb32(pb, 0); // mChannelBitmap
661  } else {
662  avio_wb32(pb, 0x10000); // kCAFChannelLayoutTag_UseChannelBitmap
663  avio_wb32(pb, channel_layout);
664  }
665  avio_wb32(pb, 0); // mNumberChannelDescriptions
666 }
667 
669 {
670  return ff_codec_movvideo_tags;
671 }
672 
674 {
675  return ff_codec_movaudio_tags;
676 }
AV_CODEC_ID_PCM_S16LE
@ AV_CODEC_ID_PCM_S16LE
Definition: codec_id.h:301
AV_CODEC_ID_EIA_608
@ AV_CODEC_ID_EIA_608
Definition: codec_id.h:519
AV_CODEC_ID_MACE6
@ AV_CODEC_ID_MACE6
Definition: codec_id.h:420
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:85
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
AV_CODEC_ID_PCM_F32BE
@ AV_CODEC_ID_PCM_F32BE
Definition: codec_id.h:321
AVCodecParameters::extradata
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: codec_par.h:74
AV_CODEC_ID_DPX
@ AV_CODEC_ID_DPX
Definition: codec_id.h:177
AV_CODEC_ID_ADPCM_IMA_QT
@ AV_CODEC_ID_ADPCM_IMA_QT
Definition: codec_id.h:340
AV_CH_LAYOUT_5POINT0_BACK
#define AV_CH_LAYOUT_5POINT0_BACK
Definition: channel_layout.h:97
AV_CODEC_ID_AC3
@ AV_CODEC_ID_AC3
Definition: codec_id.h:413
AVCodecContext::channel_layout
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:1237
ff_get_extradata
int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0 and f...
Definition: utils.c:3346
AV_CODEC_ID_V308
@ AV_CODEC_ID_V308
Definition: codec_id.h:251
ff_mp4_obj_type
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:34
layouts
enum MovChannelLayoutTag * layouts
Definition: mov_chan.c:434
MKTAG
#define MKTAG(a, b, c, d)
Definition: common.h:406
MovChannelLayout::layout_tag
uint32_t layout_tag
Definition: isom.c:579
AOT_PS
@ AOT_PS
N Parametric Stereo.
Definition: mpeg4audio.h:115
AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_MONO
Definition: channel_layout.h:85
AV_CODEC_ID_DIRAC
@ AV_CODEC_ID_DIRAC
Definition: codec_id.h:165
AV_CODEC_ID_MP3ON4
@ AV_CODEC_ID_MP3ON4
Definition: codec_id.h:424
AOT_L1
@ AOT_L1
Y Layer 1.
Definition: mpeg4audio.h:118
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:62
AV_CODEC_ID_MPEG4
@ AV_CODEC_ID_MPEG4
Definition: codec_id.h:61
avpriv_mpa_freq_tab
const uint16_t avpriv_mpa_freq_tab[3]
Definition: mpegaudiodata.c:40
ff_mp4_read_dec_config_descr
int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
Definition: isom.c:515
AV_CODEC_ID_FLIC
@ AV_CODEC_ID_FLIC
Definition: codec_id.h:99
AV_CODEC_ID_CDTOONS
@ AV_CODEC_ID_CDTOONS
Definition: codec_id.h:294
AV_CODEC_ID_ALAC
@ AV_CODEC_ID_ALAC
Definition: codec_id.h:426
AV_CODEC_ID_AMR_NB
@ AV_CODEC_ID_AMR_NB
Definition: codec_id.h:392
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:555
AV_CODEC_ID_FLAC
@ AV_CODEC_ID_FLAC
Definition: codec_id.h:422
AV_CODEC_ID_R10K
@ AV_CODEC_ID_R10K
Definition: codec_id.h:194
AV_CODEC_ID_TRUEHD
@ AV_CODEC_ID_TRUEHD
Definition: codec_id.h:454
AV_CODEC_ID_AMR_WB
@ AV_CODEC_ID_AMR_WB
Definition: codec_id.h:393
AV_CODEC_ID_BIN_DATA
@ AV_CODEC_ID_BIN_DATA
Definition: codec_id.h:549
AV_CODEC_ID_MPEGH_3D_AUDIO
@ AV_CODEC_ID_MPEGH_3D_AUDIO
Definition: codec_id.h:502
ff_mov_lang_to_iso639
int ff_mov_lang_to_iso639(unsigned code, char to[4])
Definition: isom.c:446
MPEG4AudioConfig
Definition: mpeg4audio.h:33
AV_CODEC_ID_SHEERVIDEO
@ AV_CODEC_ID_SHEERVIDEO
Definition: codec_id.h:265
AVCodecParameters::channels
int channels
Audio only.
Definition: codec_par.h:166
mpeg4audio.h
AV_CODEC_ID_PIXLET
@ AV_CODEC_ID_PIXLET
Definition: codec_id.h:268
AV_CODEC_ID_SPEEX
@ AV_CODEC_ID_SPEEX
Definition: codec_id.h:445
MP4DecSpecificDescrTag
#define MP4DecSpecificDescrTag
Definition: isom.h:305
AV_CODEC_ID_PCM_S16BE
@ AV_CODEC_ID_PCM_S16BE
Definition: codec_id.h:302
avformat_get_mov_video_tags
const struct AVCodecTag * avformat_get_mov_video_tags(void)
Definition: isom.c:668
AV_CODEC_ID_YUV4
@ AV_CODEC_ID_YUV4
Definition: codec_id.h:253
AV_CODEC_ID_R210
@ AV_CODEC_ID_R210
Definition: codec_id.h:182
AV_CODEC_ID_SMC
@ AV_CODEC_ID_SMC
Definition: codec_id.h:98
AV_CODEC_ID_MP3
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: codec_id.h:411
AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_STEREO
Definition: channel_layout.h:86
AV_CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_QUAD
Definition: channel_layout.h:94
MovChannelLayout::channel_layout
int64_t channel_layout
Definition: isom.c:578
ff_mp4_parse_es_descr
void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
Definition: isom.c:490
AV_CODEC_ID_PCM_S8
@ AV_CODEC_ID_PCM_S8
Definition: codec_id.h:305
avio_rb32
unsigned int avio_rb32(AVIOContext *s)
Definition: aviobuf.c:778
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:202
AV_CODEC_ID_MACE3
@ AV_CODEC_ID_MACE3
Definition: codec_id.h:419
AVCodecTag
Definition: internal.h:42
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition: channel_layout.h:52
AV_CODEC_ID_MPEG4SYSTEMS
@ AV_CODEC_ID_MPEG4SYSTEMS
FAKE codec to indicate a MPEG-4 Systems stream (only used by libavformat)
Definition: codec_id.h:556
avpriv_mpeg4audio_get_config2
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
Definition: mpeg4audio.c:177
intreadwrite.h
s
#define s(width, name)
Definition: cbs_vp9.c:257
AV_CODEC_ID_VP9
@ AV_CODEC_ID_VP9
Definition: codec_id.h:217
AV_CODEC_ID_MP2
@ AV_CODEC_ID_MP2
Definition: codec_id.h:410
AV_CH_LAYOUT_STEREO_DOWNMIX
#define AV_CH_LAYOUT_STEREO_DOWNMIX
Definition: channel_layout.h:112
to
const char * to
Definition: webvttdec.c:34
mov_channel_layout
static const MovChannelLayout mov_channel_layout[]
Definition: isom.c:582
AV_CODEC_ID_TARGA_Y216
@ AV_CODEC_ID_TARGA_Y216
Definition: codec_id.h:250
AV_CODEC_ID_PCM_MULAW
@ AV_CODEC_ID_PCM_MULAW
Definition: codec_id.h:307
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:369
AV_CODEC_ID_SVQ3
@ AV_CODEC_ID_SVQ3
Definition: codec_id.h:72
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:76
AV_CH_LAYOUT_2_1
#define AV_CH_LAYOUT_2_1
Definition: channel_layout.h:88
AV_CODEC_ID_PNG
@ AV_CODEC_ID_PNG
Definition: codec_id.h:110
AV_CODEC_ID_AVUI
@ AV_CODEC_ID_AVUI
Definition: codec_id.h:248
AV_CODEC_ID_AVRN
@ AV_CODEC_ID_AVRN
Definition: codec_id.h:254
AVFormatContext
Format I/O context.
Definition: avformat.h:1335
AV_CODEC_ID_PCM_ALAW
@ AV_CODEC_ID_PCM_ALAW
Definition: codec_id.h:308
internal.h
AV_CODEC_ID_EXR
@ AV_CODEC_ID_EXR
Definition: codec_id.h:229
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:1012
MovChannelLayout
Definition: isom.c:577
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:274
isom.h
AV_CODEC_ID_MOV_TEXT
@ AV_CODEC_ID_MOV_TEXT
Definition: codec_id.h:513
AV_CODEC_ID_Y41P
@ AV_CODEC_ID_Y41P
Definition: codec_id.h:245
AV_CODEC_ID_CINEPAK
@ AV_CODEC_ID_CINEPAK
Definition: codec_id.h:92
AV_CODEC_ID_DVD_SUBTITLE
@ AV_CODEC_ID_DVD_SUBTITLE
Definition: codec_id.h:508
AV_CODEC_ID_SMV
@ AV_CODEC_ID_SMV
Definition: codec_id.h:483
MPEG4AudioConfig::sampling_index
int sampling_index
Definition: mpeg4audio.h:35
AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT1
Definition: channel_layout.h:96
mov_mdhd_language_map
static const char mov_mdhd_language_map[][4]
Definition: isom.c:397
AV_CODEC_ID_QDM2
@ AV_CODEC_ID_QDM2
Definition: codec_id.h:429
ff_mp4_read_descr
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:481
AV_CODEC_ID_MAGICYUV
@ AV_CODEC_ID_MAGICYUV
Definition: codec_id.h:264
AV_CODEC_ID_MP4ALS
@ AV_CODEC_ID_MP4ALS
Definition: codec_id.h:455
ff_codec_movdata_tags
const AVCodecTag ff_codec_movdata_tags[]
Definition: isom.c:388
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:170
AV_CODEC_ID_MPEG1VIDEO
@ AV_CODEC_ID_MPEG1VIDEO
Definition: codec_id.h:50
AV_CODEC_ID_GSM
@ AV_CODEC_ID_GSM
as in Berlin toast format
Definition: codec_id.h:428
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:46
AV_CODEC_ID_EAC3
@ AV_CODEC_ID_EAC3
Definition: codec_id.h:450
AV_CODEC_ID_MJPEGB
@ AV_CODEC_ID_MJPEGB
Definition: codec_id.h:57
AVCodecParameters::extradata_size
int extradata_size
Size of the extradata content in bytes.
Definition: codec_par.h:78
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:412
ff_codec_movvideo_tags
const AVCodecTag ff_codec_movvideo_tags[]
Definition: isom.c:75
AV_CODEC_ID_QCELP
@ AV_CODEC_ID_QCELP
Definition: codec_id.h:434
AVIOContext
Bytestream IO Context.
Definition: avio.h:161
AV_CODEC_ID_PCM_S24LE
@ AV_CODEC_ID_PCM_S24LE
Definition: codec_id.h:313
avio_rb24
unsigned int avio_rb24(AVIOContext *s)
Definition: aviobuf.c:771
ff_codec_get_id
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:3165
AOT_L2
@ AOT_L2
Y Layer 2.
Definition: mpeg4audio.h:119
AV_CODEC_ID_DXV
@ AV_CODEC_ID_DXV
Definition: codec_id.h:240
AV_CODEC_ID_DTS
@ AV_CODEC_ID_DTS
Definition: codec_id.h:414
AV_CODEC_ID_H263
@ AV_CODEC_ID_H263
Definition: codec_id.h:53
size
int size
Definition: twinvq_data.h:11134
AV_CODEC_ID_V408
@ AV_CODEC_ID_V408
Definition: codec_id.h:252
AV_CODEC_ID_QDMC
@ AV_CODEC_ID_QDMC
Definition: codec_id.h:460
AV_CODEC_ID_V210
@ AV_CODEC_ID_V210
Definition: codec_id.h:176
AV_CODEC_ID_MSRLE
@ AV_CODEC_ID_MSRLE
Definition: codec_id.h:94
AV_CODEC_ID_OPUS
@ AV_CODEC_ID_OPUS
Definition: codec_id.h:470
AV_CODEC_ID_8BPS
@ AV_CODEC_ID_8BPS
Definition: codec_id.h:97
ff_mov_iso639_to_lang
int ff_mov_iso639_to_lang(const char lang[4], int mp4)
Definition: isom.c:419
avio_wb32
void avio_wb32(AVIOContext *s, unsigned int val)
Definition: aviobuf.c:375
avio_r8
int avio_r8(AVIOContext *s)
Definition: aviobuf.c:616
AV_CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_5POINT1_BACK
Definition: channel_layout.h:98
AV_CODEC_ID_NOTCHLC
@ AV_CODEC_ID_NOTCHLC
Definition: codec_id.h:296
MPEG4AudioConfig::ext_object_type
int ext_object_type
Definition: mpeg4audio.h:39
AV_CODEC_ID_QDRAW
@ AV_CODEC_ID_QDRAW
Definition: codec_id.h:107
ff_mp4_read_descr_len
int ff_mp4_read_descr_len(AVIOContext *pb)
Definition: isom.c:468
AV_CODEC_ID_SVQ1
@ AV_CODEC_ID_SVQ1
Definition: codec_id.h:71
MPEG4AudioConfig::channels
int channels
Definition: mpeg4audio.h:43
AV_CODEC_ID_TSCC2
@ AV_CODEC_ID_TSCC2
Definition: codec_id.h:213
AV_CODEC_ID_VP3
@ AV_CODEC_ID_VP3
Definition: codec_id.h:78
AV_CODEC_ID_GIF
@ AV_CODEC_ID_GIF
Definition: codec_id.h:146
AV_CH_LAYOUT_5POINT0
#define AV_CH_LAYOUT_5POINT0
Definition: channel_layout.h:95
AV_CODEC_ID_MJPEG
@ AV_CODEC_ID_MJPEG
Definition: codec_id.h:56
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:47
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
code
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
Definition: filter_design.txt:178
AV_CODEC_ID_EVRC
@ AV_CODEC_ID_EVRC
Definition: codec_id.h:482
avformat_get_mov_audio_tags
const struct AVCodecTag * avformat_get_mov_audio_tags(void)
Definition: isom.c:673
AV_CODEC_ID_CAVS
@ AV_CODEC_ID_CAVS
Definition: codec_id.h:136
AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1
Definition: channel_layout.h:107
AV_CODEC_ID_PCM_F64BE
@ AV_CODEC_ID_PCM_F64BE
Definition: codec_id.h:323
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:223
AV_CH_LAYOUT_7POINT1_WIDE
#define AV_CH_LAYOUT_7POINT1_WIDE
Definition: channel_layout.h:108
AV_CODEC_ID_DVVIDEO
@ AV_CODEC_ID_DVVIDEO
Definition: codec_id.h:73
AV_CODEC_ID_PCM_S32BE
@ AV_CODEC_ID_PCM_S32BE
Definition: codec_id.h:310
uint8_t
uint8_t
Definition: audio_convert.c:194
AV_CODEC_ID_VC1
@ AV_CODEC_ID_VC1
Definition: codec_id.h:119
len
int len
Definition: vorbis_enc_data.h:452
AV_CODEC_ID_JPEG2000
@ AV_CODEC_ID_JPEG2000
Definition: codec_id.h:137
AOT_NULL
@ AOT_NULL
Definition: mpeg4audio.h:88
MPEG4AudioConfig::ext_sample_rate
int ext_sample_rate
Definition: mpeg4audio.h:41
mp4_audio_types
static const AVCodecTag mp4_audio_types[]
Definition: isom.c:506
tag
uint32_t tag
Definition: movenc.c:1532
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:865
AV_CH_LAYOUT_SURROUND
#define AV_CH_LAYOUT_SURROUND
Definition: channel_layout.h:89
avio_rb16
unsigned int avio_rb16(AVIOContext *s)
Definition: aviobuf.c:763
AV_CODEC_ID_AVRP
@ AV_CODEC_ID_AVRP
Definition: codec_id.h:246
AV_CODEC_ID_AIC
@ AV_CODEC_ID_AIC
Definition: codec_id.h:218
avformat.h
MPEG4AudioConfig::object_type
int object_type
Definition: mpeg4audio.h:34
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen_template.c:38
AVCodecContext
main external API structure.
Definition: avcodec.h:526
AV_CODEC_ID_HAP
@ AV_CODEC_ID_HAP
Definition: codec_id.h:238
AV_CODEC_ID_V410
@ AV_CODEC_ID_V410
Definition: codec_id.h:206
AV_CODEC_ID_DVAUDIO
@ AV_CODEC_ID_DVAUDIO
Definition: codec_id.h:416
ff_codec_movsubtitle_tags
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:381
mpegaudiodata.h
avio_skip
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:329
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:84
AV_CODEC_ID_PCM_S32LE
@ AV_CODEC_ID_PCM_S32LE
Definition: codec_id.h:309
AV_CODEC_ID_QTRLE
@ AV_CODEC_ID_QTRLE
Definition: codec_id.h:104
AV_CODEC_ID_PCM_U8
@ AV_CODEC_ID_PCM_U8
Definition: codec_id.h:306
AV_CODEC_ID_RPZA
@ AV_CODEC_ID_RPZA
Definition: codec_id.h:91
AV_CODEC_ID_PCM_F64LE
@ AV_CODEC_ID_PCM_F64LE
Definition: codec_id.h:324
AOT_ALS
@ AOT_ALS
Y Audio LosslesS.
Definition: mpeg4audio.h:122
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:60
AV_CODEC_ID_SGIRLE
@ AV_CODEC_ID_SGIRLE
Definition: codec_id.h:232
AV_CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_4POINT0
Definition: channel_layout.h:91
AV_CODEC_ID_ILBC
@ AV_CODEC_ID_ILBC
Definition: codec_id.h:469
AV_CODEC_ID_VP8
@ AV_CODEC_ID_VP8
Definition: codec_id.h:189
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:565
AV_CODEC_ID_PCM_F32LE
@ AV_CODEC_ID_PCM_F32LE
Definition: codec_id.h:322
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:89
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:59
AV_CODEC_ID_MSMPEG4V3
@ AV_CODEC_ID_MSMPEG4V3
Definition: codec_id.h:65
ff_codec_movaudio_tags
const AVCodecTag ff_codec_movaudio_tags[]
Definition: isom.c:321
AV_CODEC_ID_SGI
@ AV_CODEC_ID_SGI
Definition: codec_id.h:150
AV_CODEC_ID_TARGA
@ AV_CODEC_ID_TARGA
Definition: codec_id.h:142
AV_CODEC_ID_VORBIS
@ AV_CODEC_ID_VORBIS
Definition: codec_id.h:415
AV_CODEC_ID_TIFF
@ AV_CODEC_ID_TIFF
Definition: codec_id.h:145
avstring.h
ff_mov_write_chan
void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout)
Definition: isom.c:647
AOT_L3
@ AOT_L3
Y Layer 3.
Definition: mpeg4audio.h:120
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:51
AV_CODEC_ID_MP1
@ AV_CODEC_ID_MP1
Definition: codec_id.h:452
AV_CODEC_ID_PCM_S24BE
@ AV_CODEC_ID_PCM_S24BE
Definition: codec_id.h:314
AV_CH_LAYOUT_2_2
#define AV_CH_LAYOUT_2_2
Definition: channel_layout.h:93
AV_CODEC_ID_DNXHD
@ AV_CODEC_ID_DNXHD
Definition: codec_id.h:148
AV_CODEC_ID_NELLYMOSER
@ AV_CODEC_ID_NELLYMOSER
Definition: codec_id.h:443
AV_CODEC_ID_PRORES
@ AV_CODEC_ID_PRORES
Definition: codec_id.h:197
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:547
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:36