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