/src/vlc/modules/demux/mp4/libmp4.h
Line | Count | Source |
1 | | /***************************************************************************** |
2 | | * libmp4.h : LibMP4 library for mp4 module for vlc |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 2001-2004, 2010 VLC authors and VideoLAN |
5 | | * |
6 | | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
7 | | * |
8 | | * This program is free software; you can redistribute it and/or modify it |
9 | | * under the terms of the GNU Lesser General Public License as published by |
10 | | * the Free Software Foundation; either version 2.1 of the License, or |
11 | | * (at your option) any later version. |
12 | | * |
13 | | * This program is distributed in the hope that it will be useful, |
14 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | | * GNU Lesser General Public License for more details. |
17 | | * |
18 | | * You should have received a copy of the GNU Lesser General Public License |
19 | | * along with this program; if not, write to the Free Software Foundation, |
20 | | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
21 | | *****************************************************************************/ |
22 | | #ifndef VLC_MP4_LIBMP4_H_ |
23 | | #define VLC_MP4_LIBMP4_H_ |
24 | | |
25 | | #include <vlc_es.h> |
26 | | #include <vlc_codecs.h> |
27 | | #include "coreaudio.h" |
28 | | |
29 | | #ifdef __cplusplus |
30 | | extern "C" { |
31 | | #endif |
32 | | |
33 | | /* Use alias for scaled time */ |
34 | | typedef int64_t stime_t; |
35 | | |
36 | 2.70k | #define BLOCK16x16 (1<<16) |
37 | | |
38 | 0 | #define BRAND_3gp4 VLC_FOURCC( '3', 'g', 'p', '4' ) |
39 | 0 | #define BRAND_3gp5 VLC_FOURCC( '3', 'g', 'p', '5' ) |
40 | 0 | #define BRAND_3gp6 VLC_FOURCC( '3', 'g', 'p', '6' ) |
41 | 0 | #define BRAND_3gp7 VLC_FOURCC( '3', 'g', 'p', '7' ) |
42 | 39 | #define BRAND_isml VLC_FOURCC( 'i', 's', 'm', 'l' ) |
43 | 140 | #define BRAND_isom VLC_FOURCC( 'i', 's', 'o', 'm' ) |
44 | | #define BRAND_iso2 VLC_FOURCC( 'i', 's', 'o', '2' ) |
45 | | #define BRAND_iso6 VLC_FOURCC( 'i', 's', 'o', '6' ) |
46 | 25 | #define BRAND_qt__ VLC_FOURCC( 'q', 't', ' ', ' ' ) |
47 | 8 | #define BRAND_f4v VLC_FOURCC( 'f', '4', 'v', ' ' ) /* Adobe Flash */ |
48 | 1.84k | #define BRAND_dash VLC_FOURCC( 'd', 'a', 's', 'h' ) |
49 | 1.82k | #define BRAND_smoo VLC_FOURCC( 's', 'm', 'o', 'o' ) /* Internal use */ |
50 | | #define BRAND_mp41 VLC_FOURCC( 'm', 'p', '4', '1' ) |
51 | | #define BRAND_av01 VLC_FOURCC( 'a', 'v', '0', '1' ) |
52 | | #define BRAND_avc1 VLC_FOURCC( 'a', 'v', 'c', '1' ) |
53 | 124 | #define BRAND_M4A VLC_FOURCC( 'M', '4', 'A', ' ' ) |
54 | | #define BRAND_piff VLC_FOURCC( 'p', 'i', 'f', 'f' ) |
55 | 15 | #define BRAND_mif1 VLC_FOURCC( 'm', 'i', 'f', '1' ) /* heif */ |
56 | 1 | #define BRAND_msf1 VLC_FOURCC( 'm', 's', 'f', '1' ) /* heif */ |
57 | 33 | #define BRAND_heic VLC_FOURCC( 'h', 'e', 'i', 'c' ) /* heif */ |
58 | 49 | #define BRAND_heix VLC_FOURCC( 'h', 'e', 'i', 'x' ) /* heif */ |
59 | 1 | #define BRAND_hevc VLC_FOURCC( 'h', 'e', 'v', 'c' ) /* heif */ |
60 | 1 | #define BRAND_hevx VLC_FOURCC( 'h', 'e', 'v', 'x' ) /* heif */ |
61 | 52 | #define BRAND_jpeg VLC_FOURCC( 'j', 'p', 'e', 'g' ) /* heif */ |
62 | | #define BRAND_jpgs VLC_FOURCC( 'j', 'p', 'g', 's' ) /* heif */ |
63 | 56 | #define BRAND_avci VLC_FOURCC( 'a', 'v', 'c', 'i' ) /* heif */ |
64 | 1 | #define BRAND_avcs VLC_FOURCC( 'a', 'v', 'c', 's' ) /* heif */ |
65 | 4.94k | #define BRAND_avif VLC_FOURCC( 'a', 'v', 'i', 'f' ) /* heif AV1 AVIF */ |
66 | 1 | #define BRAND_avis VLC_FOURCC( 'a', 'v', 'i', 's' ) /* heig AV1 AVIF */ |
67 | | |
68 | 31.3k | #define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' ) |
69 | 373k | #define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' ) |
70 | | |
71 | 6.06k | #define ATOM_ftyp VLC_FOURCC( 'f', 't', 'y', 'p' ) |
72 | 11.6k | #define ATOM_moov VLC_FOURCC( 'm', 'o', 'o', 'v' ) |
73 | 314 | #define ATOM_foov VLC_FOURCC( 'f', 'o', 'o', 'v' ) |
74 | 774 | #define ATOM_cmov VLC_FOURCC( 'c', 'm', 'o', 'v' ) |
75 | | #define ATOM_dcom VLC_FOURCC( 'd', 'c', 'o', 'm' ) |
76 | | #define ATOM_cmvd VLC_FOURCC( 'c', 'm', 'v', 'd' ) |
77 | | |
78 | | #define ATOM_styp VLC_FOURCC( 's', 't', 'y', 'p' ) |
79 | 10.4k | #define ATOM_moof VLC_FOURCC( 'm', 'o', 'o', 'f' ) |
80 | 25.2k | #define ATOM_mdat VLC_FOURCC( 'm', 'd', 'a', 't' ) |
81 | 421 | #define ATOM_skip VLC_FOURCC( 's', 'k', 'i', 'p' ) |
82 | 4.68k | #define ATOM_free VLC_FOURCC( 'f', 'r', 'e', 'e' ) |
83 | 629 | #define ATOM_udta VLC_FOURCC( 'u', 'd', 't', 'a' ) |
84 | 423 | #define ATOM_wide VLC_FOURCC( 'w', 'i', 'd', 'e' ) |
85 | | #define ATOM_binm VLC_FOURCC( 0x82, 0x82, 0x7f, 0x7d ) /* binary Computer Graphics Metafile */ |
86 | | |
87 | | /* Quicktime preview */ |
88 | 0 | #define ATOM_pnot VLC_FOURCC( 'p', 'n', 'o', 't' ) |
89 | 876 | #define ATOM_pict VLC_FOURCC( 'p', 'i', 'c', 't' ) |
90 | 0 | #define ATOM_PICT VLC_FOURCC( 'P', 'I', 'C', 'T' ) |
91 | | |
92 | 919 | #define ATOM_data VLC_FOURCC( 'd', 'a', 't', 'a' ) |
93 | | |
94 | 1.20k | #define ATOM_trak VLC_FOURCC( 't', 'r', 'a', 'k' ) |
95 | 771 | #define ATOM_mvhd VLC_FOURCC( 'm', 'v', 'h', 'd' ) |
96 | | #define ATOM_tkhd VLC_FOURCC( 't', 'k', 'h', 'd' ) |
97 | | #define ATOM_tref VLC_FOURCC( 't', 'r', 'e', 'f' ) |
98 | | #define ATOM_load VLC_FOURCC( 'l', 'o', 'a', 'd' ) |
99 | 1.44k | #define ATOM_mdia VLC_FOURCC( 'm', 'd', 'i', 'a' ) |
100 | | #define ATOM_mdhd VLC_FOURCC( 'm', 'd', 'h', 'd' ) |
101 | 7.00k | #define ATOM_hdlr VLC_FOURCC( 'h', 'd', 'l', 'r' ) |
102 | | #define ATOM_minf VLC_FOURCC( 'm', 'i', 'n', 'f' ) |
103 | | #define ATOM_vmhd VLC_FOURCC( 'v', 'm', 'h', 'd' ) |
104 | | #define ATOM_smhd VLC_FOURCC( 's', 'm', 'h', 'd' ) |
105 | | #define ATOM_hmhd VLC_FOURCC( 'h', 'm', 'h', 'd' ) |
106 | | #define ATOM_dinf VLC_FOURCC( 'd', 'i', 'n', 'f' ) |
107 | | #define ATOM_url VLC_FOURCC( 'u', 'r', 'l', ' ' ) |
108 | | #define ATOM_urn VLC_FOURCC( 'u', 'r', 'n', ' ' ) |
109 | | #define ATOM_dref VLC_FOURCC( 'd', 'r', 'e', 'f' ) |
110 | | #define ATOM_stbl VLC_FOURCC( 's', 't', 'b', 'l' ) |
111 | | #define ATOM_stts VLC_FOURCC( 's', 't', 't', 's' ) |
112 | | #define ATOM_ctts VLC_FOURCC( 'c', 't', 't', 's' ) |
113 | | #define ATOM_cslg VLC_FOURCC( 'c', 's', 'l', 'g' ) |
114 | | #define ATOM_stsd VLC_FOURCC( 's', 't', 's', 'd' ) |
115 | | #define ATOM_stsz VLC_FOURCC( 's', 't', 's', 'z' ) |
116 | | #define ATOM_stz2 VLC_FOURCC( 's', 't', 'z', '2' ) |
117 | | #define ATOM_stsc VLC_FOURCC( 's', 't', 's', 'c' ) |
118 | 1.37k | #define ATOM_stco VLC_FOURCC( 's', 't', 'c', 'o' ) |
119 | | #define ATOM_co64 VLC_FOURCC( 'c', 'o', '6', '4' ) |
120 | 6 | #define ATOM_sbgp VLC_FOURCC( 's', 'b', 'g', 'p' ) |
121 | 0 | #define ATOM_sgpd VLC_FOURCC( 's', 'g', 'p', 'd' ) |
122 | | #define ATOM_stss VLC_FOURCC( 's', 't', 's', 's' ) |
123 | | #define ATOM_stsh VLC_FOURCC( 's', 't', 's', 'h' ) |
124 | | #define ATOM_stdp VLC_FOURCC( 's', 't', 'd', 'p' ) |
125 | | #define ATOM_edts VLC_FOURCC( 'e', 'd', 't', 's' ) |
126 | | #define ATOM_elst VLC_FOURCC( 'e', 'l', 's', 't' ) |
127 | | #define ATOM_mvex VLC_FOURCC( 'm', 'v', 'e', 'x' ) |
128 | | #define ATOM_sdtp VLC_FOURCC( 's', 'd', 't', 'p' ) |
129 | 217 | #define ATOM_trex VLC_FOURCC( 't', 'r', 'e', 'x' ) |
130 | | #define ATOM_mehd VLC_FOURCC( 'm', 'e', 'h', 'd' ) |
131 | | #define ATOM_mfhd VLC_FOURCC( 'm', 'f', 'h', 'd' ) |
132 | 644 | #define ATOM_traf VLC_FOURCC( 't', 'r', 'a', 'f' ) |
133 | 259 | #define ATOM_sidx VLC_FOURCC( 's', 'i', 'd', 'x' ) |
134 | | #define ATOM_tfhd VLC_FOURCC( 't', 'f', 'h', 'd' ) |
135 | | #define ATOM_tfdt VLC_FOURCC( 't', 'f', 'd', 't' ) |
136 | 355 | #define ATOM_trun VLC_FOURCC( 't', 'r', 'u', 'n' ) |
137 | | #define ATOM_cprt VLC_FOURCC( 'c', 'p', 'r', 't' ) |
138 | | #define ATOM_iods VLC_FOURCC( 'i', 'o', 'd', 's' ) |
139 | 352 | #define ATOM_pasp VLC_FOURCC( 'p', 'a', 's', 'p' ) |
140 | 12 | #define ATOM_clap VLC_FOURCC( 'c', 'l', 'a', 'p' ) |
141 | 0 | #define ATOM_mfra VLC_FOURCC( 'm', 'f', 'r', 'a' ) |
142 | 0 | #define ATOM_mfro VLC_FOURCC( 'm', 'f', 'r', 'o' ) |
143 | 0 | #define ATOM_tfra VLC_FOURCC( 't', 'f', 'r', 'a' ) |
144 | | #define ATOM_keys VLC_FOURCC( 'k', 'e', 'y', 's' ) |
145 | | |
146 | | #define ATOM_st3d VLC_FOURCC( 's', 't', '3', 'd' ) |
147 | | #define ATOM_sv3d VLC_FOURCC( 's', 'v', '3', 'd' ) |
148 | | #define ATOM_proj VLC_FOURCC( 'p', 'r', 'o', 'j' ) |
149 | | #define ATOM_prhd VLC_FOURCC( 'p', 'r', 'h', 'd' ) |
150 | | #define ATOM_cbmp VLC_FOURCC( 'c', 'b', 'm', 'p' ) |
151 | | #define ATOM_equi VLC_FOURCC( 'e', 'q', 'u', 'i' ) |
152 | | |
153 | | #define ATOM_nmhd VLC_FOURCC( 'n', 'm', 'h', 'd' ) |
154 | | #define ATOM_mp2v VLC_FOURCC( 'm', 'p', '2', 'v' ) |
155 | | #define ATOM_mp4v VLC_FOURCC( 'm', 'p', '4', 'v' ) |
156 | 125 | #define ATOM_mp4a VLC_FOURCC( 'm', 'p', '4', 'a' ) |
157 | 0 | #define ATOM_mp4s VLC_FOURCC( 'm', 'p', '4', 's' ) |
158 | 3.29k | #define ATOM_vide VLC_FOURCC( 'v', 'i', 'd', 'e' ) |
159 | 2.03k | #define ATOM_soun VLC_FOURCC( 's', 'o', 'u', 'n' ) |
160 | | #define ATOM_hint VLC_FOURCC( 'h', 'i', 'n', 't' ) |
161 | | #define ATOM_hdv2 VLC_FOURCC( 'h', 'd', 'v', '2' ) |
162 | 2.95M | #define ATOM_rrtp VLC_FOURCC( 'r', 'r', 't', 'p' ) |
163 | | |
164 | | #define ATOM_hnti VLC_FOURCC( 'h', 'n', 't', 'i' ) |
165 | | #define ATOM_rtp VLC_FOURCC( 'r', 't', 'p', ' ' ) |
166 | | #define ATOM_btrt VLC_FOURCC( 'b', 't', 'r', 't' ) |
167 | | #define ATOM_sdp VLC_FOURCC( 's', 'd', 'p', ' ' ) |
168 | | |
169 | | #define ATOM_tims VLC_FOURCC( 't', 'i', 'm', 's' ) |
170 | | #define ATOM_tsro VLC_FOURCC( 't', 's', 'r', 'o' ) |
171 | | #define ATOM_tssy VLC_FOURCC( 't', 's', 's', 'y' ) |
172 | | |
173 | | #define ATOM_esds VLC_FOURCC( 'e', 's', 'd', 's' ) |
174 | | |
175 | | #define ATOM_lpcm VLC_FOURCC( 'l', 'p', 'c', 'm' ) |
176 | | #define ATOM__mp3 VLC_FOURCC( '.', 'm', 'p', '3' ) |
177 | | #define ATOM_ms02 VLC_FOURCC( 'm', 's', 0x0, 0x02 ) |
178 | | #define ATOM_ms11 VLC_FOURCC( 'm', 's', 0x0, 0x11 ) |
179 | | #define ATOM_ms55 VLC_FOURCC( 'm', 's', 0x0, 0x55 ) |
180 | 0 | #define ATOM_twos VLC_FOURCC( 't', 'w', 'o', 's' ) |
181 | 0 | #define ATOM_sowt VLC_FOURCC( 's', 'o', 'w', 't' ) |
182 | | #define ATOM_QDMC VLC_FOURCC( 'Q', 'D', 'M', 'C' ) |
183 | | #define ATOM_QDM2 VLC_FOURCC( 'Q', 'D', 'M', '2' ) |
184 | 0 | #define ATOM_XiFL VLC_FOURCC( 'X', 'i', 'F', 'L' ) |
185 | 0 | #define ATOM_XiVs VLC_FOURCC( 'X', 'i', 'V', 's' ) |
186 | | #define ATOM_ima4 VLC_FOURCC( 'i', 'm', 'a', '4' ) |
187 | | #define ATOM_IMA4 VLC_FOURCC( 'I', 'M', 'A', '4' ) |
188 | | #define ATOM_dvi VLC_FOURCC( 'd', 'v', 'i', ' ' ) |
189 | | #define ATOM_MAC3 VLC_FOURCC( 'M', 'A', 'C', '3' ) |
190 | | #define ATOM_MAC6 VLC_FOURCC( 'M', 'A', 'C', '6' ) |
191 | | #define ATOM_alaw VLC_FOURCC( 'a', 'l', 'a', 'w' ) |
192 | | #define ATOM_ulaw VLC_FOURCC( 'u', 'l', 'a', 'w' ) |
193 | | #define ATOM_Qclp VLC_FOURCC( 'Q', 'c', 'l', 'p' ) |
194 | 457 | #define ATOM_samr VLC_FOURCC( 's', 'a', 'm', 'r' ) |
195 | 457 | #define ATOM_sawb VLC_FOURCC( 's', 'a', 'w', 'b' ) |
196 | | #define ATOM_OggS VLC_FOURCC( 'O', 'g', 'g', 'S' ) |
197 | 12 | #define ATOM_agsm VLC_FOURCC( 'a', 'g', 's', 'm' ) |
198 | | #define ATOM_alac VLC_FOURCC( 'a', 'l', 'a', 'c' ) |
199 | 0 | #define ATOM_AC3 VLC_FOURCC( 'A', 'C', '-', '3' ) |
200 | 0 | #define ATOM_ac3 VLC_FOURCC( 'a', 'c', '-', '3' ) |
201 | 0 | #define ATOM_eac3 VLC_FOURCC( 'e', 'c', '-', '3' ) |
202 | | #define ATOM_dac3 VLC_FOURCC( 'd', 'a', 'c', '3' ) |
203 | | #define ATOM_dec3 VLC_FOURCC( 'd', 'e', 'c', '3' ) |
204 | | #define ATOM_ddts VLC_FOURCC( 'd', 'd', 't', 's' ) /* DTS formats */ |
205 | 0 | #define ATOM_dtsc VLC_FOURCC( 'd', 't', 's', 'c' ) |
206 | 86 | #define ATOM_dtsh VLC_FOURCC( 'd', 't', 's', 'h' ) |
207 | 86 | #define ATOM_dtsl VLC_FOURCC( 'd', 't', 's', 'l' ) |
208 | 0 | #define ATOM_dtse VLC_FOURCC( 'd', 't', 's', 'e' ) |
209 | | #define ATOM_dtsm VLC_FOURCC( 'd', 't', 's', '-' ) |
210 | | #define ATOM_dtsp VLC_FOURCC( 'd', 't', 's', '+' ) |
211 | | #define ATOM_vc1 VLC_FOURCC( 'v', 'c', '-', '1' ) |
212 | | #define ATOM_dvc1 VLC_FOURCC( 'd', 'v', 'c', '1' ) |
213 | 0 | #define ATOM_WMA2 VLC_FOURCC( 'W', 'M', 'A', '2' ) |
214 | 18 | #define ATOM_wma VLC_FOURCC( 'w', 'm', 'a', ' ' ) |
215 | | #define ATOM_enda VLC_FOURCC( 'e', 'n', 'd', 'a' ) |
216 | 7 | #define ATOM_gnre VLC_FOURCC( 'g', 'n', 'r', 'e' ) |
217 | 7 | #define ATOM_trkn VLC_FOURCC( 't', 'r', 'k', 'n' ) |
218 | | #define ATOM_chan VLC_FOURCC( 'c', 'h', 'a', 'n' ) |
219 | | #define ATOM_srat VLC_FOURCC( 's', 'r', 'a', 't' ) |
220 | 1 | #define ATOM_in24 VLC_FOURCC( 'i', 'n', '2', '4' ) |
221 | 0 | #define ATOM_in32 VLC_FOURCC( 'i', 'n', '3', '2' ) |
222 | 1 | #define ATOM_fl32 VLC_FOURCC( 'f', 'l', '3', '2' ) |
223 | 0 | #define ATOM_fl64 VLC_FOURCC( 'f', 'l', '6', '4' ) |
224 | 0 | #define ATOM_Opus VLC_FOURCC( 'O', 'p', 'u', 's' ) |
225 | 0 | #define ATOM_fLaC VLC_FOURCC( 'f', 'L', 'a', 'C' ) |
226 | | #define ATOM_dfLa VLC_FOURCC( 'd', 'f', 'L', 'a' ) |
227 | | |
228 | | /* ISO-IEC 23003-5 */ |
229 | 0 | #define ATOM_fpcm VLC_FOURCC( 'f', 'p', 'c', 'm' ) |
230 | 0 | #define ATOM_ipcm VLC_FOURCC( 'i', 'p', 'c', 'm' ) |
231 | | #define ATOM_pcmC VLC_FOURCC( 'p', 'c', 'm', 'C' ) |
232 | | |
233 | | /* XiphQT */ |
234 | | #define ATOM_fCtS VLC_FOURCC( 'f', 'C', 't', 'S' ) |
235 | | #define ATOM_vCtH VLC_FOURCC( 'v', 'C', 't', 'H' ) |
236 | | #define ATOM_vCtC VLC_FOURCC( 'v', 'C', 't', 'C' ) |
237 | | #define ATOM_vCtd VLC_FOURCC( 'v', 'C', 't', '#' ) |
238 | | |
239 | 0 | #define ATOM_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' ) |
240 | | #define ATOM_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' ) |
241 | | #define ATOM_SVQ3 VLC_FOURCC( 'S', 'V', 'Q', '3' ) |
242 | | #define ATOM_ZyGo VLC_FOURCC( 'Z', 'y', 'G', 'o' ) |
243 | | #define ATOM_3IV1 VLC_FOURCC( '3', 'I', 'V', '1' ) |
244 | | #define ATOM_3iv1 VLC_FOURCC( '3', 'i', 'v', '1' ) |
245 | | #define ATOM_3IV2 VLC_FOURCC( '3', 'I', 'V', '2' ) |
246 | | #define ATOM_3iv2 VLC_FOURCC( '3', 'i', 'v', '2' ) |
247 | | #define ATOM_3IVD VLC_FOURCC( '3', 'I', 'V', 'D' ) |
248 | | #define ATOM_3ivd VLC_FOURCC( '3', 'i', 'v', 'd' ) |
249 | | #define ATOM_3VID VLC_FOURCC( '3', 'V', 'I', 'D' ) |
250 | | #define ATOM_3vid VLC_FOURCC( '3', 'v', 'i', 'd' ) |
251 | | #define ATOM_FFV1 VLC_FOURCC( 'F', 'F', 'V', '1' ) |
252 | | #define ATOM_h263 VLC_FOURCC( 'h', '2', '6', '3' ) |
253 | | #define ATOM_s263 VLC_FOURCC( 's', '2', '6', '3' ) |
254 | | #define ATOM_DIVX VLC_FOURCC( 'D', 'I', 'V', 'X' ) |
255 | | #define ATOM_XVID VLC_FOURCC( 'X', 'V', 'I', 'D' ) |
256 | | #define ATOM_cvid VLC_FOURCC( 'c', 'v', 'i', 'd' ) |
257 | | #define ATOM_mjpa VLC_FOURCC( 'm', 'j', 'p', 'a' ) |
258 | | #define ATOM_mjpb VLC_FOURCC( 'm', 'j', 'q', 't' ) |
259 | | #define ATOM_mjqt VLC_FOURCC( 'm', 'j', 'h', 't' ) |
260 | | #define ATOM_mjht VLC_FOURCC( 'm', 'j', 'p', 'b' ) |
261 | | #define ATOM_VP31 VLC_FOURCC( 'V', 'P', '3', '1' ) |
262 | | #define ATOM_vp31 VLC_FOURCC( 'v', 'p', '3', '1' ) |
263 | | #define ATOM_h264 VLC_FOURCC( 'h', '2', '6', '4' ) |
264 | 1 | #define ATOM_H264 VLC_FOURCC( 'H', '2', '6', '4' ) |
265 | | #define ATOM_qdrw VLC_FOURCC( 'q', 'd', 'r', 'w' ) |
266 | 0 | #define ATOM_vp08 VLC_FOURCC( 'v', 'p', '0', '8' ) |
267 | 0 | #define ATOM_vp09 VLC_FOURCC( 'v', 'p', '0', '9' ) |
268 | 0 | #define ATOM_vp10 VLC_FOURCC( 'v', 'p', '1', '0' ) |
269 | 1 | #define ATOM_WMV3 VLC_FOURCC( 'W', 'M', 'V', '3' ) |
270 | | #define ATOM_WVC1 VLC_FOURCC( 'W', 'V', 'C', '1' ) |
271 | | |
272 | 1.20k | #define ATOM_av01 VLC_FOURCC( 'a', 'v', '0', '1' ) |
273 | | #define ATOM_avc1 VLC_FOURCC( 'a', 'v', 'c', '1' ) |
274 | | #define ATOM_avc3 VLC_FOURCC( 'a', 'v', 'c', '3' ) |
275 | 232 | #define ATOM_av1C VLC_FOURCC( 'a', 'v', '1', 'C' ) |
276 | 62 | #define ATOM_avcC VLC_FOURCC( 'a', 'v', 'c', 'C' ) |
277 | | #define ATOM_vpcC VLC_FOURCC( 'v', 'p', 'c', 'C' ) |
278 | | #define ATOM_vvc1 VLC_FOURCC( 'v', 'v', 'c', '1' ) |
279 | | #define ATOM_vvcC VLC_FOURCC( 'v', 'v', 'c', 'C' ) |
280 | 0 | #define ATOM_apv1 VLC_FOURCC( 'a', 'p', 'v', '1' ) |
281 | | #define ATOM_apvC VLC_FOURCC( 'a', 'p', 'v', 'C' ) |
282 | | #define ATOM_m4ds VLC_FOURCC( 'm', '4', 'd', 's' ) |
283 | | |
284 | | #define ATOM_fiel VLC_FOURCC( 'f', 'i', 'e', 'l' ) |
285 | | #define ATOM_glbl VLC_FOURCC( 'g', 'l', 'b', 'l' ) |
286 | 14 | #define ATOM_hvcC VLC_FOURCC( 'h', 'v', 'c', 'C' ) |
287 | 0 | #define ATOM_jpeC VLC_FOURCC( 'j', 'p', 'e', 'C' ) |
288 | | |
289 | | #define ATOM_dvc VLC_FOURCC( 'd', 'v', 'c', ' ' ) |
290 | | #define ATOM_dvp VLC_FOURCC( 'd', 'v', 'p', ' ' ) |
291 | | #define ATOM_dv5n VLC_FOURCC( 'd', 'v', '5', 'n' ) |
292 | | #define ATOM_dv5p VLC_FOURCC( 'd', 'v', '5', 'p' ) |
293 | 0 | #define ATOM_raw VLC_FOURCC( 'r', 'a', 'w', ' ' ) |
294 | | #define ATOM_dOps VLC_FOURCC( 'd', 'O', 'p', 's' ) |
295 | | #define ATOM_wfex VLC_FOURCC( 'w', 'f', 'e', 'x' ) |
296 | | |
297 | | #define ATOM_jpeg VLC_FOURCC( 'j', 'p', 'e', 'g' ) |
298 | | |
299 | | #define ATOM_yv12 VLC_FOURCC( 'y', 'v', '1', '2' ) |
300 | | #define ATOM_yuv2 VLC_FOURCC( 'y', 'u', 'v', '2' ) |
301 | | |
302 | | #define ATOM_rmra VLC_FOURCC( 'r', 'm', 'r', 'a' ) |
303 | | #define ATOM_rmda VLC_FOURCC( 'r', 'm', 'd', 'a' ) |
304 | | #define ATOM_rdrf VLC_FOURCC( 'r', 'd', 'r', 'f' ) |
305 | | #define ATOM_rmdr VLC_FOURCC( 'r', 'm', 'd', 'r' ) |
306 | | #define ATOM_rmvc VLC_FOURCC( 'r', 'm', 'v', 'c' ) |
307 | | #define ATOM_rmcd VLC_FOURCC( 'r', 'm', 'c', 'd' ) |
308 | | #define ATOM_rmqu VLC_FOURCC( 'r', 'm', 'q', 'u' ) |
309 | | #define ATOM_alis VLC_FOURCC( 'a', 'l', 'i', 's' ) |
310 | | |
311 | | #define ATOM_gmhd VLC_FOURCC( 'g', 'm', 'h', 'd' ) |
312 | | #define ATOM_wave VLC_FOURCC( 'w', 'a', 'v', 'e' ) |
313 | | #define ATOM_strf VLC_FOURCC( 's', 't', 'r', 'f' ) |
314 | | |
315 | 457 | #define ATOM_drms VLC_FOURCC( 'd', 'r', 'm', 's' ) |
316 | | #define ATOM_sinf VLC_FOURCC( 's', 'i', 'n', 'f' ) |
317 | | #define ATOM_schi VLC_FOURCC( 's', 'c', 'h', 'i' ) |
318 | | #define ATOM_user VLC_FOURCC( 'u', 's', 'e', 'r' ) |
319 | | #define ATOM_key VLC_FOURCC( 'k', 'e', 'y', ' ' ) |
320 | | #define ATOM_iviv VLC_FOURCC( 'i', 'v', 'i', 'v' ) |
321 | | #define ATOM_mean VLC_FOURCC( 'm', 'e', 'a', 'n' ) |
322 | 58 | #define ATOM_name VLC_FOURCC( 'n', 'a', 'm', 'e' ) |
323 | | #define ATOM_priv VLC_FOURCC( 'p', 'r', 'i', 'v' ) |
324 | 857 | #define ATOM_drmi VLC_FOURCC( 'd', 'r', 'm', 'i' ) |
325 | | #define ATOM_frma VLC_FOURCC( 'f', 'r', 'm', 'a' ) |
326 | | #define ATOM_skcr VLC_FOURCC( 's', 'k', 'c', 'r' ) |
327 | | #define ATOM_ASF VLC_FOURCC( 'A', 'S', 'F', ' ' ) |
328 | | |
329 | 469 | #define ATOM_text VLC_FOURCC( 't', 'e', 'x', 't' ) |
330 | 187 | #define ATOM_tx3g VLC_FOURCC( 't', 'x', '3', 'g' ) |
331 | 108 | #define ATOM_subp VLC_FOURCC( 's', 'u', 'b', 'p' ) |
332 | 247 | #define ATOM_subt VLC_FOURCC( 's', 'u', 'b', 't' ) |
333 | 271 | #define ATOM_sbtl VLC_FOURCC( 's', 'b', 't', 'l' ) |
334 | 108 | #define ATOM_clcp VLC_FOURCC( 'c', 'l', 'c', 'p' ) |
335 | 4 | #define ATOM_c608 VLC_FOURCC( 'c', '6', '0', '8' ) |
336 | 16 | #define ATOM_c708 VLC_FOURCC( 'c', '7', '0', '8' ) |
337 | 0 | #define ATOM_wvtt VLC_FOURCC( 'w', 'v', 't', 't' ) |
338 | | |
339 | | /* In sample for WebVTT */ |
340 | | #define ATOM_vttc VLC_FOURCC( 'v', 't', 't', 'c' ) |
341 | | #define ATOM_payl VLC_FOURCC( 'p', 'a', 'y', 'l' ) |
342 | | |
343 | 10 | #define ATOM_0xa9nam VLC_FOURCC( 0xa9, 'n', 'a', 'm' ) |
344 | | #define ATOM_0xa9aut VLC_FOURCC( 0xa9, 'a', 'u', 't' ) |
345 | | #define ATOM_0xa9cpy VLC_FOURCC( 0xa9, 'c', 'p', 'y' ) |
346 | | #define ATOM_0xa9inf VLC_FOURCC( 0xa9, 'i', 'n', 'f' ) |
347 | | #define ATOM_0xa9isr VLC_FOURCC( 0xa9, 'i', 's', 'r' ) |
348 | | #define ATOM_0xa9lab VLC_FOURCC( 0xa9, 'l', 'a', 'b' ) |
349 | | #define ATOM_0xa9lal VLC_FOURCC( 0xa9, 'l', 'a', 'l' ) |
350 | | #define ATOM_0xa9ART VLC_FOURCC( 0xa9, 'A', 'R', 'T' ) |
351 | | #define ATOM_0xa9des VLC_FOURCC( 0xa9, 'd', 'e', 's' ) |
352 | | #define ATOM_0xa9dir VLC_FOURCC( 0xa9, 'd', 'i', 'r' ) |
353 | | #define ATOM_0xa9cmt VLC_FOURCC( 0xa9, 'c', 'm', 't' ) |
354 | | #define ATOM_0xa9req VLC_FOURCC( 0xa9, 'r', 'e', 'q' ) |
355 | | #define ATOM_0xa9day VLC_FOURCC( 0xa9, 'd', 'a', 'y' ) |
356 | | #define ATOM_0xa9fmt VLC_FOURCC( 0xa9, 'f', 'm', 't' ) |
357 | | #define ATOM_0xa9prd VLC_FOURCC( 0xa9, 'p', 'r', 'd' ) |
358 | | #define ATOM_0xa9prf VLC_FOURCC( 0xa9, 'p', 'r', 'f' ) |
359 | | #define ATOM_0xa9src VLC_FOURCC( 0xa9, 's', 'r', 'c' ) |
360 | | #define ATOM_0xa9alb VLC_FOURCC( 0xa9, 'a', 'l', 'b' ) |
361 | | #define ATOM_0xa9dis VLC_FOURCC( 0xa9, 'd', 'i', 's' ) |
362 | | #define ATOM_0xa9enc VLC_FOURCC( 0xa9, 'e', 'n', 'c' ) |
363 | | #define ATOM_0xa9trk VLC_FOURCC( 0xa9, 't', 'r', 'k' ) |
364 | | #define ATOM_0xa9url VLC_FOURCC( 0xa9, 'u', 'r', 'l' ) |
365 | | #define ATOM_0xa9dsa VLC_FOURCC( 0xa9, 'd', 's', 'a' ) |
366 | | #define ATOM_0xa9hst VLC_FOURCC( 0xa9, 'h', 's', 't' ) |
367 | | #define ATOM_0xa9ope VLC_FOURCC( 0xa9, 'o', 'p', 'e' ) |
368 | | #define ATOM_0xa9wrt VLC_FOURCC( 0xa9, 'w', 'r', 't' ) |
369 | | #define ATOM_0xa9com VLC_FOURCC( 0xa9, 'c', 'o', 'm' ) |
370 | | #define ATOM_0xa9gen VLC_FOURCC( 0xa9, 'g', 'e', 'n' ) |
371 | | #define ATOM_0xa9too VLC_FOURCC( 0xa9, 't', 'o', 'o' ) |
372 | | #define ATOM_0xa9wrn VLC_FOURCC( 0xa9, 'w', 'r', 'n' ) |
373 | | #define ATOM_0xa9swr VLC_FOURCC( 0xa9, 's', 'w', 'r' ) |
374 | | #define ATOM_0xa9mak VLC_FOURCC( 0xa9, 'm', 'a', 'k' ) |
375 | | #define ATOM_0xa9mal VLC_FOURCC( 0xa9, 'm', 'a', 'l' ) |
376 | | #define ATOM_0xa9mod VLC_FOURCC( 0xa9, 'm', 'o', 'd' ) |
377 | | #define ATOM_0xa9PRD VLC_FOURCC( 0xa9, 'P', 'R', 'D' ) |
378 | | #define ATOM_0xa9grp VLC_FOURCC( 0xa9, 'g', 'r', 'p' ) |
379 | | #define ATOM_0xa9lyr VLC_FOURCC( 0xa9, 'l', 'y', 'r' ) |
380 | | #define ATOM_0xa9gen VLC_FOURCC( 0xa9, 'g', 'e', 'n' ) |
381 | | #define ATOM_0xa9st3 VLC_FOURCC( 0xa9, 's', 't', '3' ) |
382 | | #define ATOM_0xa9ard VLC_FOURCC( 0xa9, 'a', 'r', 'd' ) |
383 | | #define ATOM_0xa9arg VLC_FOURCC( 0xa9, 'a', 'r', 'g' ) |
384 | | #define ATOM_0xa9cak VLC_FOURCC( 0xa9, 'c', 'a', 'k' ) |
385 | | #define ATOM_0xa9con VLC_FOURCC( 0xa9, 'c', 'o', 'n' ) |
386 | | #define ATOM_0xa9des VLC_FOURCC( 0xa9, 'd', 'e', 's' ) |
387 | | #define ATOM_0xa9lnt VLC_FOURCC( 0xa9, 'l', 'n', 't' ) |
388 | | #define ATOM_0xa9phg VLC_FOURCC( 0xa9, 'p', 'h', 'g' ) |
389 | | #define ATOM_0xa9pub VLC_FOURCC( 0xa9, 'p', 'u', 'b' ) |
390 | | #define ATOM_0xa9sne VLC_FOURCC( 0xa9, 's', 'n', 'e' ) |
391 | | #define ATOM_0xa9snm VLC_FOURCC( 0xa9, 's', 'n', 'm' ) |
392 | | #define ATOM_0xa9sol VLC_FOURCC( 0xa9, 's', 'o', 'l' ) |
393 | | #define ATOM_0xa9thx VLC_FOURCC( 0xa9, 't', 'h', 'x' ) |
394 | | #define ATOM_0xa9xpd VLC_FOURCC( 0xa9, 'x', 'p', 'd' ) |
395 | | #define ATOM_0xa9xyz VLC_FOURCC( 0xa9, 'x', 'y', 'z' ) |
396 | | #define ATOM_aART VLC_FOURCC( 'a', 'A', 'R', 'T' ) |
397 | | #define ATOM_chpl VLC_FOURCC( 'c', 'h', 'p', 'l' ) |
398 | 92 | #define ATOM_cpil VLC_FOURCC( 'c', 'p', 'i', 'l' ) |
399 | | #define ATOM_HMMT VLC_FOURCC( 'H', 'M', 'M', 'T' ) |
400 | | #define ATOM_desc VLC_FOURCC( 'd', 'e', 's', 'c' ) |
401 | 4 | #define ATOM_disk VLC_FOURCC( 'd', 'i', 's', 'k' ) |
402 | 0 | #define ATOM_ID32 VLC_FOURCC( 'I', 'D', '3', '2' ) |
403 | | #define ATOM_WLOC VLC_FOURCC( 'W', 'L', 'O', 'C' ) |
404 | 234 | #define ATOM_ITUN VLC_FOURCC( '-', '-', '-', '-' ) |
405 | | |
406 | | #define ATOM_meta VLC_FOURCC( 'm', 'e', 't', 'a' ) |
407 | 0 | #define ATOM_atID VLC_FOURCC( 'a', 't', 'I', 'D' ) |
408 | | #define ATOM_ilst VLC_FOURCC( 'i', 'l', 's', 't' ) |
409 | 0 | #define ATOM_cnID VLC_FOURCC( 'c', 'n', 'I', 'D' ) |
410 | | #define ATOM_covr VLC_FOURCC( 'c', 'o', 'v', 'r' ) |
411 | | #define ATOM_flvr VLC_FOURCC( 'f', 'l', 'v', 'r' ) |
412 | 0 | #define ATOM_rtng VLC_FOURCC( 'r', 't', 'n', 'g' ) |
413 | 0 | #define ATOM_thum VLC_FOURCC( 't', 'h', 'u', 'm' ) |
414 | | #define ATOM_tsel VLC_FOURCC( 't', 's', 'e', 'l' ) |
415 | | #define ATOM_xid_ VLC_FOURCC( 'x', 'i', 'd', ' ' ) |
416 | | #define ATOM_gshh VLC_FOURCC( 'g', 's', 'h', 'h' ) |
417 | | #define ATOM_gspm VLC_FOURCC( 'g', 's', 'p', 'm' ) |
418 | | #define ATOM_gspu VLC_FOURCC( 'g', 's', 'p', 'u' ) |
419 | | #define ATOM_gssd VLC_FOURCC( 'g', 's', 's', 'd' ) |
420 | | #define ATOM_gsst VLC_FOURCC( 'g', 's', 's', 't' ) |
421 | | #define ATOM_gstd VLC_FOURCC( 'g', 's', 't', 'd' ) |
422 | 174 | #define ATOM_colr VLC_FOURCC( 'c', 'o', 'l', 'r' ) |
423 | 84 | #define ATOM_irot VLC_FOURCC( 'i', 'r', 'o', 't' ) |
424 | | #define ATOM_SmDm VLC_FOURCC( 'S', 'm', 'D', 'm' ) |
425 | | #define ATOM_CoLL VLC_FOURCC( 'C', 'o', 'L', 'L' ) |
426 | 2.89k | #define ATOM_mdcv VLC_FOURCC( 'm', 'd', 'c', 'v' ) |
427 | 54 | #define ATOM_clli VLC_FOURCC( 'c', 'l', 'l', 'i' ) |
428 | | #define ATOM_purl VLC_FOURCC( 'p', 'u', 'r', 'l' ) |
429 | | #define ATOM_dvcC VLC_FOURCC( 'd', 'v', 'c', 'C' ) |
430 | | #define ATOM_dvvC VLC_FOURCC( 'd', 'v', 'v', 'C' ) |
431 | | #define ATOM_dvwC VLC_FOURCC( 'd', 'v', 'w', 'C' ) |
432 | | |
433 | | #define ATOM_0x40PRM VLC_FOURCC( '@', 'P', 'R', 'M' ) |
434 | | #define ATOM_0x40PRQ VLC_FOURCC( '@', 'P', 'R', 'Q' ) |
435 | | #define ATOM_MCPS VLC_FOURCC( 'M', 'C', 'P', 'S' ) |
436 | | #define ATOM_SDLN VLC_FOURCC( 'S', 'D', 'L', 'N' ) |
437 | | #define ATOM_vndr VLC_FOURCC( 'v', 'n', 'd', 'r' ) |
438 | | |
439 | | #define ATOM_SA3D VLC_FOURCC( 'S', 'A', '3', 'D' ) |
440 | | |
441 | | /* iso4 meta references */ |
442 | | #define ATOM_idat VLC_FOURCC('i','d','a','t') |
443 | | #define ATOM_iloc VLC_FOURCC('i','l','o','c') |
444 | | #define ATOM_iinf VLC_FOURCC('i','i','n','f') |
445 | 12.8k | #define ATOM_infe VLC_FOURCC('i','n','f','e') |
446 | | #define ATOM_iref VLC_FOURCC('i','r','e','f') |
447 | | #define ATOM_pitm VLC_FOURCC('p','i','t','m') |
448 | | /* HEIF specific meta */ |
449 | | #define ATOM_iprp VLC_FOURCC('i','p','r','p') |
450 | | #define ATOM_ipco VLC_FOURCC('i','p','c','o') |
451 | 434 | #define ATOM_ispe VLC_FOURCC('i','s','p','e') |
452 | | #define ATOM_ipma VLC_FOURCC('i','p','m','a') |
453 | | |
454 | 2.50k | #define HANDLER_mdta VLC_FOURCC('m', 'd', 't', 'a') |
455 | 3.61k | #define HANDLER_mdir VLC_FOURCC('m', 'd', 'i', 'r') |
456 | 0 | #define HANDLER_ID32 ATOM_ID32 |
457 | | |
458 | 163 | #define SAMPLEGROUP_rap VLC_FOURCC('r', 'a', 'p', ' ') |
459 | 740k | #define SAMPLEGROUP_roll VLC_FOURCC('r', 'o', 'l', 'l') |
460 | | |
461 | | /* tref reference type boxes */ |
462 | 0 | #define ATOM_chap VLC_FOURCC( 'c', 'h', 'a', 'p' ) |
463 | | #define ATOM_dpnd VLC_FOURCC( 'd', 'p', 'n', 'd' ) |
464 | 136 | #define ATOM_hint VLC_FOURCC( 'h', 'i', 'n', 't' ) |
465 | | #define ATOM_ipir VLC_FOURCC( 'i', 'p', 'i', 'r' ) |
466 | | #define ATOM_mpod VLC_FOURCC( 'm', 'p', 'o', 'd' ) |
467 | | #define ATOM_cdsc VLC_FOURCC( 'c', 'd', 's', 'c' ) |
468 | | |
469 | | /* mpeg or mpeg PS m1v, m1s */ |
470 | 0 | #define HANDLER_m1v VLC_FOURCC('m', '1', 'v', ' ') |
471 | 0 | #define HANDLER_m1s VLC_FOURCC('m', '1', 's', ' ') |
472 | 0 | #define HANDLER_mpeg VLC_FOURCC('M', 'P', 'E', 'G') |
473 | | |
474 | | /* HEIF Specific */ |
475 | 2.47k | #define HANDLER_pict VLC_FOURCC('p', 'i', 'c', 't') |
476 | | |
477 | | /* Do you want some debug information on all read boxes ? */ |
478 | | #ifndef NDEBUG |
479 | | # define MP4_VERBOSE 1 |
480 | | //# define MP4_ULTRA_VERBOSE 1 |
481 | | #endif |
482 | | |
483 | | struct MP4_Box_s; |
484 | | |
485 | 0 | #define MP4_MFRO_BOXSIZE 16 |
486 | | |
487 | | /* uuid Universal Unique IDentifiers */ |
488 | | typedef struct UUID_s |
489 | | { |
490 | | uint8_t b[16]; |
491 | | } UUID_t; |
492 | | |
493 | | /* specific structure for all boxes */ |
494 | | |
495 | | typedef struct MP4_Box_data_tfxd_s |
496 | | { |
497 | | uint8_t i_version; |
498 | | uint32_t i_flags; |
499 | | |
500 | | uint64_t i_fragment_duration; |
501 | | uint64_t i_fragment_abs_time; |
502 | | |
503 | | } MP4_Box_data_tfxd_t; |
504 | | |
505 | | typedef struct TfrfBoxDataFields_s |
506 | | { |
507 | | uint64_t i_fragment_duration; |
508 | | uint64_t i_fragment_abs_time; |
509 | | |
510 | | } TfrfBoxDataFields_t; |
511 | | |
512 | | typedef struct MP4_Box_data_tfrf_s |
513 | | { |
514 | | uint8_t i_version; |
515 | | uint8_t i_fragment_count; |
516 | | uint32_t i_flags; |
517 | | |
518 | | TfrfBoxDataFields_t *p_tfrf_data_fields; |
519 | | |
520 | | } MP4_Box_data_tfrf_t; |
521 | | |
522 | | typedef struct MP4_Box_data_ftyp_s |
523 | | { |
524 | | uint32_t i_major_brand; |
525 | | uint32_t i_minor_version; |
526 | | |
527 | | uint32_t i_compatible_brands_count; |
528 | | uint32_t *i_compatible_brands; |
529 | | |
530 | | } MP4_Box_data_ftyp_t; |
531 | | |
532 | | typedef struct MP4_Box_data_mvhd_s |
533 | | { |
534 | | uint8_t i_version; |
535 | | uint32_t i_flags; |
536 | | |
537 | | uint64_t i_creation_time; |
538 | | uint64_t i_modification_time; |
539 | | uint32_t i_timescale; |
540 | | uint64_t i_duration; |
541 | | |
542 | | int32_t i_rate; |
543 | | int16_t i_volume; |
544 | | uint16_t i_reserved1; |
545 | | uint32_t i_reserved2[2]; |
546 | | int32_t i_matrix[9]; |
547 | | uint32_t i_predefined[6]; |
548 | | uint32_t i_next_track_id; |
549 | | |
550 | | } MP4_Box_data_mvhd_t; |
551 | | |
552 | 2.70k | #define MP4_TRACK_ENABLED 0x000001 |
553 | | #define MP4_TRACK_IN_MOVIE 0x000002 |
554 | | #define MP4_TRACK_IN_PREVIEW 0x000004 |
555 | | typedef struct MP4_Box_data_tkhd_s |
556 | | { |
557 | | uint8_t i_version; |
558 | | uint32_t i_flags; |
559 | | |
560 | | uint64_t i_creation_time; |
561 | | uint64_t i_modification_time; |
562 | | uint32_t i_track_ID; |
563 | | uint32_t i_reserved; |
564 | | uint64_t i_duration; |
565 | | |
566 | | uint32_t i_reserved2[2]; |
567 | | int16_t i_layer; |
568 | | int16_t i_alternate_group; |
569 | | |
570 | | int16_t i_volume; |
571 | | uint16_t i_reserved3; |
572 | | int32_t i_matrix[9]; |
573 | | uint32_t i_width; |
574 | | uint32_t i_height; |
575 | | float f_rotation; |
576 | | int i_flip; |
577 | | |
578 | | } MP4_Box_data_tkhd_t; |
579 | | |
580 | | typedef struct |
581 | | { |
582 | | uint32_t i_start_time; |
583 | | int32_t i_duration; |
584 | | uint32_t i_flags; |
585 | | uint32_t i_hints; |
586 | | } MP4_Box_data_load_t; |
587 | | |
588 | | typedef struct MP4_Box_data_mdhd_s |
589 | | { |
590 | | uint8_t i_version; |
591 | | uint32_t i_flags; |
592 | | |
593 | | uint64_t i_creation_time; |
594 | | uint64_t i_modification_time; |
595 | | uint32_t i_timescale; |
596 | | uint64_t i_duration; |
597 | | |
598 | | char rgs_language[3]; /* ISO-639-2/T or Mac lang table */ |
599 | | bool b_mac_encoding; /* media using mac encoding */ |
600 | | |
601 | | uint16_t i_quality; |
602 | | |
603 | | } MP4_Box_data_mdhd_t; |
604 | | |
605 | | typedef struct MP4_Box_data_hdlr_s |
606 | | { |
607 | | uint8_t i_version; |
608 | | uint32_t i_flags; |
609 | | |
610 | | uint32_t i_predefined; |
611 | | uint32_t i_handler_type; /* "vide" "soun" "hint" "odsm" |
612 | | "crsm" "sdsm" "m7sm" "ocsm" |
613 | | "ipsm" "mjsm" */ |
614 | | |
615 | | unsigned char *psz_name; /* in UTF-8 */ |
616 | | |
617 | | } MP4_Box_data_hdlr_t; |
618 | | |
619 | | typedef struct MP4_Box_data_vmhd_s |
620 | | { |
621 | | uint8_t i_version; |
622 | | uint32_t i_flags; |
623 | | |
624 | | uint16_t i_graphics_mode; |
625 | | uint16_t i_opcolor[3]; |
626 | | |
627 | | } MP4_Box_data_vmhd_t; |
628 | | |
629 | | typedef struct MP4_Box_data_smhd_s |
630 | | { |
631 | | uint8_t i_version; |
632 | | uint32_t i_flags; |
633 | | |
634 | | int16_t i_balance; |
635 | | uint16_t i_reserved; |
636 | | |
637 | | } MP4_Box_data_smhd_t; |
638 | | |
639 | | typedef struct MP4_Box_data_hmhd_s |
640 | | { |
641 | | uint8_t i_version; |
642 | | uint32_t i_flags; |
643 | | |
644 | | uint16_t i_max_PDU_size; |
645 | | uint16_t i_avg_PDU_size; |
646 | | uint32_t i_max_bitrate; |
647 | | uint32_t i_avg_bitrate; |
648 | | uint32_t i_reserved; |
649 | | |
650 | | } MP4_Box_data_hmhd_t; |
651 | | |
652 | | typedef struct MP4_Box_data_url_s |
653 | | { |
654 | | uint8_t i_version; |
655 | | uint32_t i_flags; |
656 | | |
657 | | char *psz_location; |
658 | | |
659 | | } MP4_Box_data_url_t; |
660 | | |
661 | | typedef struct MP4_Box_data_urn_s |
662 | | { |
663 | | uint8_t i_version; |
664 | | uint32_t i_flags; |
665 | | |
666 | | char *psz_name; |
667 | | char *psz_location; |
668 | | |
669 | | } MP4_Box_data_urn_t; |
670 | | |
671 | | typedef struct MP4_Box_data_lcont_s |
672 | | { |
673 | | uint8_t i_version; |
674 | | uint32_t i_flags; |
675 | | |
676 | | uint32_t i_entry_count; |
677 | | /* XXX it's also a container with i_entry_count entry */ |
678 | | } MP4_Box_data_lcont_t; |
679 | | |
680 | | typedef struct MP4_Box_data_stts_s |
681 | | { |
682 | | uint8_t i_version; |
683 | | uint32_t i_flags; |
684 | | |
685 | | uint32_t i_entry_count; |
686 | | uint32_t *pi_sample_count; /* these are array */ |
687 | | uint32_t *pi_sample_delta; |
688 | | |
689 | | } MP4_Box_data_stts_t; |
690 | | |
691 | | typedef struct MP4_Box_data_ctts_s |
692 | | { |
693 | | uint8_t i_version; |
694 | | uint32_t i_flags; |
695 | | |
696 | | uint32_t i_entry_count; |
697 | | |
698 | | uint32_t *pi_sample_count; /* these are array */ |
699 | | int32_t *pi_sample_offset; |
700 | | |
701 | | } MP4_Box_data_ctts_t; |
702 | | |
703 | | typedef struct MP4_Box_data_cslg_s |
704 | | { |
705 | | int64_t ct_to_dts_shift; |
706 | | int64_t i_least_delta; |
707 | | int64_t i_max_delta; |
708 | | int64_t i_composition_starttime; |
709 | | int64_t i_composition_endtime; |
710 | | |
711 | | } MP4_Box_data_cslg_t; |
712 | | |
713 | | // https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-125526 |
714 | | typedef struct MP4_Box_data_colr_s |
715 | | { |
716 | | uint32_t i_type; |
717 | | union |
718 | | { |
719 | | struct |
720 | | { |
721 | | uint16_t i_primary_idx; |
722 | | uint16_t i_transfer_function_idx; |
723 | | uint16_t i_matrix_idx; |
724 | | uint8_t i_full_range; |
725 | | } nclc; |
726 | | }; |
727 | | } MP4_Box_data_colr_t; |
728 | | |
729 | | typedef struct |
730 | | { |
731 | | uint16_t i_ccw_degrees; |
732 | | } MP4_Box_data_irot_t; |
733 | | |
734 | | typedef struct |
735 | | { |
736 | | uint8_t i_version_major; |
737 | | uint8_t i_version_minor; |
738 | | uint8_t i_profile; |
739 | | uint8_t i_level; |
740 | | uint8_t i_rpu_present; |
741 | | uint8_t i_el_present; |
742 | | uint8_t i_bl_present; |
743 | | uint8_t i_bl_signal_compatibility_id; |
744 | | uint8_t i_md_compression; |
745 | | } MP4_Box_data_dvcC_t; |
746 | | |
747 | | #define SAMPLE_DESC_COMMON_HEADER \ |
748 | | uint8_t i_reserved1[6];\ |
749 | | uint16_t i_data_reference_index |
750 | | |
751 | | typedef struct |
752 | | { |
753 | | SAMPLE_DESC_COMMON_HEADER; |
754 | | |
755 | | //uint32_t i_reserved2[2]; |
756 | | uint16_t i_qt_version; |
757 | | uint16_t i_qt_revision_level; |
758 | | uint32_t i_qt_vendor; |
759 | | |
760 | | uint16_t i_channelcount; |
761 | | uint16_t i_samplesize; |
762 | | uint16_t i_compressionid; |
763 | | uint16_t i_reserved3; |
764 | | uint16_t i_sampleratehi; /* timescale of track */ |
765 | | uint16_t i_sampleratelo; |
766 | | |
767 | | /* for version 1 (i_reserved1[0] == 1) */ |
768 | | uint32_t i_sample_per_packet; |
769 | | uint32_t i_bytes_per_packet; |
770 | | uint32_t i_bytes_per_frame; |
771 | | uint32_t i_bytes_per_sample; |
772 | | |
773 | | /* v2 */ |
774 | | uint32_t i_constbitsperchannel; /* consts are nonzero only if constant */ |
775 | | uint32_t i_formatflags; |
776 | | uint32_t i_constbytesperaudiopacket; |
777 | | uint32_t i_constLPCMframesperaudiopacket; |
778 | | |
779 | | /* XXX hack */ |
780 | | int i_qt_description; |
781 | | uint8_t *p_qt_description; |
782 | | |
783 | | } MP4_Box_data_sample_soun_t; |
784 | | |
785 | | typedef struct |
786 | | { |
787 | | SAMPLE_DESC_COMMON_HEADER; |
788 | | |
789 | | uint16_t i_qt_version; |
790 | | uint16_t i_qt_revision_level; |
791 | | uint32_t i_qt_vendor; |
792 | | |
793 | | uint32_t i_qt_temporal_quality; |
794 | | uint32_t i_qt_spatial_quality; |
795 | | |
796 | | int16_t i_width; |
797 | | int16_t i_height; |
798 | | |
799 | | uint32_t i_horizresolution; |
800 | | uint32_t i_vertresolution; |
801 | | |
802 | | uint32_t reserved; |
803 | | uint16_t i_qt_frame_count; |
804 | | |
805 | | char sz_compressorname[32]; |
806 | | uint16_t i_depth; |
807 | | |
808 | | int16_t i_qt_color_table; |
809 | | video_palette_t *p_palette; |
810 | | |
811 | | /* XXX hack ImageDescription */ |
812 | | int i_qt_image_description; |
813 | | uint8_t *p_qt_image_description; |
814 | | |
815 | | } MP4_Box_data_sample_vide_t; |
816 | | |
817 | | #define MP4_TEXT_DISPLAY_FLAG_DONT_DISPLAY (1<<0) |
818 | | #define MP4_TEXT_DISPLAY_FLAG_AUTO_SCALE (1<<1) |
819 | | #define MP4_TEXT_DISPLAY_FLAG_CLIP_TO_TEXT_BOX (1<<2) |
820 | | #define MP4_TEXT_DISPLAY_FLAG_USE_MOVIE_BG_COLOR (1<<3) |
821 | | #define MP4_TEXT_DISPLAY_FLAG_SHRINK_TEXT_BOX_TO_FIT (1<<4) |
822 | | #define MP4_TEXT_DISPLAY_FLAG_SCROLL_IN (1<<5) |
823 | | #define MP4_TEXT_DISPLAY_FLAG_SCROLL_OUT (1<<6) |
824 | | #define MP4_TEXT_DISPLAY_FLAG_HORIZONTAL_SCROLL (1<<7) |
825 | | #define MP4_TEXT_DISPLAY_FLAG_REVERSE_SCROLL (1<<8) |
826 | | #define MP4_TEXT_DISPLAY_FLAG_CONTINUOUS_SCROLL (1<<9) |
827 | | #define MP4_TEXT_DISPLAY_FLAG_FLOW_HORIZONTAL (1<<10) |
828 | | #define MP4_TEXT_DISPLAY_FLAG_CONTINUOUS_KARAOKE (1<<11) |
829 | | #define MP4_TEXT_DISPLAY_FLAG_DROP_SHADOW (1<<12) |
830 | | #define MP4_TEXT_DISPLAY_FLAG_ANTI_ALIAS (1<<13) |
831 | | #define MP4_TEXT_DISPLAY_FLAG_KEYED_TEXT (1<<14) |
832 | | #define MP4_TEXT_DISPLAY_FLAG_INVERSE_HILITE (1<<15) |
833 | | #define MP4_TEXT_DISPLAY_FLAG_COLOR_HILITE (1<<16) |
834 | | #define MP4_TEXT_DISPLAY_FLAG_WRITE_VERTICALLY (1<<17) |
835 | | |
836 | | typedef struct |
837 | | { |
838 | | SAMPLE_DESC_COMMON_HEADER; |
839 | | |
840 | | uint8_t *p_data; |
841 | | size_t i_data; |
842 | | |
843 | | } MP4_Box_data_sample_generic_t; |
844 | | |
845 | | typedef struct MP4_Box_data_rrtp_sample_s |
846 | | { |
847 | | uint16_t i_hinttrackversion; |
848 | | uint16_t i_highestcompatibleversion; |
849 | | uint32_t i_maxpacketsize; |
850 | | |
851 | | uint8_t *p_additionaldata; |
852 | | |
853 | | } MP4_Box_data_rrtp_sample_t; |
854 | | |
855 | | typedef struct MP4_Box_data_timescale_entry_s |
856 | | { |
857 | | uint32_t i_timescale; |
858 | | |
859 | | } MP4_Box_data_timescale_entry_t; |
860 | | |
861 | | typedef struct MP4_Box_data_time_offset_s |
862 | | { |
863 | | uint32_t i_offset; |
864 | | |
865 | | } MP4_Box_data_time_offset_t; |
866 | | |
867 | | typedef struct MP4_Box_data_timestampsynchrony_s |
868 | | { |
869 | | uint8_t i_reserved_timestamp_sync; |
870 | | |
871 | | } MP4_Box_data_timestampsynchrony_t; |
872 | | |
873 | | typedef struct MP4_Box_data_moviehintinformation_rtp_s |
874 | | { |
875 | | uint32_t i_description_format; |
876 | | char *psz_text; |
877 | | |
878 | | } MP4_Box_data_moviehintinformation_rtp_t; |
879 | | |
880 | | typedef struct MP4_Box_data_sdp_s |
881 | | { |
882 | | char *psz_text; |
883 | | |
884 | | } MP4_Box_data_sdp_t; |
885 | | |
886 | | typedef struct MP4_Box_data_tims_s |
887 | | { |
888 | | uint32_t i_timescale; |
889 | | |
890 | | } MP4_Box_data_tims_t; |
891 | | |
892 | | typedef struct MP4_Box_data_tsro_s |
893 | | { |
894 | | int32_t i_offset; |
895 | | |
896 | | } MP4_Box_data_tsro_t; |
897 | | |
898 | | typedef struct MP4_Box_data_tssy_s |
899 | | { |
900 | | uint8_t i_reserved_timestamp_sync; |
901 | | |
902 | | } MP4_Box_data_tssy_t; |
903 | | |
904 | | typedef struct MP4_Box_data_stsd_s |
905 | | { |
906 | | uint8_t i_version; |
907 | | uint32_t i_flags; |
908 | | |
909 | | uint32_t i_entry_count; |
910 | | |
911 | | /* it contains SampleEntry handled as if it was Box */ |
912 | | |
913 | | } MP4_Box_data_stsd_t; |
914 | | |
915 | | |
916 | | typedef struct MP4_Box_data_stsz_s |
917 | | { |
918 | | uint8_t i_version; |
919 | | uint32_t i_flags; |
920 | | |
921 | | uint32_t i_sample_size; |
922 | | uint32_t i_sample_count; |
923 | | |
924 | | uint32_t *i_entry_size; /* array , empty if i_sample_size != 0 */ |
925 | | |
926 | | } MP4_Box_data_stsz_t; |
927 | | |
928 | | typedef struct MP4_Box_data_stsc_s |
929 | | { |
930 | | uint8_t i_version; |
931 | | uint32_t i_flags; |
932 | | |
933 | | uint32_t i_entry_count; |
934 | | |
935 | | uint32_t *i_first_chunk; /* theses are arrays */ |
936 | | uint32_t *i_samples_per_chunk; |
937 | | uint32_t *i_sample_description_index; |
938 | | |
939 | | } MP4_Box_data_stsc_t; |
940 | | |
941 | | |
942 | | typedef struct MP4_Box_data_co64_s |
943 | | { |
944 | | uint8_t i_version; |
945 | | uint32_t i_flags; |
946 | | |
947 | | uint32_t i_entry_count; |
948 | | |
949 | | uint64_t *i_chunk_offset; |
950 | | |
951 | | } MP4_Box_data_co64_t; |
952 | | |
953 | | |
954 | | typedef struct MP4_Box_data_stss_s |
955 | | { |
956 | | uint8_t i_version; |
957 | | uint32_t i_flags; |
958 | | |
959 | | uint32_t i_entry_count; |
960 | | |
961 | | uint32_t *i_sample_number; |
962 | | |
963 | | } MP4_Box_data_stss_t; |
964 | | |
965 | | typedef struct MP4_Box_data_stsh_s |
966 | | { |
967 | | uint8_t i_version; |
968 | | uint32_t i_flags; |
969 | | |
970 | | uint32_t i_entry_count; |
971 | | |
972 | | uint32_t *i_shadowed_sample_number; |
973 | | uint32_t *i_sync_sample_number; |
974 | | |
975 | | } MP4_Box_data_stsh_t; |
976 | | |
977 | | typedef struct MP4_Box_data_stdp_s |
978 | | { |
979 | | uint8_t i_version; |
980 | | uint32_t i_flags; |
981 | | |
982 | | uint16_t *i_priority; |
983 | | |
984 | | } MP4_Box_data_stdp_t; |
985 | | |
986 | | typedef struct |
987 | | { |
988 | | uint64_t i_segment_duration; /* movie timescale */ |
989 | | int64_t i_media_time; /* media(track) timescale */ |
990 | | uint16_t i_media_rate_integer; |
991 | | uint16_t i_media_rate_fraction; |
992 | | } MP4_Box_data_elst_entry_t; |
993 | | |
994 | | typedef struct MP4_Box_data_elst_s |
995 | | { |
996 | | uint32_t i_entry_count; |
997 | | |
998 | | MP4_Box_data_elst_entry_t *entries; |
999 | | |
1000 | | } MP4_Box_data_elst_t; |
1001 | | |
1002 | | typedef struct MP4_Box_data_cprt_s |
1003 | | { |
1004 | | uint8_t i_version; |
1005 | | uint32_t i_flags; |
1006 | | |
1007 | | char rgs_language[3]; /* ISO-639-2/T */ |
1008 | | |
1009 | | char *psz_notice; |
1010 | | } MP4_Box_data_cprt_t; |
1011 | | |
1012 | | |
1013 | | /* DecoderConfigDescriptor */ |
1014 | | typedef struct MP4_descriptor_decoder_config_s |
1015 | | { |
1016 | | uint8_t i_objectProfileIndication; |
1017 | | uint8_t i_streamType; |
1018 | | int b_upStream; |
1019 | | uint32_t i_buffer_sizeDB; |
1020 | | uint32_t i_max_bitrate; |
1021 | | uint32_t i_avg_bitrate; |
1022 | | |
1023 | | int i_decoder_specific_info_len; |
1024 | | uint8_t *p_decoder_specific_info; |
1025 | | /* some other stuff */ |
1026 | | |
1027 | | } MP4_descriptor_decoder_config_t; |
1028 | | |
1029 | | typedef struct MP4_descriptor_SL_config_s |
1030 | | { |
1031 | | |
1032 | | int i_dummy; /* ANSI C forbids empty structures */ |
1033 | | |
1034 | | } MP4_descriptor_SL_config_t; |
1035 | | |
1036 | | |
1037 | | typedef struct MP4_descriptor_ES_s /* ISO/IEC 14496-1 8.3.3 ES_DescrTag */ |
1038 | | { |
1039 | | uint16_t i_ES_ID; |
1040 | | int b_stream_dependence; |
1041 | | int b_url; |
1042 | | int b_OCRstream; |
1043 | | int i_stream_priority; |
1044 | | |
1045 | | uint16_t i_depend_on_ES_ID; /* if b_stream_dependence set */ |
1046 | | |
1047 | | unsigned char *psz_URL; |
1048 | | |
1049 | | uint16_t i_OCR_ES_ID; /* if b_OCRstream */ |
1050 | | MP4_descriptor_decoder_config_t *p_decConfigDescr; |
1051 | | |
1052 | | MP4_descriptor_SL_config_t *p_slConfigDescr; |
1053 | | |
1054 | | /* some other stuff ... */ |
1055 | | |
1056 | | } MP4_descriptor_ES_t; |
1057 | | |
1058 | | /* ES descriptor */ |
1059 | | typedef struct MP4_Box_data_esds_s |
1060 | | { |
1061 | | uint8_t i_version; |
1062 | | uint32_t i_flags; |
1063 | | |
1064 | | MP4_descriptor_ES_t es_descriptor; |
1065 | | |
1066 | | } MP4_Box_data_esds_t; |
1067 | | |
1068 | | |
1069 | | typedef struct MP4_Box_data_dcom_s |
1070 | | { |
1071 | | uint32_t i_algorithm; /* fourcc */ |
1072 | | |
1073 | | } MP4_Box_data_dcom_t; |
1074 | | |
1075 | | typedef struct MP4_Box_data_cmvd_s |
1076 | | { |
1077 | | uint32_t i_uncompressed_size; |
1078 | | uint32_t i_compressed_size; |
1079 | | uint8_t *p_data; |
1080 | | |
1081 | | } MP4_Box_data_cmvd_t; |
1082 | | |
1083 | | typedef struct |
1084 | | { |
1085 | | uint32_t i_type; |
1086 | | } MP4_Box_data_frma_t; |
1087 | | |
1088 | | typedef struct |
1089 | | { |
1090 | | uint32_t i_init; |
1091 | | uint32_t i_encr; |
1092 | | uint32_t i_decr; |
1093 | | } MP4_Box_data_skcr_t; |
1094 | | |
1095 | | typedef struct |
1096 | | { |
1097 | | uint8_t i_version; |
1098 | | uint32_t i_flags; |
1099 | | |
1100 | | uint32_t i_ref_type; |
1101 | | char *psz_ref; |
1102 | | |
1103 | | } MP4_Box_data_rdrf_t; |
1104 | | |
1105 | | typedef struct |
1106 | | { |
1107 | | uint8_t i_version; |
1108 | | uint32_t i_flags; |
1109 | | |
1110 | | uint32_t i_rate; |
1111 | | |
1112 | | } MP4_Box_data_rmdr_t; |
1113 | | |
1114 | | typedef struct |
1115 | | { |
1116 | | uint8_t i_version; |
1117 | | uint32_t i_flags; |
1118 | | |
1119 | | uint32_t i_gestaltType; |
1120 | | uint32_t i_val1; |
1121 | | uint32_t i_val2; |
1122 | | uint16_t i_checkType; /* 0: val1 is version min |
1123 | | 1: gestalt value & val2 == val1 */ |
1124 | | |
1125 | | } MP4_Box_data_rmvc_t; |
1126 | | |
1127 | | typedef struct |
1128 | | { |
1129 | | uint8_t i_version; |
1130 | | uint32_t i_flags; |
1131 | | |
1132 | | |
1133 | | } MP4_Box_data_rmcd_t; |
1134 | | |
1135 | | typedef struct |
1136 | | { |
1137 | | uint32_t i_quality; |
1138 | | |
1139 | | } MP4_Box_data_rmqu_t; |
1140 | | |
1141 | | typedef struct MP4_Box_data_mfhd_s |
1142 | | { |
1143 | | uint8_t i_version; |
1144 | | uint32_t i_flags; |
1145 | | |
1146 | | uint32_t i_sequence_number; |
1147 | | |
1148 | | } MP4_Box_data_mfhd_t; |
1149 | | |
1150 | | typedef struct MP4_Box_sidx_item_s |
1151 | | { |
1152 | | uint32_t i_referenced_size; |
1153 | | uint32_t i_subsegment_duration; |
1154 | | uint8_t b_reference_type; |
1155 | | uint8_t b_starts_with_SAP; |
1156 | | uint8_t i_SAP_type; |
1157 | | uint32_t i_SAP_delta_time; |
1158 | | |
1159 | | } MP4_Box_sidx_item_t; |
1160 | | |
1161 | | typedef struct MP4_Box_data_sidx_s |
1162 | | { |
1163 | | uint8_t i_version; |
1164 | | uint32_t i_flags; |
1165 | | |
1166 | | uint32_t i_reference_ID; |
1167 | | uint32_t i_timescale; |
1168 | | uint64_t i_earliest_presentation_time; |
1169 | | uint64_t i_first_offset; |
1170 | | uint16_t i_reference_count; |
1171 | | |
1172 | | MP4_Box_sidx_item_t *p_items; |
1173 | | |
1174 | | } MP4_Box_data_sidx_t; |
1175 | | |
1176 | 1.19k | #define MP4_TFHD_BASE_DATA_OFFSET (1LL<<0) |
1177 | 586 | #define MP4_TFHD_SAMPLE_DESC_INDEX (1LL<<1) |
1178 | 746 | #define MP4_TFHD_DFLT_SAMPLE_DURATION (1LL<<3) |
1179 | 742 | #define MP4_TFHD_DFLT_SAMPLE_SIZE (1LL<<4) |
1180 | 586 | #define MP4_TFHD_DFLT_SAMPLE_FLAGS (1LL<<5) |
1181 | 293 | #define MP4_TFHD_DURATION_IS_EMPTY (1LL<<16) |
1182 | 606 | #define MP4_TFHD_DEFAULT_BASE_IS_MOOF (1LL<<17) |
1183 | | typedef struct MP4_Box_data_tfhd_s |
1184 | | { |
1185 | | uint8_t i_version; |
1186 | | bool b_empty; |
1187 | | uint32_t i_flags; |
1188 | | uint32_t i_track_ID; |
1189 | | |
1190 | | /* optional fields */ |
1191 | | uint64_t i_base_data_offset; |
1192 | | uint32_t i_sample_description_index; |
1193 | | uint32_t i_default_sample_duration; |
1194 | | uint32_t i_default_sample_size; |
1195 | | uint32_t i_default_sample_flags; |
1196 | | |
1197 | | } MP4_Box_data_tfhd_t; |
1198 | | |
1199 | 449 | #define MP4_TRUN_DATA_OFFSET (1<<0) |
1200 | 293 | #define MP4_TRUN_FIRST_FLAGS (1<<2) |
1201 | 33.5M | #define MP4_TRUN_SAMPLE_DURATION (1<<8) |
1202 | 33.5M | #define MP4_TRUN_SAMPLE_SIZE (1<<9) |
1203 | 33.5M | #define MP4_TRUN_SAMPLE_FLAGS (1<<10) |
1204 | 33.5M | #define MP4_TRUN_SAMPLE_TIME_OFFSET (1<<11) |
1205 | | typedef struct MP4_descriptor_trun_sample_t |
1206 | | { |
1207 | | uint32_t i_duration; |
1208 | | uint32_t i_size; |
1209 | | uint32_t i_flags; |
1210 | | union |
1211 | | { |
1212 | | uint32_t v0; |
1213 | | int32_t v1; /* version == 1 ? signed : unsigned */ |
1214 | | } i_composition_time_offset; |
1215 | | } MP4_descriptor_trun_sample_t; |
1216 | | |
1217 | | typedef struct MP4_Box_data_trun_s |
1218 | | { |
1219 | | uint8_t i_version; |
1220 | | uint32_t i_flags; |
1221 | | uint32_t i_sample_count; |
1222 | | |
1223 | | /* optional fields */ |
1224 | | int32_t i_data_offset; |
1225 | | uint32_t i_first_sample_flags; |
1226 | | |
1227 | | MP4_descriptor_trun_sample_t *p_samples; |
1228 | | |
1229 | | } MP4_Box_data_trun_t; |
1230 | | |
1231 | | typedef struct MP4_Box_data_tfdt_s |
1232 | | { |
1233 | | uint8_t i_version; |
1234 | | uint32_t i_flags; |
1235 | | uint64_t i_base_media_decode_time; |
1236 | | |
1237 | | } MP4_Box_data_tfdt_t; |
1238 | | |
1239 | | typedef struct |
1240 | | { |
1241 | | uint32_t i_date; |
1242 | | uint32_t i_type; |
1243 | | uint16_t i_index; |
1244 | | } MP4_Box_data_pnot_t; |
1245 | | |
1246 | | typedef struct |
1247 | | { |
1248 | | char *psz_text; |
1249 | | uint64_t i_length; |
1250 | | |
1251 | | } MP4_Box_data_string_t; |
1252 | | |
1253 | | typedef struct |
1254 | | { |
1255 | | void *p_blob; |
1256 | | size_t i_blob; |
1257 | | } MP4_Box_data_binary_t; |
1258 | | |
1259 | | typedef struct |
1260 | | { |
1261 | | uint32_t i_entry_count; |
1262 | | uint32_t *i_track_ID; |
1263 | | |
1264 | | } MP4_Box_data_trak_reference_t; |
1265 | | |
1266 | | typedef struct |
1267 | | { |
1268 | | uint8_t i_version; |
1269 | | uint32_t i_flags; |
1270 | | |
1271 | | uint8_t i_chapter; |
1272 | | struct |
1273 | | { |
1274 | | char *psz_name; |
1275 | | int64_t i_start; |
1276 | | } chapter[256]; |
1277 | | } MP4_Box_data_chpl_t; |
1278 | | |
1279 | | typedef struct |
1280 | | { |
1281 | | uint32_t i_chapter_count; |
1282 | | uint32_t *pi_chapter_start; |
1283 | | |
1284 | | } MP4_Box_data_HMMT_t; |
1285 | | |
1286 | | typedef struct |
1287 | | { |
1288 | | uint8_t i_version; |
1289 | | uint8_t i_profile; |
1290 | | uint8_t i_profile_compatibility; |
1291 | | uint8_t i_level; |
1292 | | |
1293 | | size_t i_avcC; |
1294 | | uint8_t *p_avcC; |
1295 | | |
1296 | | } MP4_Box_data_avcC_t; |
1297 | | |
1298 | | typedef struct |
1299 | | { |
1300 | | uint8_t i_profile; |
1301 | | uint8_t i_level; |
1302 | | uint8_t i_presentation_delay; |
1303 | | |
1304 | | size_t i_av1C; |
1305 | | uint8_t *p_av1C; |
1306 | | |
1307 | | } MP4_Box_data_av1C_t; |
1308 | | |
1309 | | typedef struct |
1310 | | { |
1311 | | uint8_t i_version; |
1312 | | uint8_t i_profile; |
1313 | | uint8_t i_level; |
1314 | | uint8_t i_bit_depth; |
1315 | | uint8_t i_chroma_subsampling; |
1316 | | uint8_t i_color_primaries; |
1317 | | uint8_t i_xfer_function; |
1318 | | uint8_t i_matrix_coeffs; |
1319 | | uint8_t i_fullrange; |
1320 | | uint16_t i_codec_init_datasize; |
1321 | | uint8_t *p_codec_init_data; |
1322 | | } MP4_Box_data_vpcC_t; |
1323 | | |
1324 | | typedef struct |
1325 | | { |
1326 | | uint16_t primaries[3*2]; /* G,B,R / x,y */ |
1327 | | uint16_t white_point[2]; /* x,y */ |
1328 | | uint32_t i_luminanceMax; |
1329 | | uint32_t i_luminanceMin; |
1330 | | } MP4_Box_data_SmDm_t; |
1331 | | |
1332 | | typedef struct |
1333 | | { |
1334 | | uint16_t i_maxCLL; |
1335 | | uint16_t i_maxFALL; |
1336 | | } MP4_Box_data_CoLL_t; |
1337 | | |
1338 | | typedef struct |
1339 | | { |
1340 | | WAVEFORMATEX Format; |
1341 | | uint32_t i_extra; |
1342 | | uint8_t *p_extra; |
1343 | | } MP4_Box_data_WMA2_t; |
1344 | | |
1345 | | typedef struct |
1346 | | { |
1347 | | VLC_BITMAPINFOHEADER bmiHeader; |
1348 | | uint32_t i_extra; |
1349 | | uint8_t *p_extra; |
1350 | | } MP4_Box_data_strf_t; |
1351 | | |
1352 | | typedef struct |
1353 | | { |
1354 | | uint32_t i_stream_number; |
1355 | | uint32_t i_packet_size; |
1356 | | } MP4_Box_data_ASF_t; |
1357 | | |
1358 | | typedef union |
1359 | | { |
1360 | | struct |
1361 | | { |
1362 | | uint8_t i_num_leading_samples_known; |
1363 | | uint8_t i_num_leading_samples; |
1364 | | } rap; |
1365 | | struct |
1366 | | { |
1367 | | int16_t i_roll_distance; |
1368 | | } roll; |
1369 | | } MP4_Box_data_sgpd_entry_t; |
1370 | | |
1371 | | typedef struct |
1372 | | { |
1373 | | uint8_t i_version; |
1374 | | uint32_t i_grouping_type; |
1375 | | uint32_t i_default_sample_description_index; |
1376 | | uint32_t i_entry_count; |
1377 | | MP4_Box_data_sgpd_entry_t *p_entries; |
1378 | | } MP4_Box_data_sgpd_t; |
1379 | | |
1380 | | typedef struct |
1381 | | { |
1382 | | uint32_t i_sample_count; |
1383 | | uint32_t i_group_description_index; |
1384 | | } MP4_Box_data_sbgp_entry_t; |
1385 | | |
1386 | | typedef struct |
1387 | | { |
1388 | | uint8_t i_version; |
1389 | | uint32_t i_grouping_type; |
1390 | | uint32_t i_grouping_type_parameter; |
1391 | | uint32_t i_entry_count; |
1392 | | MP4_Box_data_sbgp_entry_t *p_entries; |
1393 | | } MP4_Box_data_sbgp_t; |
1394 | | |
1395 | | typedef struct |
1396 | | { |
1397 | | uint8_t i_version; |
1398 | | uint32_t i_channels_flags; /* 24 bits */ |
1399 | | struct CoreAudio_layout_s layout; |
1400 | | } MP4_Box_data_chan_t; |
1401 | | |
1402 | | typedef struct |
1403 | | { |
1404 | | uint32_t i_sample_rate; |
1405 | | } MP4_Box_data_srat_t; |
1406 | | |
1407 | | typedef struct |
1408 | | { |
1409 | | uint16_t i_data_rate; |
1410 | | uint8_t i_num_ind_sub; |
1411 | | struct |
1412 | | { |
1413 | | uint8_t i_fscod; |
1414 | | uint8_t i_bsid; |
1415 | | uint8_t i_bsmod; |
1416 | | uint8_t i_acmod; |
1417 | | uint8_t i_lfeon; |
1418 | | uint8_t i_num_dep_sub; |
1419 | | uint8_t i_chan_loc; |
1420 | | } stream[8]; |
1421 | | |
1422 | | } MP4_Box_data_dec3_t; |
1423 | | |
1424 | | typedef struct |
1425 | | { |
1426 | | uint8_t i_fscod; |
1427 | | uint8_t i_bsid; |
1428 | | uint8_t i_bsmod; |
1429 | | uint8_t i_acmod; |
1430 | | uint8_t i_lfeon; |
1431 | | uint8_t i_bitrate_code; |
1432 | | |
1433 | | } MP4_Box_data_dac3_t; |
1434 | | |
1435 | | typedef struct |
1436 | | { |
1437 | | uint8_t i_profile_level; |
1438 | | |
1439 | | uint32_t i_vc1; |
1440 | | uint8_t *p_vc1; |
1441 | | |
1442 | | } MP4_Box_data_dvc1_t; |
1443 | | |
1444 | | typedef struct |
1445 | | { |
1446 | | uint32_t i_flags; |
1447 | | } MP4_Box_data_fiel_t; |
1448 | | |
1449 | | typedef struct |
1450 | | { |
1451 | | uint16_t i_little_endian; |
1452 | | |
1453 | | } MP4_Box_data_enda_t; |
1454 | | |
1455 | | typedef struct |
1456 | | { |
1457 | | uint8_t i_format_flags; |
1458 | | uint8_t i_sample_size; |
1459 | | } MP4_Box_data_pcmC_t; |
1460 | | |
1461 | | typedef struct |
1462 | | { |
1463 | | uint32_t i_entry_count; |
1464 | | struct |
1465 | | { |
1466 | | uint32_t i_namespace; |
1467 | | char *psz_value; |
1468 | | } *p_entries; |
1469 | | } MP4_Box_data_keys_t; |
1470 | | |
1471 | | typedef struct |
1472 | | { |
1473 | | uint8_t i_version; |
1474 | | uint32_t i_flags; |
1475 | | |
1476 | | uint16_t i_object_descriptor; |
1477 | | uint8_t i_OD_profile_level; |
1478 | | uint8_t i_scene_profile_level; |
1479 | | uint8_t i_audio_profile_level; |
1480 | | uint8_t i_visual_profile_level; |
1481 | | uint8_t i_graphics_profile_level; |
1482 | | |
1483 | | } MP4_Box_data_iods_t; |
1484 | | |
1485 | | typedef struct |
1486 | | { |
1487 | | uint32_t i_buffer_size; |
1488 | | uint32_t i_max_bitrate; |
1489 | | uint32_t i_avg_bitrate; |
1490 | | } MP4_Box_data_btrt_t; |
1491 | | |
1492 | | typedef struct |
1493 | | { |
1494 | | uint32_t i_horizontal_spacing; |
1495 | | uint32_t i_vertical_spacing; |
1496 | | } MP4_Box_data_pasp_t; |
1497 | | |
1498 | | typedef struct |
1499 | | { |
1500 | | uint32_t i_width; |
1501 | | uint32_t i_height; |
1502 | | uint32_t i_x_offset; |
1503 | | uint32_t i_y_offset; |
1504 | | } MP4_Box_data_clap_t; |
1505 | | |
1506 | | typedef struct |
1507 | | { |
1508 | | uint8_t i_version; |
1509 | | uint32_t i_flags; |
1510 | | |
1511 | | uint64_t i_fragment_duration; |
1512 | | } MP4_Box_data_mehd_t; |
1513 | | |
1514 | | typedef struct |
1515 | | { |
1516 | | uint8_t i_version; |
1517 | | uint32_t i_flags; |
1518 | | |
1519 | | uint32_t i_track_ID; |
1520 | | uint32_t i_default_sample_description_index; |
1521 | | uint32_t i_default_sample_duration; |
1522 | | uint32_t i_default_sample_size; |
1523 | | uint32_t i_default_sample_flags; |
1524 | | } MP4_Box_data_trex_t; |
1525 | | |
1526 | | typedef struct |
1527 | | { |
1528 | | uint8_t i_version; |
1529 | | uint32_t i_flags; |
1530 | | |
1531 | | uint8_t *p_sample_table; |
1532 | | } MP4_Box_data_sdtp_t; |
1533 | | |
1534 | | typedef struct |
1535 | | { |
1536 | | uint32_t i_switch_group; |
1537 | | } MP4_Box_data_tsel_t; |
1538 | | |
1539 | | typedef struct |
1540 | | { |
1541 | | uint8_t i_version; |
1542 | | uint32_t i_flags; |
1543 | | |
1544 | | uint32_t i_size; |
1545 | | } MP4_Box_data_mfro_t; |
1546 | | |
1547 | | typedef struct |
1548 | | { |
1549 | | uint8_t i_version; |
1550 | | uint32_t i_flags; |
1551 | | |
1552 | | uint32_t i_track_ID; |
1553 | | uint32_t i_number_of_entries; |
1554 | | |
1555 | | uint8_t i_length_size_of_traf_num; |
1556 | | uint8_t i_length_size_of_trun_num; |
1557 | | uint8_t i_length_size_of_sample_num; |
1558 | | |
1559 | | uint64_t *p_time; |
1560 | | uint64_t *p_moof_offset; |
1561 | | uint8_t *p_traf_number; |
1562 | | uint8_t *p_trun_number; |
1563 | | uint8_t *p_sample_number; |
1564 | | } MP4_Box_data_tfra_t; |
1565 | | |
1566 | | typedef struct |
1567 | | { |
1568 | | enum |
1569 | | { |
1570 | | DATA_WKT_RESERVED = 0, |
1571 | | DATA_WKT_UTF8 = 1, |
1572 | | DATA_WKT_UTF16 = 2, |
1573 | | DATA_WKT_SJIS = 3, |
1574 | | DATA_WKT_UTF8_SORT = 4, |
1575 | | DATA_WKT_UTF16_SORT = 5, |
1576 | | DATA_WKT_JPEG = 13, |
1577 | | DATA_WKT_PNG = 14, |
1578 | | DATA_WKT_BE_SIGNED = 21, |
1579 | | DATA_WKT_BE_UNSIGNED = 22, |
1580 | | DATA_WKT_BE_FLOAT32 = 23, |
1581 | | DATA_WKT_BE_FLOAT64 = 24, |
1582 | | DATA_WKT_BMP = 27, |
1583 | | DATA_WKT_QUICKTIME_METADATA_ATOM = 28, |
1584 | | } e_wellknowntype; |
1585 | | struct |
1586 | | { |
1587 | | uint16_t i_country; |
1588 | | uint16_t i_language; |
1589 | | } locale; |
1590 | | uint8_t *p_blob; |
1591 | | uint32_t i_blob; |
1592 | | } MP4_Box_data_data_t; |
1593 | | |
1594 | | typedef struct |
1595 | | { |
1596 | | uint32_t i_projection_mode; |
1597 | | enum { |
1598 | | XML360_MONOSCOPIC = 0, |
1599 | | XML360_STEREOSCOPIC_TOP_BOTTOM = 1, |
1600 | | XML360_STEREOSCOPIC_LEFT_RIGHT = 2, |
1601 | | } e_stereo_mode; |
1602 | | } MP4_Box_data_360_t; |
1603 | | |
1604 | | |
1605 | | typedef struct |
1606 | | { |
1607 | | enum { |
1608 | | ST3D_MONOSCOPIC = 0, |
1609 | | ST3D_STEREOSCOPIC_TOP_BOTTOM = 1, |
1610 | | ST3D_STEREOSCOPIC_LEFT_RIGHT = 2, |
1611 | | } e_stereo_mode; |
1612 | | uint8_t i_stereo_mode; |
1613 | | } MP4_Box_data_st3d_t; |
1614 | | |
1615 | | typedef struct |
1616 | | { |
1617 | | float f_pose_yaw_degrees; |
1618 | | float f_pose_pitch_degrees; |
1619 | | float f_pose_roll_degrees; |
1620 | | } MP4_Box_data_prhd_t; |
1621 | | |
1622 | | typedef struct |
1623 | | { |
1624 | | uint32_t i_projection_bounds_top; |
1625 | | uint32_t i_projection_bounds_bottom; |
1626 | | uint32_t i_projection_bounds_left; |
1627 | | uint32_t i_projection_bounds_right; |
1628 | | } MP4_Box_data_equi_t; |
1629 | | |
1630 | | typedef struct |
1631 | | { |
1632 | | uint32_t i_layout; |
1633 | | uint32_t i_padding; |
1634 | | } MP4_Box_data_cbmp_t; |
1635 | | |
1636 | | typedef struct |
1637 | | { |
1638 | | uint8_t i_ambisonic_type; |
1639 | | uint32_t i_ambisonic_order; |
1640 | | uint8_t i_ambisonic_channel_ordering; |
1641 | | uint8_t i_ambisonic_normalization; |
1642 | | uint32_t i_num_channels; |
1643 | | } MP4_Box_data_SA3D_t; |
1644 | | |
1645 | | typedef struct |
1646 | | { |
1647 | | uint32_t i_from_item_id; |
1648 | | uint16_t i_reference_count; |
1649 | | struct |
1650 | | { |
1651 | | uint32_t i_to_item_id; |
1652 | | } *p_references; |
1653 | | } MP4_Box_data_refbox_t; |
1654 | | |
1655 | | typedef struct |
1656 | | { |
1657 | | uint8_t i_version; |
1658 | | uint32_t i_flags; |
1659 | | } MP4_Box_data_iref_t; |
1660 | | |
1661 | | typedef struct |
1662 | | { |
1663 | | uint8_t i_offset_size; |
1664 | | uint8_t i_length_size; |
1665 | | uint8_t i_base_offset_size; |
1666 | | uint8_t i_index_size; |
1667 | | uint32_t i_item_count; |
1668 | | struct |
1669 | | { |
1670 | | uint32_t i_item_id; |
1671 | | uint8_t i_construction_method; |
1672 | | uint16_t i_data_reference_index; |
1673 | | uint64_t i_base_offset; |
1674 | | uint16_t i_extent_count; |
1675 | | struct |
1676 | | { |
1677 | | uint64_t i_extent_index; |
1678 | | uint64_t i_extent_offset; |
1679 | | uint64_t i_extent_length; |
1680 | | } *p_extents; |
1681 | | } *p_items; |
1682 | | } MP4_Box_data_iloc_t; |
1683 | | |
1684 | | typedef struct |
1685 | | { |
1686 | | uint32_t i_entry_count; |
1687 | | } MP4_Box_data_iinf_t; |
1688 | | |
1689 | | typedef struct |
1690 | | { |
1691 | | uint32_t i_flags; |
1692 | | uint32_t i_item_id; |
1693 | | uint16_t i_item_protection_index; |
1694 | | vlc_fourcc_t item_type; |
1695 | | char *psz_item_name; |
1696 | | char *psz_content_type; |
1697 | | char *psz_content_encoding; |
1698 | | char *psz_item_uri_type; |
1699 | | } MP4_Box_data_infe_t; |
1700 | | |
1701 | | typedef struct |
1702 | | { |
1703 | | uint32_t i_item_id; |
1704 | | } MP4_Box_data_pitm_t; |
1705 | | |
1706 | | typedef struct |
1707 | | { |
1708 | | uint32_t i_width; |
1709 | | uint32_t i_height; |
1710 | | } MP4_Box_data_ispe_t; |
1711 | | |
1712 | | typedef struct |
1713 | | { |
1714 | | uint32_t i_entry_count; |
1715 | | struct |
1716 | | { |
1717 | | uint32_t i_item_id; |
1718 | | uint8_t i_association_count; |
1719 | | struct |
1720 | | { |
1721 | | uint8_t b_essential; |
1722 | | uint16_t i_property_index; |
1723 | | } *p_assocs; |
1724 | | } *p_entries; |
1725 | | } MP4_Box_data_ipma_t; |
1726 | | |
1727 | | /* |
1728 | | typedef struct MP4_Box_data__s |
1729 | | { |
1730 | | uint8_t i_version; |
1731 | | uint32_t i_flags; |
1732 | | |
1733 | | } MP4_Box_data__t; |
1734 | | |
1735 | | */ |
1736 | | |
1737 | | typedef union MP4_Box_data_s |
1738 | | { |
1739 | | MP4_Box_data_ftyp_t *p_ftyp; |
1740 | | MP4_Box_data_mvhd_t *p_mvhd; |
1741 | | MP4_Box_data_mfhd_t *p_mfhd; |
1742 | | MP4_Box_data_sidx_t *p_sidx; |
1743 | | MP4_Box_data_tfhd_t *p_tfhd; |
1744 | | MP4_Box_data_trun_t *p_trun; |
1745 | | MP4_Box_data_tfdt_t *p_tfdt; |
1746 | | MP4_Box_data_tkhd_t *p_tkhd; |
1747 | | MP4_Box_data_mdhd_t *p_mdhd; |
1748 | | MP4_Box_data_hdlr_t *p_hdlr; |
1749 | | MP4_Box_data_vmhd_t *p_vmhd; |
1750 | | MP4_Box_data_smhd_t *p_smhd; |
1751 | | MP4_Box_data_hmhd_t *p_hmhd; |
1752 | | MP4_Box_data_url_t *p_url; |
1753 | | MP4_Box_data_urn_t *p_urn; |
1754 | | MP4_Box_data_lcont_t *p_lcont; |
1755 | | MP4_Box_data_stts_t *p_stts; |
1756 | | MP4_Box_data_ctts_t *p_ctts; |
1757 | | MP4_Box_data_cslg_t *p_cslg; |
1758 | | MP4_Box_data_colr_t *p_colr; |
1759 | | MP4_Box_data_irot_t *p_irot; |
1760 | | |
1761 | | MP4_Box_data_sbgp_t *p_sbgp; |
1762 | | MP4_Box_data_sgpd_t *p_sgpd; |
1763 | | |
1764 | | MP4_Box_data_sample_vide_t *p_sample_vide; |
1765 | | MP4_Box_data_sample_soun_t *p_sample_soun; |
1766 | | MP4_Box_data_sample_generic_t *p_sample_gen; |
1767 | | |
1768 | | MP4_Box_data_esds_t *p_esds; |
1769 | | MP4_Box_data_av1C_t *p_av1C; |
1770 | | MP4_Box_data_avcC_t *p_avcC; |
1771 | | MP4_Box_data_dac3_t *p_dac3; |
1772 | | MP4_Box_data_dec3_t *p_dec3; |
1773 | | MP4_Box_data_dvc1_t *p_dvc1; |
1774 | | MP4_Box_data_fiel_t *p_fiel; |
1775 | | MP4_Box_data_chan_t *p_chan; |
1776 | | MP4_Box_data_srat_t *p_srat; |
1777 | | MP4_Box_data_enda_t *p_enda; |
1778 | | MP4_Box_data_pcmC_t *p_pcmC; |
1779 | | MP4_Box_data_keys_t *p_keys; |
1780 | | MP4_Box_data_iods_t *p_iods; |
1781 | | MP4_Box_data_btrt_t *p_btrt; |
1782 | | MP4_Box_data_pasp_t *p_pasp; |
1783 | | MP4_Box_data_clap_t *p_clap; |
1784 | | MP4_Box_data_trex_t *p_trex; |
1785 | | MP4_Box_data_mehd_t *p_mehd; |
1786 | | MP4_Box_data_sdtp_t *p_sdtp; |
1787 | | MP4_Box_data_tsel_t *p_tsel; |
1788 | | MP4_Box_data_load_t *p_load; |
1789 | | MP4_Box_data_vpcC_t *p_vpcC; |
1790 | | MP4_Box_data_SmDm_t *p_SmDm; |
1791 | | MP4_Box_data_CoLL_t *p_CoLL; |
1792 | | MP4_Box_data_dvcC_t *p_dvcC; |
1793 | | |
1794 | | MP4_Box_data_tfra_t *p_tfra; |
1795 | | MP4_Box_data_mfro_t *p_mfro; |
1796 | | |
1797 | | MP4_Box_data_sdp_t *p_sdp; |
1798 | | |
1799 | | MP4_Box_data_tims_t *p_tims; |
1800 | | MP4_Box_data_tsro_t *p_tsro; |
1801 | | MP4_Box_data_tssy_t *p_tssy; |
1802 | | |
1803 | | MP4_Box_data_stsz_t *p_stsz; |
1804 | | MP4_Box_data_stsc_t *p_stsc; |
1805 | | MP4_Box_data_co64_t *p_co64; |
1806 | | MP4_Box_data_stss_t *p_stss; |
1807 | | MP4_Box_data_stsh_t *p_stsh; |
1808 | | MP4_Box_data_stdp_t *p_stdp; |
1809 | | MP4_Box_data_elst_t *p_elst; |
1810 | | MP4_Box_data_cprt_t *p_cprt; |
1811 | | |
1812 | | MP4_Box_data_dcom_t *p_dcom; |
1813 | | MP4_Box_data_cmvd_t *p_cmvd; |
1814 | | |
1815 | | MP4_Box_data_moviehintinformation_rtp_t *p_moviehintinformation_rtp; |
1816 | | |
1817 | | MP4_Box_data_frma_t *p_frma; |
1818 | | MP4_Box_data_skcr_t *p_skcr; |
1819 | | |
1820 | | MP4_Box_data_rdrf_t *p_rdrf; |
1821 | | MP4_Box_data_rmdr_t *p_rmdr; |
1822 | | MP4_Box_data_rmqu_t *p_rmqu; |
1823 | | MP4_Box_data_rmvc_t *p_rmvc; |
1824 | | |
1825 | | MP4_Box_data_pnot_t *p_pnot; |
1826 | | MP4_Box_data_chpl_t *p_chpl; |
1827 | | MP4_Box_data_HMMT_t *p_hmmt; |
1828 | | MP4_Box_data_trak_reference_t *p_track_reference; |
1829 | | |
1830 | | MP4_Box_data_tfrf_t *p_tfrf; |
1831 | | MP4_Box_data_tfxd_t *p_tfxd; |
1832 | | MP4_Box_data_WMA2_t *p_WMA2; /* flip4mac Little endian audio config */ |
1833 | | MP4_Box_data_strf_t *p_strf; /* flip4mac Little endian video config */ |
1834 | | MP4_Box_data_ASF_t *p_asf; /* flip4mac asf streams indicator */ |
1835 | | |
1836 | | MP4_Box_data_360_t *p_360; |
1837 | | MP4_Box_data_st3d_t *p_st3d; |
1838 | | MP4_Box_data_prhd_t *p_prhd; |
1839 | | MP4_Box_data_equi_t *p_equi; |
1840 | | MP4_Box_data_cbmp_t *p_cbmp; |
1841 | | MP4_Box_data_SA3D_t *p_SA3D; |
1842 | | |
1843 | | MP4_Box_data_refbox_t *p_refbox; |
1844 | | MP4_Box_data_iref_t *p_iref; |
1845 | | MP4_Box_data_iloc_t *p_iloc; |
1846 | | MP4_Box_data_iinf_t *p_iinf; |
1847 | | MP4_Box_data_infe_t *p_infe; |
1848 | | MP4_Box_data_pitm_t *p_pitm; |
1849 | | MP4_Box_data_ispe_t *p_ispe; /* heif */ |
1850 | | MP4_Box_data_ipma_t *p_ipma; /* heif */ |
1851 | | |
1852 | | /* for generic handlers */ |
1853 | | MP4_Box_data_binary_t *p_binary; |
1854 | | MP4_Box_data_data_t *p_data; |
1855 | | |
1856 | | void *p_payload; /* for unknown type */ |
1857 | | } MP4_Box_data_t; |
1858 | | |
1859 | 42.2M | #define BOXDATA(type) type->data.type |
1860 | | |
1861 | | typedef struct MP4_Box_s MP4_Box_t; |
1862 | | /* the most basic structure */ |
1863 | | struct MP4_Box_s |
1864 | | { |
1865 | | uint64_t i_pos; /* absolute position */ |
1866 | | |
1867 | | uint32_t i_type; |
1868 | | uint32_t i_shortsize; |
1869 | | uint32_t i_handler; /**/ |
1870 | | uint32_t i_index; /* indexed list (ilst) */ |
1871 | | |
1872 | | enum |
1873 | | { |
1874 | | BOX_FLAG_NONE = 0, |
1875 | | BOX_FLAG_INCOMPLETE, |
1876 | | } e_flags; |
1877 | | |
1878 | | UUID_t i_uuid; /* Set if i_type == "uuid" */ |
1879 | | |
1880 | | uint64_t i_size; /* always set so use it */ |
1881 | | |
1882 | | MP4_Box_t *p_father; /* pointer on the father Box */ |
1883 | | MP4_Box_t *p_first; /* pointer on the first child Box */ |
1884 | | MP4_Box_t *p_last; |
1885 | | MP4_Box_t *p_next; /* pointer on the next boxes at the same level */ |
1886 | | |
1887 | | void (*pf_free)( MP4_Box_t *p_box ); /* pointer to free function for this box */ |
1888 | | |
1889 | | MP4_Box_data_t data; /* union of pointers on extended data depending |
1890 | | on i_type (or i_usertype) */ |
1891 | | }; |
1892 | | |
1893 | | static inline size_t mp4_box_headersize( MP4_Box_t *p_box ) |
1894 | 197k | { |
1895 | 197k | return 8 |
1896 | 197k | + ( p_box->i_shortsize == 1 ? 8 : 0 ) |
1897 | 197k | + ( p_box->i_type == ATOM_uuid ? 16 : 0 ); |
1898 | 197k | } Unexecuted instantiation: mp4.c:mp4_box_headersize Unexecuted instantiation: fragments.c:mp4_box_headersize Unexecuted instantiation: attachments.c:mp4_box_headersize Unexecuted instantiation: heif.c:mp4_box_headersize Unexecuted instantiation: essetup.c:mp4_box_headersize Unexecuted instantiation: meta.c:mp4_box_headersize libmp4.c:mp4_box_headersize Line | Count | Source | 1894 | 197k | { | 1895 | 197k | return 8 | 1896 | 197k | + ( p_box->i_shortsize == 1 ? 8 : 0 ) | 1897 | 197k | + ( p_box->i_type == ATOM_uuid ? 16 : 0 ); | 1898 | 197k | } |
Unexecuted instantiation: matroska_segment_parse.cpp:mp4_box_headersize(MP4_Box_s*) |
1899 | | |
1900 | | static inline int CmpUUID( const UUID_t *u1, const UUID_t *u2 ) |
1901 | 3.97k | { |
1902 | 3.97k | return memcmp( u1, u2, 16 ); |
1903 | 3.97k | } Unexecuted instantiation: mp4.c:CmpUUID Unexecuted instantiation: fragments.c:CmpUUID Unexecuted instantiation: attachments.c:CmpUUID Unexecuted instantiation: heif.c:CmpUUID Unexecuted instantiation: essetup.c:CmpUUID Unexecuted instantiation: meta.c:CmpUUID Line | Count | Source | 1901 | 3.97k | { | 1902 | 3.97k | return memcmp( u1, u2, 16 ); | 1903 | 3.97k | } |
Unexecuted instantiation: matroska_segment_parse.cpp:CmpUUID(UUID_s const*, UUID_s const*) |
1904 | | |
1905 | | static const UUID_t TfrfBoxUUID = { |
1906 | | { 0xd4, 0x80, 0x7e, 0xf2, 0xca, 0x39, 0x46, 0x95, |
1907 | | 0x8e, 0x54, 0x26, 0xcb, 0x9e, 0x46, 0xa7, 0x9f } }; |
1908 | | |
1909 | | static const UUID_t TfxdBoxUUID = { |
1910 | | { 0x6d, 0x1d, 0x9b, 0x05, 0x42, 0xd5, 0x44, 0xe6, |
1911 | | 0x80, 0xe2, 0x14, 0x1d, 0xaf, 0xf7, 0x57, 0xb2 } }; |
1912 | | |
1913 | | static const UUID_t XML360BoxUUID = { |
1914 | | { 0xff, 0xcc, 0x82, 0x63, 0xf8, 0x55, 0x4a, 0x93, |
1915 | | 0x88, 0x14, 0x58, 0x7a, 0x02, 0x52, 0x1f, 0xdd } }; |
1916 | | |
1917 | | /* PS3 3D by HMMP video encoder */ |
1918 | | static const UUID_t PS3DDSBoxUUID = { |
1919 | | { 0x33, 0x44, 0x44, 0x53, 0x21, 0xd2, 0x4f, 0xce, |
1920 | | 0xbb, 0x88, 0x69, 0x5c, 0xfa, 0xc9, 0xc7, 0x40 } }; |
1921 | | |
1922 | | /***************************************************************************** |
1923 | | * MP4_Seek : non seekable stream safe seek |
1924 | | ****************************************************************************/ |
1925 | | int MP4_Seek( stream_t *p_stream, uint64_t i_pos ); |
1926 | | |
1927 | | /***************************************************************************** |
1928 | | * MP4_BoxGetNextChunk : Parse the entire moof box. |
1929 | | ***************************************************************************** |
1930 | | * The first box is a virtual box "root" and is the father of the boxes |
1931 | | * 'moof' and, possibly, 'sidx'. |
1932 | | *****************************************************************************/ |
1933 | | MP4_Box_t *MP4_BoxGetNextChunk( stream_t * ); |
1934 | | |
1935 | | /***************************************************************************** |
1936 | | * MP4_BoxGetRoot : Parse the entire file, and create all boxes in memory |
1937 | | ***************************************************************************** |
1938 | | * The first box is a virtual box "root" and is the father for all first |
1939 | | * level boxes |
1940 | | *****************************************************************************/ |
1941 | | MP4_Box_t *MP4_BoxGetRoot( stream_t * ); |
1942 | | |
1943 | | /***************************************************************************** |
1944 | | * MP4_BoxNew : Allocates a new MP4 Box with its atom type |
1945 | | ***************************************************************************** |
1946 | | * returns NULL on failure |
1947 | | *****************************************************************************/ |
1948 | | MP4_Box_t * MP4_BoxNew( uint32_t i_type ); |
1949 | | |
1950 | | /***************************************************************************** |
1951 | | * MP4_FreeBox : free memory allocated after read with MP4_ReadBox |
1952 | | * or MP4_BoxGetRoot, this means also children boxes |
1953 | | * XXX : all children have to be allocated by a malloc !! and |
1954 | | * p_box is freed |
1955 | | *****************************************************************************/ |
1956 | | void MP4_BoxFree( MP4_Box_t *p_box ); |
1957 | | |
1958 | | /***************************************************************************** |
1959 | | * MP4_DumpBoxStructure: print the structure of the p_box |
1960 | | ***************************************************************************** |
1961 | | * Useful while debugging |
1962 | | *****************************************************************************/ |
1963 | | void MP4_BoxDumpStructure( vlc_object_t *, const MP4_Box_t *p_box ); |
1964 | | |
1965 | | /***************************************************************************** |
1966 | | * MP4_BoxGetVa: find a box given a path relative to p_box |
1967 | | ***************************************************************************** |
1968 | | * Path Format: . .. / as usual |
1969 | | * [number] to specifie box number ex: trak[12] |
1970 | | * |
1971 | | * ex: /moov/trak[12] |
1972 | | * ../mdia |
1973 | | *****************************************************************************/ |
1974 | | MP4_Box_t *MP4_BoxGetVa( const MP4_Box_t *p_box, const char *psz_fmt, ... ) VLC_FORMAT(2, 3); |
1975 | | |
1976 | | /***************************************************************************** |
1977 | | * MP4_BoxGet: find a box given a path relative to p_box |
1978 | | ***************************************************************************** |
1979 | | * Path Format: . .. / as usual |
1980 | | * |
1981 | | * ex: /moov/mvex |
1982 | | * ../mdia |
1983 | | *****************************************************************************/ |
1984 | | MP4_Box_t *MP4_BoxGet( const MP4_Box_t *p_box, const char *psz_fmt) ; |
1985 | | |
1986 | | /***************************************************************************** |
1987 | | * MP4_BoxCountVa: find number of box given a path relative to p_box |
1988 | | ***************************************************************************** |
1989 | | * Path Format: . .. / as usual |
1990 | | * [number] to specifie box number ex: trak[12] |
1991 | | * |
1992 | | * ex: /moov/trak |
1993 | | * ../mdia |
1994 | | *****************************************************************************/ |
1995 | | unsigned MP4_BoxCountVa( const MP4_Box_t *p_box, const char *psz_fmt, ... ) VLC_FORMAT(2, 3); |
1996 | | |
1997 | | /***************************************************************************** |
1998 | | * MP4_BoxCount: find number of box given a path relative to p_box |
1999 | | ***************************************************************************** |
2000 | | * Path Format: . .. / as usual |
2001 | | * |
2002 | | * ex: /moov/mvex |
2003 | | * ../mdia |
2004 | | *****************************************************************************/ |
2005 | | unsigned MP4_BoxCount( const MP4_Box_t *p_box, const char *psz_fmt ); |
2006 | | |
2007 | | MP4_Box_t * MP4_BoxExtract( MP4_Box_t **pp_chain, uint32_t i_type ); |
2008 | | |
2009 | | /* Internal functions exposed for demuxers */ |
2010 | | int MP4_ReadBoxContainerChildren( stream_t *p_stream, MP4_Box_t *p_container, |
2011 | | const uint32_t stoplist[] ); |
2012 | | int MP4_ReadBoxContainerRestricted( stream_t *p_stream, MP4_Box_t *p_container, |
2013 | | const uint32_t stoplist[], |
2014 | | const uint32_t excludelist[] ); |
2015 | | |
2016 | | int MP4_ReadBox_sample_vide( stream_t *p_stream, MP4_Box_t *p_box ); |
2017 | | |
2018 | | #ifdef __cplusplus |
2019 | | } |
2020 | | #endif |
2021 | | |
2022 | | #endif |