annotate isom.c @ 1960:c0289552590f libavformat

Change the vhook code to send real timestamps to the filters instead of the current time of day, which is useless, and which the filters could just as easily query for themselves. patch by Bobby Bingham, uhmmmm gmail com
author diego
date Thu, 29 Mar 2007 05:24:35 +0000
parents 4e7e64bb5d3c
children b5e15030d788
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
1 /*
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
2 * ISO Media common code
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
3 * Copyright (c) 2001 Fabrice Bellard.
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
4 * Copyright (c) 2002 Francois Revol <revol@free.fr>
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
5 * Copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
6 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
7 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
8 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
13 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
17 * Lesser General Public License for more details.
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
18 *
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1259
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
22 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
23
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
24 #include "avformat.h"
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
25 #include "riff.h"
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
26 #include "isom.h"
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
27
1944
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
28 /* http://www.mp4ra.org */
1948
80d330650d35 cosmectics, mov -> mp4
bcoudurier
parents: 1947
diff changeset
29 const AVCodecTag ff_mp4_obj_type[] = {
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
30 { CODEC_ID_MPEG4 , 32 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
31 { CODEC_ID_H264 , 33 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
32 { CODEC_ID_AAC , 64 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
33 { CODEC_ID_MPEG2VIDEO, 96 }, /* MPEG2 Simple */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
34 { CODEC_ID_MPEG2VIDEO, 97 }, /* MPEG2 Main */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
35 { CODEC_ID_MPEG2VIDEO, 98 }, /* MPEG2 SNR */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
36 { CODEC_ID_MPEG2VIDEO, 99 }, /* MPEG2 Spatial */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
37 { CODEC_ID_MPEG2VIDEO, 100 }, /* MPEG2 High */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
38 { CODEC_ID_MPEG2VIDEO, 101 }, /* MPEG2 422 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
39 { CODEC_ID_AAC , 102 }, /* MPEG2 AAC Main */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
40 { CODEC_ID_AAC , 103 }, /* MPEG2 AAC Low */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
41 { CODEC_ID_AAC , 104 }, /* MPEG2 AAC SSR */
1944
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
42 { CODEC_ID_MP3 , 105 }, /* 13818-3 */
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
43 { CODEC_ID_MPEG1VIDEO, 106 }, /* 11172-2 */
1945
2cc85829ea98 prefer MP3 id as mentioned in avcodec.h line 210
bcoudurier
parents: 1944
diff changeset
44 { CODEC_ID_MP3 , 107 }, /* 11172-3 */
1944
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
45 { CODEC_ID_MJPEG , 108 }, /* 10918-1 */
1946
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
46 { CODEC_ID_PNG , 109 },
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
47 { CODEC_ID_JPEG2000 , 110 }, /* 15444-1 */
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
48 { CODEC_ID_VC1 , 163 },
1947
bcoudurier
parents: 1946
diff changeset
49 { CODEC_ID_VORBIS , 221 },
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
50 { CODEC_ID_PCM_S16LE , 224 },
1259
874dcd428a17 Added codec id for QCELP.
banan
parents: 1216
diff changeset
51 { CODEC_ID_QCELP , 225 },
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
52 { CODEC_ID_AC3 , 226 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
53 { CODEC_ID_PCM_ALAW , 227 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
54 { CODEC_ID_PCM_MULAW , 228 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
55 { CODEC_ID_PCM_S16BE , 230 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
56 { CODEC_ID_H263 , 242 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
57 { CODEC_ID_H261 , 243 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
58 { 0, 0 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
59 };
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
60
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
61 const AVCodecTag codec_movvideo_tags[] = {
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
62 /* { CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
63
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
64 { CODEC_ID_RAWVIDEO, MKTAG('r', 'a', 'w', ' ') }, /* Uncompressed RGB */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
65 /* { CODEC_ID_RAWVIDEO, MKTAG('Y', 'u', 'v', '2') }, *//* Uncompressed YUV422 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
66 { CODEC_ID_RAWVIDEO, MKTAG('A', 'V', 'U', 'I') }, /* YUV with alpha-channel (AVID Uncompressed) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
67 { CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') }, /* UNCOMPRESSED 8BIT 4:2:2 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
68
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
69 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, /* PhotoJPEG */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
70 { CODEC_ID_MJPEG, MKTAG('m', 'j', 'p', 'a') }, /* Motion-JPEG (format A) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
71 { CODEC_ID_MJPEG, MKTAG('A', 'V', 'D', 'J') }, /* MJPEG with alpha-channel (AVID JFIF meridien compressed) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
72 /* { CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') }, *//* MJPEG with alpha-channel (AVID ABVB/Truevision NuVista) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
73 { CODEC_ID_MJPEGB, MKTAG('m', 'j', 'p', 'b') }, /* Motion-JPEG (format B) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
74
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
75 { CODEC_ID_SVQ1, MKTAG('S', 'V', 'Q', '1') }, /* Sorenson Video v1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
76 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') }, /* Sorenson Video v1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
77 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', 'i') }, /* Sorenson Video v1 (from QT specs)*/
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
78 { CODEC_ID_SVQ3, MKTAG('S', 'V', 'Q', '3') }, /* Sorenson Video v3 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
79
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
80 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
81 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') }, /* OpenDiVX *//* sample files at http://heroinewarrior.com/xmovie.php3 use this tag */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
82 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
83 { CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') }, /* experimental: 3IVX files before ivx D4 4.5.1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
84
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
85 { CODEC_ID_H263, MKTAG('h', '2', '6', '3') }, /* H263 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
86 { CODEC_ID_H263, MKTAG('s', '2', '6', '3') }, /* H263 ?? works */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
87
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
88 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 'p') }, /* DV PAL */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
89 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, /* DV NTSC */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
90 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'p', 'p') }, /* DVCPRO PAL produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
91 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'p') }, /* DVCPRO50 PAL produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
92 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'n') }, /* DVCPRO50 NTSC produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
93 { CODEC_ID_DVVIDEO, MKTAG('A', 'V', 'd', 'v') }, /* AVID DV */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
94 //{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '5') }, /* DVCPRO HD 50i produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
95 //{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '6') }, /* DVCPRO HD 60i produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
96
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
97 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, /* On2 VP3 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
98 { CODEC_ID_RPZA, MKTAG('r', 'p', 'z', 'a') }, /* Apple Video (RPZA) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
99 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
100 { CODEC_ID_8BPS, MKTAG('8', 'B', 'P', 'S') }, /* Planar RGB (8BPS) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
101 { CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
102 { CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
103 { CODEC_ID_MSRLE, MKTAG('W', 'R', 'L', 'E') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
104 { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
105
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
106 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
107
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
108 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'e', 'g') }, /* MPEG */
1959
4e7e64bb5d3c add hdv1 fourcc
bcoudurier
parents: 1952
diff changeset
109 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '1') }, /* HDV 720p30 */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
110 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '2') }, /* MPEG2 produced by Sony HD camera */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
111 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '3') }, /* HDV produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
112 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'n') }, /* MPEG2 IMX NTSC 525/60 50mb/s produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
113 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'p') }, /* MPEG2 IMX PAL 625/50 50mb/s produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
114 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'n') }, /* MPEG2 IMX NTSC 525/60 30mb/s produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
115 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'p') }, /* MPEG2 IMX PAL 625/50 30mb/s produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
116 { CODEC_ID_MPEG2VIDEO, MKTAG('A', 'V', 'm', 'p') }, /* AVID IMX PAL */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
117
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
118 //{ CODEC_ID_JPEG2000, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
119
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
120 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, /* Truevision Targa */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
121 { CODEC_ID_TIFF, MKTAG('t', 'i', 'f', 'f') }, /* TIFF embedded in MOV */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
122 { CODEC_ID_GIF, MKTAG('g', 'i', 'f', ' ') }, /* embedded gif files as frames (usually one "click to play movie" frame) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
123 { CODEC_ID_PNG, MKTAG('p', 'n', 'g', ' ') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
124
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
125 { CODEC_ID_VC1, MKTAG('v', 'c', '-', '1') }, /* SMPTE RP 2025 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
126
1932
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
127 { CODEC_ID_DNXHD, MKTAG('A', 'V', 'd', 'n') }, /* AVID DNxHD */
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
128
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
129 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
130 };
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
131
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
132 const AVCodecTag codec_movaudio_tags[] = {
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
133 { CODEC_ID_PCM_S32BE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
134 { CODEC_ID_PCM_S32LE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
135 { CODEC_ID_PCM_S24BE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
136 { CODEC_ID_PCM_S24LE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
137 { CODEC_ID_PCM_S16BE, MKTAG('t', 'w', 'o', 's') }, /* 16 bits */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
138 { CODEC_ID_PCM_S16BE, MKTAG('N', 'O', 'N', 'E') }, /* uncompressed */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
139 { CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
140 { CODEC_ID_PCM_S16LE, MKTAG('l', 'p', 'c', 'm') },
1851
5535b52e5bd4 add pcm s8 tag
bcoudurier
parents: 1843
diff changeset
141 { CODEC_ID_PCM_S8, MKTAG('s', 'o', 'w', 't') },
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
142 { CODEC_ID_PCM_U8, MKTAG('r', 'a', 'w', ' ') }, /* 8 bits unsigned */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
143 { CODEC_ID_PCM_MULAW, MKTAG('u', 'l', 'a', 'w') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
144 { CODEC_ID_PCM_ALAW, MKTAG('a', 'l', 'a', 'w') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
145
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
146 { CODEC_ID_ADPCM_IMA_QT, MKTAG('i', 'm', 'a', '4') }, /* IMA-4 ADPCM */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
147 { CODEC_ID_ADPCM_MS, MKTAG('m', 's', 0x00, 0x02) }, /* MS ADPCM */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
148
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
149 { CODEC_ID_MACE3, MKTAG('M', 'A', 'C', '3') }, /* Macintosh Audio Compression and Expansion 3:1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
150 { CODEC_ID_MACE6, MKTAG('M', 'A', 'C', '6') }, /* Macintosh Audio Compression and Expansion 6:1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
151
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
152 { CODEC_ID_MP3, MKTAG('.', 'm', 'p', '3') }, /* MPEG layer 3 */ /* sample files at http://www.3ivx.com/showcase.html use this tag */
1952
c41103eb0a2f prefer MP3 id
bcoudurier
parents: 1951
diff changeset
153 { CODEC_ID_MP3, 0x6D730055 }, /* MPEG layer 3 */
c41103eb0a2f prefer MP3 id
bcoudurier
parents: 1951
diff changeset
154 { CODEC_ID_MP3, MKTAG('m', 's', 0x00, 0x55) }, /* MPEG layer 3 *//* XXX: check endianness */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
155
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
156 /* { CODEC_ID_OGG_VORBIS, MKTAG('O', 'g', 'g', 'S') }, *//* sample files at http://heroinewarrior.com/xmovie.php3 use this tag */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
157
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
158 { CODEC_ID_AAC, MKTAG('m', 'p', '4', 'a') }, /* MPEG-4 AAC */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
159
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
160 { CODEC_ID_AMR_NB, MKTAG('s', 'a', 'm', 'r') }, /* AMR-NB 3gp */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
161 { CODEC_ID_AMR_WB, MKTAG('s', 'a', 'w', 'b') }, /* AMR-WB 3gp */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
162
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
163 { CODEC_ID_AC3, MKTAG('m', 's', 0x20, 0x00) }, /* Dolby AC-3 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
164
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
165 { CODEC_ID_ALAC, MKTAG('a', 'l', 'a', 'c') }, /* Apple Lossless */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
166 { CODEC_ID_QDM2, MKTAG('Q', 'D', 'M', '2') }, /* QDM2 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
167
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
168 { CODEC_ID_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
169 { CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
170
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
171 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
172 };
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
173
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
174 /* map numeric codes from mdhd atom to ISO 639 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
175 /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
176 /* http://developer.apple.com/documentation/mac/Text/Text-368.html */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
177 /* deprecated by putting the code as 3*5bit ascii */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
178 static const char *mov_mdhd_language_map[] = {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
179 /* 0-9 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
180 "eng", "fra", "ger", "ita", "dut", "sve", "spa", "dan", "por", "nor",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
181 "heb", "jpn", "ara", "fin", "gre", "ice", "mlt", "tur", "hr "/*scr*/, "chi"/*ace?*/,
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
182 "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", NULL,
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
183 "fo ", NULL, "rus", "chi", NULL, "iri", "alb", "ron", "ces", "slk",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
184 "slv", "yid", "sr ", "mac", "bul", "ukr", "bel", "uzb", "kaz", "aze",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
185 /*?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
186 "aze", "arm", "geo", "mol", "kir", "tgk", "tuk", "mon", NULL, "pus",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
187 "kur", "kas", "snd", "tib", "nep", "san", "mar", "ben", "asm", "guj",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
188 "pa ", "ori", "mal", "kan", "tam", "tel", NULL, "bur", "khm", "lao",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
189 /* roman? arabic? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
190 "vie", "ind", "tgl", "may", "may", "amh", "tir", "orm", "som", "swa",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
191 /*==rundi?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
192 NULL, "run", NULL, "mlg", "epo", NULL, NULL, NULL, NULL, NULL,
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
193 /* 100 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
194 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
195 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
196 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "wel", "baq",
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
197 "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
198 };
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
199
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
200 int ff_mov_iso639_to_lang(const char *lang, int mp4)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
201 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
202 int i, code = 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
203
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
204 /* old way, only for QT? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
205 for (i = 0; !mp4 && (i < (sizeof(mov_mdhd_language_map)/sizeof(char *))); i++) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
206 if (mov_mdhd_language_map[i] && !strcmp(lang, mov_mdhd_language_map[i]))
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
207 return i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
208 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
209 /* XXX:can we do that in mov too? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
210 if (!mp4)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
211 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
212 /* handle undefined as such */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
213 if (lang[0] == '\0')
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
214 lang = "und";
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
215 /* 5bit ascii */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
216 for (i = 0; i < 3; i++) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
217 unsigned char c = (unsigned char)lang[i];
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
218 if (c < 0x60)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
219 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
220 if (c > 0x60 + 0x1f)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
221 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
222 code <<= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
223 code |= (c - 0x60);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
224 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
225 return code;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
226 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
227
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
228 int ff_mov_lang_to_iso639(int code, char *to)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
229 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
230 int i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
231 /* is it the mangled iso code? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
232 /* see http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
233 if (code > 138) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
234 for (i = 2; i >= 0; i--) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
235 to[i] = 0x60 + (code & 0x1f);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
236 code >>= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
237 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
238 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
239 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
240 /* old fashion apple lang code */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
241 if (code >= (sizeof(mov_mdhd_language_map)/sizeof(char *)))
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
242 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
243 if (!mov_mdhd_language_map[code])
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
244 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
245 strncpy(to, mov_mdhd_language_map[code], 4);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
246 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
247 }