annotate isom.c @ 3754:8d267b43eaba libavformat

Move malloc() down until after all initializations, so that the resource is only allocated if initialization worked. This means that on failure, we don't have to deallocate it.
author rbultje
date Sat, 23 Aug 2008 18:46:30 +0000
parents 0c46eb1cd9b3
children a8a70ae19206
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 */
2976
44bc0517584d reorder object types id by muxing preference
bcoudurier
parents: 2974
diff changeset
29 /* ordered by muxing preference */
1948
80d330650d35 cosmectics, mov -> mp4
bcoudurier
parents: 1947
diff changeset
30 const AVCodecTag ff_mp4_obj_type[] = {
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
31 { CODEC_ID_MPEG4 , 32 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
32 { CODEC_ID_H264 , 33 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
33 { CODEC_ID_AAC , 64 },
2976
44bc0517584d reorder object types id by muxing preference
bcoudurier
parents: 2974
diff changeset
34 { CODEC_ID_MPEG2VIDEO, 97 }, /* MPEG2 Main */
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
35 { CODEC_ID_MPEG2VIDEO, 96 }, /* MPEG2 Simple */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
36 { CODEC_ID_MPEG2VIDEO, 98 }, /* MPEG2 SNR */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
37 { CODEC_ID_MPEG2VIDEO, 99 }, /* MPEG2 Spatial */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
38 { CODEC_ID_MPEG2VIDEO, 100 }, /* MPEG2 High */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
39 { CODEC_ID_MPEG2VIDEO, 101 }, /* MPEG2 422 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
40 { CODEC_ID_AAC , 102 }, /* MPEG2 AAC Main */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
41 { CODEC_ID_AAC , 103 }, /* MPEG2 AAC Low */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
42 { CODEC_ID_AAC , 104 }, /* MPEG2 AAC SSR */
2976
44bc0517584d reorder object types id by muxing preference
bcoudurier
parents: 2974
diff changeset
43 { CODEC_ID_MP3 , 107 }, /* 11172-3 */
1944
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
44 { CODEC_ID_MP3 , 105 }, /* 13818-3 */
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
45 { CODEC_ID_MPEG1VIDEO, 106 }, /* 11172-2 */
a626fcf2f59f add specifications reference comments
bcoudurier
parents: 1932
diff changeset
46 { CODEC_ID_MJPEG , 108 }, /* 10918-1 */
1946
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
47 { CODEC_ID_PNG , 109 },
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
48 { CODEC_ID_JPEG2000 , 110 }, /* 15444-1 */
d7a567829189 add some codec object type ids
bcoudurier
parents: 1945
diff changeset
49 { CODEC_ID_VC1 , 163 },
2965
d016b354f1d1 comment vorbis objectype id
bcoudurier
parents: 2964
diff changeset
50 { CODEC_ID_VORBIS , 221 }, /* non standard, gpac uses it */
2971
45ffd9c8b23a Add non standard id needed for dvd subtitles.
michael
parents: 2969
diff changeset
51 { CODEC_ID_DVD_SUBTITLE, 224 }, /* non standard, see unsupported-embedded-subs-2.mp4 */
1259
874dcd428a17 Added codec id for QCELP.
banan
parents: 1216
diff changeset
52 { CODEC_ID_QCELP , 225 },
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
53 { 0, 0 },
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
54 };
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
55
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
56 const AVCodecTag codec_movvideo_tags[] = {
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
57 /* { CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
58
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
59 { CODEC_ID_RAWVIDEO, MKTAG('r', 'a', 'w', ' ') }, /* Uncompressed RGB */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
60 /* { CODEC_ID_RAWVIDEO, MKTAG('Y', 'u', 'v', '2') }, *//* Uncompressed YUV422 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
61 { 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
62 { 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
63
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
64 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, /* PhotoJPEG */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
65 { 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
66 { 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
67 /* { 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
68 { 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
69 { 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
70
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
71 { 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
72 { 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
73 { 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
74 { 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
75
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
76 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
77 { 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
78 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
79 { 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
80
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
81 { CODEC_ID_H263, MKTAG('h', '2', '6', '3') }, /* H263 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
82 { CODEC_ID_H263, MKTAG('s', '2', '6', '3') }, /* H263 ?? works */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
83
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
84 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 'p') }, /* DV PAL */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
85 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, /* DV NTSC */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
86 { 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
87 { 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
88 { 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
89 { CODEC_ID_DVVIDEO, MKTAG('A', 'V', 'd', 'v') }, /* AVID DV */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
90 //{ 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
91 //{ 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
92
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
93 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, /* On2 VP3 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
94 { 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
95 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
96 { 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
97 { CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
98 { CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
99 { CODEC_ID_MSRLE, MKTAG('W', 'R', 'L', 'E') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
100 { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
101
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
102 { 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
103
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
104 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'e', 'g') }, /* MPEG */
3606
1e3027c87aa5 update hdv fourcc descriptions
bcoudurier
parents: 3496
diff changeset
105 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '1') }, /* MPEG2 HDV 720p30 */
1e3027c87aa5 update hdv fourcc descriptions
bcoudurier
parents: 3496
diff changeset
106 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '2') }, /* MPEG2 HDV 1080i60 */
1e3027c87aa5 update hdv fourcc descriptions
bcoudurier
parents: 3496
diff changeset
107 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '3') }, /* MPEG2 HDV 1080i50 */
1e3027c87aa5 update hdv fourcc descriptions
bcoudurier
parents: 3496
diff changeset
108 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '5') }, /* MPEG2 HDV 720p25 */
3607
a5bebf4f4cbb more hdv fourccs
bcoudurier
parents: 3606
diff changeset
109 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '6') }, /* MPEG2 HDV 1080p24 */
a5bebf4f4cbb more hdv fourccs
bcoudurier
parents: 3606
diff changeset
110 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '7') }, /* MPEG2 HDV 1080p25 */
a5bebf4f4cbb more hdv fourccs
bcoudurier
parents: 3606
diff changeset
111 { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '8') }, /* MPEG2 HDV 1080p30 */
1843
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 */
3028
8ab0d506d8ff fcp imx 40 fourccs
bcoudurier
parents: 2985
diff changeset
114 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '4', 'n') }, /* MPEG2 IMX NTSC 525/60 40mb/s produced by FCP */
8ab0d506d8ff fcp imx 40 fourccs
bcoudurier
parents: 2985
diff changeset
115 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '4', 'p') }, /* MPEG2 IMX PAL 625/50 40mb/s produced by FCP */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
116 { 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
117 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'p') }, /* MPEG2 IMX PAL 625/50 30mb/s produced by FCP */
3608
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
118 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', '9') }, /* XDCAM HD422 720p60 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
119 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'a') }, /* XDCAM HD422 720p50 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
120 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'b') }, /* XDCAM HD422 1080i60 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
121 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'c') }, /* XDCAM HD422 1080i50 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
122 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'd') }, /* XDCAM HD422 1080p24 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
123 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'e') }, /* XDCAM HD422 1080p25 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
124 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', '5', 'f') }, /* XDCAM HD422 1080p30 CBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
125 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '1') }, /* XDCAM EX 720p30 VBR */
2040
91dc0ed52efa add xdv2 xdcam hd tag, decode xdcam_hd_1080i60.mov
bcoudurier
parents: 1985
diff changeset
126 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '2') }, /* XDCAM HD 1080i60 */
3608
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
127 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '3') }, /* XDCAM HD 1080i50 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
128 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '4') }, /* XDCAM EX 720p24 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
129 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '5') }, /* XDCAM EX 720p25 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
130 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '6') }, /* XDCAM HD 1080p24 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
131 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '7') }, /* XDCAM HD 1080p25 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
132 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '8') }, /* XDCAM HD 1080p30 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
133 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', '9') }, /* XDCAM EX 720p60 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
134 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'a') }, /* XDCAM EX 720p50 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
135 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'b') }, /* XDCAM EX 1080i60 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
136 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'c') }, /* XDCAM EX 1080i50 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
137 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'd') }, /* XDCAM EX 1080p24 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
138 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'e') }, /* XDCAM EX 1080p25 VBR */
cb6509f71905 add a bunch of new xdcam hd422 fourccs
bcoudurier
parents: 3607
diff changeset
139 { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'f') }, /* XDCAM EX 1080p30 VBR */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
140 { 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
141
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
142 //{ 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
143
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
144 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, /* Truevision Targa */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
145 { 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
146 { 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
147 { CODEC_ID_PNG, MKTAG('p', 'n', 'g', ' ') },
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_VC1, MKTAG('v', 'c', '-', '1') }, /* SMPTE RP 2025 */
3496
cdbf302a3c00 chinese avs demuxing support, demux AVSFileFormat.mp4
bcoudurier
parents: 3244
diff changeset
150 { CODEC_ID_CAVS, MKTAG('a', 'v', 's', '2') },
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
151
1932
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
152 { 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
153 { CODEC_ID_SGI, MKTAG('s', 'g', 'i', ' ') }, /* SGI */
1932
325d25f0cfd3 add dnxhd fourcc
bcoudurier
parents: 1910
diff changeset
154
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
155 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
156 };
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 const AVCodecTag codec_movaudio_tags[] = {
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
159 { CODEC_ID_PCM_S32BE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
160 { CODEC_ID_PCM_S32LE, MKTAG('i', 'n', '3', '2') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
161 { CODEC_ID_PCM_S24BE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
162 { CODEC_ID_PCM_S24LE, MKTAG('i', 'n', '2', '4') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
163 { 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
164 { CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
165 { CODEC_ID_PCM_S16LE, MKTAG('l', 'p', 'c', 'm') },
3738
0c46eb1cd9b3 Make MOV demuxer handle F32BE, F32LE, F64BE and F64LE PCM audio.
pross
parents: 3608
diff changeset
166 { CODEC_ID_PCM_F32BE, MKTAG('f', 'l', '3', '2') },
0c46eb1cd9b3 Make MOV demuxer handle F32BE, F32LE, F64BE and F64LE PCM audio.
pross
parents: 3608
diff changeset
167 { CODEC_ID_PCM_F64BE, MKTAG('f', 'l', '6', '4') },
1851
5535b52e5bd4 add pcm s8 tag
bcoudurier
parents: 1843
diff changeset
168 { CODEC_ID_PCM_S8, MKTAG('s', 'o', 'w', 't') },
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
169 { 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
170 { 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
171 { CODEC_ID_PCM_MULAW, MKTAG('u', 'l', 'a', 'w') }, /* */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
172 { CODEC_ID_PCM_ALAW, MKTAG('a', 'l', 'a', 'w') }, /* */
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_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
175
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
176 { 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
177 { 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
178
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
179 { 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
180 { CODEC_ID_MP3, 0x6D730055 }, /* MPEG layer 3 */
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
181
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
182 /* { 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
183
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
184 { 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
185
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
186 { 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
187 { 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
188
3187
5c8fc77cf10a gsm in mov, demux surge-1-16-B-agsm.mov
bcoudurier
parents: 3171
diff changeset
189 { CODEC_ID_GSM, MKTAG('a', 'g', 's', 'm') },
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
190 { CODEC_ID_ALAC, MKTAG('a', 'l', 'a', 'c') }, /* Apple Lossless */
3244
4c537c1fb020 qcelp fourcc
bcoudurier
parents: 3223
diff changeset
191
4c537c1fb020 qcelp fourcc
bcoudurier
parents: 3223
diff changeset
192 { CODEC_ID_QCELP, MKTAG('Q','c','l','p') },
4c537c1fb020 qcelp fourcc
bcoudurier
parents: 3223
diff changeset
193 { CODEC_ID_QCELP, MKTAG('s','q','c','p') }, /* ISO Media fourcc */
4c537c1fb020 qcelp fourcc
bcoudurier
parents: 3223
diff changeset
194
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
195 { CODEC_ID_QDM2, MKTAG('Q', 'D', 'M', '2') }, /* QDM2 */
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
196
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
197 { CODEC_ID_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
198 { CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
199
3223
4a2ac786dd57 Identify codec in GMCMidiaASX.mov correctly.
michael
parents: 3187
diff changeset
200 { CODEC_ID_WMAV2, MKTAG('W', 'M', 'A', '2') },
4a2ac786dd57 Identify codec in GMCMidiaASX.mov correctly.
michael
parents: 3187
diff changeset
201
1843
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
202 { CODEC_ID_NONE, 0 },
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
203 };
9cd8cb3275f6 use common tables for mov muxer and demuxer
bcoudurier
parents: 1677
diff changeset
204
2969
f3a3115a96e4 Set correct codec type and id for text subtitles.
michael
parents: 2965
diff changeset
205 const AVCodecTag ff_codec_movsubtitle_tags[] = {
2974
4b6a9b61e9dd Add CODEC_ID_MOV_TEXT and use it instead of modifying the stream in the mov demuxer.
reimar
parents: 2971
diff changeset
206 { CODEC_ID_MOV_TEXT, MKTAG('t', 'e', 'x', 't') },
2985
b346700f30d9 Support MP4 subtitles as in
reimar
parents: 2976
diff changeset
207 { CODEC_ID_MOV_TEXT, MKTAG('t', 'x', '3', 'g') },
2969
f3a3115a96e4 Set correct codec type and id for text subtitles.
michael
parents: 2965
diff changeset
208 { CODEC_ID_NONE, 0 },
f3a3115a96e4 Set correct codec type and id for text subtitles.
michael
parents: 2965
diff changeset
209 };
f3a3115a96e4 Set correct codec type and id for text subtitles.
michael
parents: 2965
diff changeset
210
1216
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
211 /* 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
212 /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
213 /* 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
214 /* 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
215 static const char *mov_mdhd_language_map[] = {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
216 /* 0-9 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
217 "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
218 "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
219 "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
220 "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
221 "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
222 /*?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
223 "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
224 "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
225 "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
226 /* roman? arabic? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
227 "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
228 /*==rundi?*/
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
229 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
230 /* 100 */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
231 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
232 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
233 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
234 "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
235 };
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
236
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
237 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
238 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
239 int i, code = 0;
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 /* old way, only for QT? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
242 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
243 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
244 return i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
245 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
246 /* 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
247 if (!mp4)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
248 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
249 /* handle undefined as such */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
250 if (lang[0] == '\0')
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
251 lang = "und";
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
252 /* 5bit ascii */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
253 for (i = 0; i < 3; i++) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
254 unsigned char c = (unsigned char)lang[i];
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
255 if (c < 0x60)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
256 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
257 if (c > 0x60 + 0x1f)
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
258 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
259 code <<= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
260 code |= (c - 0x60);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
261 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
262 return code;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
263 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
264
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
265 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
266 {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
267 int i;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
268 /* is it the mangled iso code? */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
269 /* 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
270 if (code > 138) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
271 for (i = 2; i >= 0; i--) {
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
272 to[i] = 0x60 + (code & 0x1f);
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
273 code >>= 5;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
274 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
275 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
276 }
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
277 /* old fashion apple lang code */
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
278 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
279 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
280 if (!mov_mdhd_language_map[code])
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
281 return 0;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
282 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
283 return 1;
fec0a3d5408f move common code from mov.c and movenc.c to isom.c
bcoudurier
parents:
diff changeset
284 }