annotate isom.c @ 2293:9aea08e128f9 libavformat

treat NONE as U8 to fix qtNONE/000_0032.MOV, this should not any have side effect since if bps is 16 in stsd, codec will be changed to s16be, just yell if this breaks any sample
author bcoudurier
date Mon, 30 Jul 2007 10:00:42 +0000
parents 040bdd013062
children 6bee167191aa
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) */
2081
040bdd013062 dmb1 fourcc, mjpeg_opendml.mov
bcoudurier
parents: 2040
diff changeset
73 { CODEC_ID_MJPEG, MKTAG('d', 'm', 'b', '1') }, /* Motion JPEG OpenDML */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
74 { 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
75
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', '1') }, /* Sorenson Video v1 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
78 { 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
79 { 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
80
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
81 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
82 { 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
83 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
84 { 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
85
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
86 { CODEC_ID_H263, MKTAG('h', '2', '6', '3') }, /* H263 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
87 { CODEC_ID_H263, MKTAG('s', '2', '6', '3') }, /* H263 ?? works */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
88
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
89 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 'p') }, /* DV PAL */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
90 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, /* DV NTSC */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
91 { 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
92 { 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
93 { 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
94 { CODEC_ID_DVVIDEO, MKTAG('A', 'V', 'd', 'v') }, /* AVID DV */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
95 //{ 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
96 //{ 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
97
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
98 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, /* On2 VP3 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
99 { 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
100 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
101 { 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
102 { CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
103 { CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
104 { CODEC_ID_MSRLE, MKTAG('W', 'R', 'L', 'E') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
105 { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
106
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
107 { 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
108
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
109 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'e', 'g') }, /* MPEG */
1959
4e7e64bb5d3c add hdv1 fourcc
bcoudurier
parents: 1952
diff changeset
110 { 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
111 { 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
112 { 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
113 { 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
114 { 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
115 { 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
116 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'p') }, /* MPEG2 IMX PAL 625/50 30mb/s produced by FCP */
2040
91dc0ed52efa add xdv2 xdcam hd tag, decode xdcam_hd_1080i60.mov
bcoudurier
parents: 1985
diff changeset
117 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '2') }, /* XDCAM HD 1080i60 */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
118 { 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
119
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
120 //{ 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
121
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
122 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, /* Truevision Targa */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
123 { 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
124 { 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
125 { CODEC_ID_PNG, MKTAG('p', 'n', 'g', ' ') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
126
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
127 { CODEC_ID_VC1, MKTAG('v', 'c', '-', '1') }, /* SMPTE RP 2025 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
128
1932
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
129 { CODEC_ID_DNXHD, MKTAG('A', 'V', 'd', 'n') }, /* AVID DNxHD */
1985
b5e15030d788 SGI image decoder ported to the new image API.
diego
parents: 1959
diff changeset
130 { CODEC_ID_SGI, MKTAG('s', 'g', 'i', ' ') }, /* SGI */
1932
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
131
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
132 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
133 };
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
134
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
135 const AVCodecTag codec_movaudio_tags[] = {
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
136 { CODEC_ID_PCM_S32BE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
137 { CODEC_ID_PCM_S32LE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
138 { CODEC_ID_PCM_S24BE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
139 { CODEC_ID_PCM_S24LE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
140 { 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
141 { CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
142 { CODEC_ID_PCM_S16LE, MKTAG('l', 'p', 'c', 'm') },
1851
5535b52e5bd4 add pcm s8 tag
bcoudurier
parents: 1843
diff changeset
143 { CODEC_ID_PCM_S8, MKTAG('s', 'o', 'w', 't') },
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
144 { CODEC_ID_PCM_U8, MKTAG('r', 'a', 'w', ' ') }, /* 8 bits unsigned */
2293
9aea08e128f9 treat NONE as U8 to fix qtNONE/000_0032.MOV, this should not any have side effect since if bps is 16 in stsd, codec will be changed to s16be, just yell if this breaks any sample
bcoudurier
parents: 2081
diff changeset
145 { CODEC_ID_PCM_U8, MKTAG('N', 'O', 'N', 'E') }, /* uncompressed */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
146 { CODEC_ID_PCM_MULAW, MKTAG('u', 'l', 'a', 'w') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
147 { CODEC_ID_PCM_ALAW, MKTAG('a', 'l', 'a', 'w') }, /* */
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_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
150 { 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
151
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
152 { 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
153 { 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
154
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
155 { 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
156 { CODEC_ID_MP3, 0x6D730055 }, /* MPEG layer 3 */
c41103eb0a2f prefer MP3 id
bcoudurier
parents: 1951
diff changeset
157 { 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
158
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
159 /* { 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
160
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
161 { 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
162
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
163 { 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
164 { 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
165
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
166 { 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
167
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
168 { CODEC_ID_ALAC, MKTAG('a', 'l', 'a', 'c') }, /* Apple Lossless */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
169 { CODEC_ID_QDM2, MKTAG('Q', 'D', 'M', '2') }, /* QDM2 */
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_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
172 { CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
173
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
174 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
175 };
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
176
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
177 /* 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
178 /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
179 /* 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
180 /* 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
181 static const char *mov_mdhd_language_map[] = {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
182 /* 0-9 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
183 "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
184 "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
185 "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
186 "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
187 "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
188 /*?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
189 "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
190 "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
191 "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
192 /* roman? arabic? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
193 "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
194 /*==rundi?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
195 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
196 /* 100 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
197 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
198 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
199 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
200 "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
201 };
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
202
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
203 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
204 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
205 int i, code = 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
206
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
207 /* old way, only for QT? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
208 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
209 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
210 return i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
211 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
212 /* 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
213 if (!mp4)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
214 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
215 /* handle undefined as such */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
216 if (lang[0] == '\0')
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
217 lang = "und";
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
218 /* 5bit ascii */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
219 for (i = 0; i < 3; i++) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
220 unsigned char c = (unsigned char)lang[i];
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
221 if (c < 0x60)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
222 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
223 if (c > 0x60 + 0x1f)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
224 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
225 code <<= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
226 code |= (c - 0x60);
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 return code;
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
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
231 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
232 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
233 int i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
234 /* is it the mangled iso code? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
235 /* 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
236 if (code > 138) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
237 for (i = 2; i >= 0; i--) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
238 to[i] = 0x60 + (code & 0x1f);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
239 code >>= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
240 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
241 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
242 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
243 /* old fashion apple lang code */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
244 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
245 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
246 if (!mov_mdhd_language_map[code])
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
247 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
248 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
249 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
250 }