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_MOV_TEXT, MKTAG('t', 'e', 'x', 't') },
77  { AV_CODEC_ID_MOV_TEXT, MKTAG('t', 'x', '3', 'g') },
78  { AV_CODEC_ID_EIA_608, MKTAG('c', '6', '0', '8') },
79  { AV_CODEC_ID_NONE, 0 },
80 };
81 
83  { AV_CODEC_ID_BIN_DATA, MKTAG('g', 'p', 'm', 'd') },
84  { AV_CODEC_ID_NONE, 0 },
85 };
86 
87 /* map numeric codes from mdhd atom to ISO 639 */
88 /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */
89 /* http://developer.apple.com/documentation/mac/Text/Text-368.html */
90 /* deprecated by putting the code as 3*5 bits ASCII */
91 static const char mov_mdhd_language_map[][4] = {
92  "eng", /* 0 English */
93  "fra", /* 1 French */
94  "ger", /* 2 German */
95  "ita", /* 3 Italian */
96  "dut", /* 4 Dutch */
97  "sve", /* 5 Swedish */
98  "spa", /* 6 Spanish */
99  "dan", /* 7 Danish */
100  "por", /* 8 Portuguese */
101  "nor", /* 9 Norwegian */
102  "heb", /* 10 Hebrew */
103  "jpn", /* 11 Japanese */
104  "ara", /* 12 Arabic */
105  "fin", /* 13 Finnish */
106  "gre", /* 14 Greek */
107  "ice", /* 15 Icelandic */
108  "mlt", /* 16 Maltese */
109  "tur", /* 17 Turkish */
110  "hr ", /* 18 Croatian */
111  "chi", /* 19 Traditional Chinese */
112  "urd", /* 20 Urdu */
113  "hin", /* 21 Hindi */
114  "tha", /* 22 Thai */
115  "kor", /* 23 Korean */
116  "lit", /* 24 Lithuanian */
117  "pol", /* 25 Polish */
118  "hun", /* 26 Hungarian */
119  "est", /* 27 Estonian */
120  "lav", /* 28 Latvian */
121  "", /* 29 Sami */
122  "fo ", /* 30 Faroese */
123  "", /* 31 Farsi */
124  "rus", /* 32 Russian */
125  "chi", /* 33 Simplified Chinese */
126  "", /* 34 Flemish */
127  "iri", /* 35 Irish */
128  "alb", /* 36 Albanian */
129  "ron", /* 37 Romanian */
130  "ces", /* 38 Czech */
131  "slk", /* 39 Slovak */
132  "slv", /* 40 Slovenian */
133  "yid", /* 41 Yiddish */
134  "sr ", /* 42 Serbian */
135  "mac", /* 43 Macedonian */
136  "bul", /* 44 Bulgarian */
137  "ukr", /* 45 Ukrainian */
138  "bel", /* 46 Belarusian */
139  "uzb", /* 47 Uzbek */
140  "kaz", /* 48 Kazakh */
141  "aze", /* 49 Azerbaijani */
142  "aze", /* 50 AzerbaijanAr */
143  "arm", /* 51 Armenian */
144  "geo", /* 52 Georgian */
145  "mol", /* 53 Moldavian */
146  "kir", /* 54 Kirghiz */
147  "tgk", /* 55 Tajiki */
148  "tuk", /* 56 Turkmen */
149  "mon", /* 57 Mongolian */
150  "", /* 58 MongolianCyr */
151  "pus", /* 59 Pashto */
152  "kur", /* 60 Kurdish */
153  "kas", /* 61 Kashmiri */
154  "snd", /* 62 Sindhi */
155  "tib", /* 63 Tibetan */
156  "nep", /* 64 Nepali */
157  "san", /* 65 Sanskrit */
158  "mar", /* 66 Marathi */
159  "ben", /* 67 Bengali */
160  "asm", /* 68 Assamese */
161  "guj", /* 69 Gujarati */
162  "pa ", /* 70 Punjabi */
163  "ori", /* 71 Oriya */
164  "mal", /* 72 Malayalam */
165  "kan", /* 73 Kannada */
166  "tam", /* 74 Tamil */
167  "tel", /* 75 Telugu */
168  "", /* 76 Sinhala */
169  "bur", /* 77 Burmese */
170  "khm", /* 78 Khmer */
171  "lao", /* 79 Lao */
172  "vie", /* 80 Vietnamese */
173  "ind", /* 81 Indonesian */
174  "tgl", /* 82 Tagalog */
175  "may", /* 83 MalayRoman */
176  "may", /* 84 MalayArabic */
177  "amh", /* 85 Amharic */
178  "tir", /* 86 Galla */
179  "orm", /* 87 Oromo */
180  "som", /* 88 Somali */
181  "swa", /* 89 Swahili */
182  "", /* 90 Kinyarwanda */
183  "run", /* 91 Rundi */
184  "", /* 92 Nyanja */
185  "mlg", /* 93 Malagasy */
186  "epo", /* 94 Esperanto */
187  "", /* 95 */
188  "", /* 96 */
189  "", /* 97 */
190  "", /* 98 */
191  "", /* 99 */
192  "", /* 100 */
193  "", /* 101 */
194  "", /* 102 */
195  "", /* 103 */
196  "", /* 104 */
197  "", /* 105 */
198  "", /* 106 */
199  "", /* 107 */
200  "", /* 108 */
201  "", /* 109 */
202  "", /* 110 */
203  "", /* 111 */
204  "", /* 112 */
205  "", /* 113 */
206  "", /* 114 */
207  "", /* 115 */
208  "", /* 116 */
209  "", /* 117 */
210  "", /* 118 */
211  "", /* 119 */
212  "", /* 120 */
213  "", /* 121 */
214  "", /* 122 */
215  "", /* 123 */
216  "", /* 124 */
217  "", /* 125 */
218  "", /* 126 */
219  "", /* 127 */
220  "wel", /* 128 Welsh */
221  "baq", /* 129 Basque */
222  "cat", /* 130 Catalan */
223  "lat", /* 131 Latin */
224  "que", /* 132 Quechua */
225  "grn", /* 133 Guarani */
226  "aym", /* 134 Aymara */
227  "tat", /* 135 Tatar */
228  "uig", /* 136 Uighur */
229  "dzo", /* 137 Dzongkha */
230  "jav", /* 138 JavaneseRom */
231 };
232 
233 int ff_mov_iso639_to_lang(const char lang[4], int mp4)
234 {
235  int i, code = 0;
236 
237  /* old way, only for QT? */
238  for (i = 0; lang[0] && !mp4 && i < FF_ARRAY_ELEMS(mov_mdhd_language_map); i++) {
239  if (!strcmp(lang, mov_mdhd_language_map[i]))
240  return i;
241  }
242  /* XXX:can we do that in mov too? */
243  if (!mp4)
244  return -1;
245  /* handle undefined as such */
246  if (lang[0] == '\0')
247  lang = "und";
248  /* 5 bits ASCII */
249  for (i = 0; i < 3; i++) {
250  uint8_t c = lang[i];
251  c -= 0x60;
252  if (c > 0x1f)
253  return -1;
254  code <<= 5;
255  code |= c;
256  }
257  return code;
258 }
259 
260 int ff_mov_lang_to_iso639(unsigned code, char to[4])
261 {
262  int i;
263  memset(to, 0, 4);
264  /* is it the mangled iso code? */
265  /* see http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt */
266  if (code >= 0x400 && code != 0x7fff) {
267  for (i = 2; i >= 0; i--) {
268  to[i] = 0x60 + (code & 0x1f);
269  code >>= 5;
270  }
271  return 1;
272  }
273  /* old fashion apple lang code */
275  return 0;
276  if (!mov_mdhd_language_map[code][0])
277  return 0;
278  memcpy(to, mov_mdhd_language_map[code], 4);
279  return 1;
280 }
281 
283 {
284  int len = 0;
285  int count = 4;
286  while (count--) {
287  int c = avio_r8(pb);
288  len = (len << 7) | (c & 0x7f);
289  if (!(c & 0x80))
290  break;
291  }
292  return len;
293 }
294 
296 {
297  int len;
298  *tag = avio_r8(pb);
299  len = ff_mp4_read_descr_len(pb);
300  av_log(fc, AV_LOG_TRACE, "MPEG-4 description: tag=0x%02x len=%d\n", *tag, len);
301  return len;
302 }
303 
304 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
305 {
306  int flags;
307  if (es_id) *es_id = avio_rb16(pb);
308  else avio_rb16(pb);
309  flags = avio_r8(pb);
310  if (flags & 0x80) //streamDependenceFlag
311  avio_rb16(pb);
312  if (flags & 0x40) { //URL_Flag
313  int len = avio_r8(pb);
314  avio_skip(pb, len);
315  }
316  if (flags & 0x20) //OCRstreamFlag
317  avio_rb16(pb);
318 }
319 
320 static const AVCodecTag mp4_audio_types[] = {
321  { AV_CODEC_ID_MP3ON4, AOT_PS }, /* old mp3on4 draft */
322  { AV_CODEC_ID_MP3ON4, AOT_L1 }, /* layer 1 */
323  { AV_CODEC_ID_MP3ON4, AOT_L2 }, /* layer 2 */
324  { AV_CODEC_ID_MP3ON4, AOT_L3 }, /* layer 3 */
325  { AV_CODEC_ID_MP4ALS, AOT_ALS }, /* MPEG-4 ALS */
327 };
328 
330 {
331  enum AVCodecID codec_id;
332  unsigned v;
333  int len, tag;
334  int ret;
335  int object_type_id = avio_r8(pb);
336  avio_r8(pb); /* stream type */
337  avio_rb24(pb); /* buffer size db */
338 
339  v = avio_rb32(pb);
340 
341  // TODO: fix this with codecpar
342 #if FF_API_LAVF_AVCTX
344  if (v < INT32_MAX)
345  st->codec->rc_max_rate = v;
347 #endif
348 
349  st->codecpar->bit_rate = avio_rb32(pb); /* avg bitrate */
350 
351  codec_id= ff_codec_get_id(ff_mp4_obj_type, object_type_id);
352  if (codec_id)
353  st->codecpar->codec_id = codec_id;
354  av_log(fc, AV_LOG_TRACE, "esds object type id 0x%02x\n", object_type_id);
355  len = ff_mp4_read_descr(fc, pb, &tag);
356  if (tag == MP4DecSpecificDescrTag) {
357  av_log(fc, AV_LOG_TRACE, "Specific MPEG-4 header len=%d\n", len);
358  /* As per 14496-3:2009 9.D.2.2, No decSpecificInfo is defined
359  for MPEG-1 Audio or MPEG-2 Audio; MPEG-2 AAC excluded. */
360  if (object_type_id == 0x69 || object_type_id == 0x6b)
361  return 0;
362  if (!len || (uint64_t)len > (1<<30))
363  return AVERROR_INVALIDDATA;
364  if ((ret = ff_get_extradata(fc, st->codecpar, pb, len)) < 0)
365  return ret;
366  if (st->codecpar->codec_id == AV_CODEC_ID_AAC) {
367  MPEG4AudioConfig cfg = {0};
369  st->codecpar->extradata_size, 1, fc);
370  if (ret < 0)
371  return ret;
372  st->codecpar->channels = cfg.channels;
373  if (cfg.object_type == 29 && cfg.sampling_index < 3) // old mp3on4
375  else if (cfg.ext_sample_rate)
377  else
378  st->codecpar->sample_rate = cfg.sample_rate;
379  av_log(fc, AV_LOG_TRACE, "mp4a config channels %d obj %d ext obj %d "
380  "sample rate %d ext sample rate %d\n", st->codecpar->channels,
381  cfg.object_type, cfg.ext_object_type,
382  cfg.sample_rate, cfg.ext_sample_rate);
383  if (!(st->codecpar->codec_id = ff_codec_get_id(mp4_audio_types,
384  cfg.object_type)))
386  }
387  }
388  return 0;
389 }
390 
391 typedef struct MovChannelLayout {
392  int64_t channel_layout;
393  uint32_t layout_tag;
395 
397  { AV_CH_LAYOUT_MONO, (100<<16) | 1}, // kCAFChannelLayoutTag_Mono
398  { AV_CH_LAYOUT_STEREO, (101<<16) | 2}, // kCAFChannelLayoutTag_Stereo
399  { AV_CH_LAYOUT_STEREO, (102<<16) | 2}, // kCAFChannelLayoutTag_StereoHeadphones
400  { AV_CH_LAYOUT_2_1, (131<<16) | 3}, // kCAFChannelLayoutTag_ITU_2_1
401  { AV_CH_LAYOUT_QUAD, (132<<16) | 4}, // kCAFChannelLayoutTag_ITU_2_2
402  { AV_CH_LAYOUT_2_2, (132<<16) | 4}, // kCAFChannelLayoutTag_ITU_2_2
403  { AV_CH_LAYOUT_QUAD, (108<<16) | 4}, // kCAFChannelLayoutTag_Quadraphonic
404  { AV_CH_LAYOUT_SURROUND, (113<<16) | 3}, // kCAFChannelLayoutTag_MPEG_3_0_A
405  { AV_CH_LAYOUT_4POINT0, (115<<16) | 4}, // kCAFChannelLayoutTag_MPEG_4_0_A
406  { AV_CH_LAYOUT_5POINT0_BACK, (117<<16) | 5}, // kCAFChannelLayoutTag_MPEG_5_0_A
407  { AV_CH_LAYOUT_5POINT0, (117<<16) | 5}, // kCAFChannelLayoutTag_MPEG_5_0_A
408  { AV_CH_LAYOUT_5POINT1_BACK, (121<<16) | 6}, // kCAFChannelLayoutTag_MPEG_5_1_A
409  { AV_CH_LAYOUT_5POINT1, (121<<16) | 6}, // kCAFChannelLayoutTag_MPEG_5_1_A
410  { AV_CH_LAYOUT_7POINT1, (128<<16) | 8}, // kCAFChannelLayoutTag_MPEG_7_1_C
411  { AV_CH_LAYOUT_7POINT1_WIDE, (126<<16) | 8}, // kCAFChannelLayoutTag_MPEG_7_1_A
412  { AV_CH_LAYOUT_5POINT1_BACK|AV_CH_LAYOUT_STEREO_DOWNMIX, (130<<16) | 8}, // kCAFChannelLayoutTag_SMPTE_DTV
413  { AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY, (133<<16) | 3}, // kCAFChannelLayoutTag_DVD_4
414  { AV_CH_LAYOUT_2_1|AV_CH_LOW_FREQUENCY, (134<<16) | 4}, // kCAFChannelLayoutTag_DVD_5
415  { AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY, (135<<16) | 4}, // kCAFChannelLayoutTag_DVD_6
416  { AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY, (135<<16) | 4}, // kCAFChannelLayoutTag_DVD_6
417  { AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY, (136<<16) | 4}, // kCAFChannelLayoutTag_DVD_10
418  { AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY, (137<<16) | 5}, // kCAFChannelLayoutTag_DVD_11
419  { 0, 0},
420 };
421 
423 {
424  const MovChannelLayout *layouts;
425  uint32_t layout_tag = 0;
426 
427  for (layouts = mov_channel_layout; layouts->channel_layout; layouts++)
428  if (channel_layout == layouts->channel_layout) {
429  layout_tag = layouts->layout_tag;
430  break;
431  }
432 
433  if (layout_tag) {
434  avio_wb32(pb, layout_tag); // mChannelLayoutTag
435  avio_wb32(pb, 0); // mChannelBitmap
436  } else {
437  avio_wb32(pb, 0x10000); // kCAFChannelLayoutTag_UseChannelBitmap
438  avio_wb32(pb, channel_layout);
439  }
440  avio_wb32(pb, 0); // mNumberChannelDescriptions
441 }
N Parametric Stereo.
Definition: mpeg4audio.h:115
int ff_mov_iso639_to_lang(const char lang[4], int mp4)
Definition: isom.c:233
static const AVCodecTag mp4_audio_types[]
Definition: isom.c:320
#define AV_CH_LAYOUT_7POINT1
Bytestream IO Context.
Definition: avio.h:161
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
Definition: isom.c:304
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:3185
Y Layer 1.
Definition: mpeg4audio.h:118
#define AV_CH_LAYOUT_SURROUND
static const MovChannelLayout mov_channel_layout[]
Definition: isom.c:396
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:60
#define AV_CH_LAYOUT_4POINT0
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:337
#define FF_ARRAY_ELEMS(a)
#define AV_CH_LAYOUT_STEREO
unsigned int avio_rb16(AVIOContext *s)
Definition: aviobuf.c:766
#define AV_CH_LAYOUT_5POINT0
mpeg audio layer common tables.
uint32_t layout_tag
Definition: isom.c:393
Format I/O context.
Definition: avformat.h:1247
static const char mov_mdhd_language_map[][4]
Definition: isom.c:91
uint8_t
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:190
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:220
unsigned int avio_rb32(AVIOContext *s)
Definition: aviobuf.c:781
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
const uint16_t avpriv_mpa_freq_tab[3]
Definition: mpegaudiodata.c:40
#define AV_CH_LOW_FREQUENCY
uint32_t tag
Definition: movenc.c:1600
#define av_log(a,...)
const char * to
Definition: webvttdec.c:34
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:89
#define AV_CH_LAYOUT_5POINT1
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:551
const AVCodecTag ff_codec_movdata_tags[]
Definition: isom.c:82
int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
Definition: isom.c:329
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:46
int ff_mp4_read_descr_len(AVIOContext *pb)
Definition: isom.c:282
#define MP4DecSpecificDescrTag
Definition: isom.h:311
int64_t channel_layout
Definition: isom.c:392
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: codec_id.h:425
#define AV_CH_LAYOUT_QUAD
GLsizei count
Definition: opengl_enc.c:108
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:34
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:75
int extradata_size
Size of the extradata content in bytes.
Definition: codec_par.h:78
int avio_r8(AVIOContext *s)
Definition: aviobuf.c:624
#define AV_CH_LAYOUT_2_1
#define AV_CH_LAYOUT_2_2
unsigned int avio_rb24(AVIOContext *s)
Definition: aviobuf.c:774
#define AV_CH_LAYOUT_STEREO_DOWNMIX
enum AVCodecID codec_id
Definition: vaapi_decode.c:369
#define AV_CH_LAYOUT_5POINT1_BACK
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:51
int ff_mov_lang_to_iso639(unsigned code, char to[4])
Definition: isom.c:260
Stream structure.
Definition: avformat.h:884
FAKE codec to indicate a MPEG-4 Systems stream (only used by libavformat)
Definition: codec_id.h:571
Y Layer 2.
Definition: mpeg4audio.h:119
#define AV_CH_LAYOUT_5POINT0_BACK
enum MovChannelLayoutTag * layouts
Definition: mov_chan.c:434
#define flags(name, subs,...)
Definition: cbs_av1.c:561
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
#define AV_CH_LAYOUT_7POINT1_WIDE
int sample_rate
Audio only.
Definition: codec_par.h:170
void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout)
Definition: isom.c:422
Main libavformat public API header.
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:295
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:83
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:3386
Y Audio LosslesS.
Definition: mpeg4audio.h:122
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:84
Y Layer 3.
Definition: mpeg4audio.h:120
int len
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: codec_par.h:74
int channels
Audio only.
Definition: codec_par.h:166
void avio_wb32(AVIOContext *s, unsigned int val)
Definition: aviobuf.c:383
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:1049
#define AV_CH_LAYOUT_MONO
#define MKTAG(a, b, c, d)
Definition: common.h:478
int i
Definition: input.c:407