OSDN Git Service

stop using trunk directory in rectool
[rec10/rec10-git.git] / tstools / DtsEdit / src / gpac / internal / isomedia_dev.h
1 /*\r
2  *                      GPAC - Multimedia Framework C SDK\r
3  *\r
4  *                      Copyright (c) Jean Le Feuvre 2000-2005 \r
5  *                                      All rights reserved\r
6  *\r
7  *  This file is part of GPAC / ISO Media File Format sub-project\r
8  *\r
9  *  GPAC is free software; you can redistribute it and/or modify\r
10  *  it under the terms of the GNU Lesser General Public License as published by\r
11  *  the Free Software Foundation; either version 2, or (at your option)\r
12  *  any later version.\r
13  *   \r
14  *  GPAC is distributed in the hope that it will be useful,\r
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
17  *  GNU Lesser General Public License for more details.\r
18  *   \r
19  *  You should have received a copy of the GNU Lesser General Public\r
20  *  License along with this library; see the file COPYING.  If not, write to\r
21  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
22  *\r
23  */\r
24 \r
25 #ifndef _GF_ISOMEDIA_DEV_H_\r
26 #define _GF_ISOMEDIA_DEV_H_\r
27 \r
28 #ifdef __cplusplus\r
29 extern "C" {\r
30 #endif\r
31 \r
32 #include <gpac/isomedia.h>\r
33 \r
34 \r
35 //the default size is 64, cause we need to handle large boxes...\r
36 #define GF_ISOM_BOX                     \\r
37         u32 type;                       \\r
38         u64 size;                       \\r
39 \r
40 #define GF_ISOM_FULL_BOX                \\r
41         GF_ISOM_BOX                     \\r
42         u8 version;                     \\r
43         u32 flags;                      \\r
44 \r
45 #define GF_ISOM_UUID_BOX        \\r
46         GF_ISOM_BOX                     \\r
47         u8 uuid[16];            \\r
48 \r
49 typedef struct\r
50 {\r
51         GF_ISOM_BOX\r
52 } GF_Box;\r
53 \r
54 typedef struct\r
55 {\r
56         GF_ISOM_FULL_BOX\r
57 } GF_FullBox;\r
58 \r
59 typedef struct\r
60 {\r
61         GF_ISOM_UUID_BOX\r
62 } GF_UUIDBox;\r
63 \r
64 /*constructor*/\r
65 GF_Box *gf_isom_box_new(u32 boxType);\r
66 \r
67 GF_Err gf_isom_box_write(GF_Box *ptr, GF_BitStream *bs);\r
68 GF_Err gf_isom_box_read(GF_Box *ptr, GF_BitStream *bs);\r
69 void gf_isom_box_del(GF_Box *ptr);\r
70 GF_Err gf_isom_box_size(GF_Box *ptr);\r
71 \r
72 GF_Err gf_isom_parse_box(GF_Box **outBox, GF_BitStream *bs);\r
73 GF_Err gf_isom_read_box_list(GF_Box *s, GF_BitStream *bs, GF_Err (*add_box)(GF_Box *par, GF_Box *b));\r
74 GF_Err gf_isom_read_box_list_ex(GF_Box *parent, GF_BitStream *bs, GF_Err (*add_box)(GF_Box *par, GF_Box *b), u32 parent_type);\r
75 \r
76 GF_Err gf_isom_box_get_size(GF_Box *ptr);\r
77 GF_Err gf_isom_full_box_get_size(GF_Box *ptr);\r
78 GF_Err gf_isom_box_write_header(GF_Box *ptr, GF_BitStream *bs);\r
79 GF_Err gf_isom_full_box_read(GF_Box *ptr, GF_BitStream *bs);\r
80 GF_Err gf_isom_full_box_write(GF_Box *s, GF_BitStream *bs);\r
81 void gf_isom_full_box_init(GF_Box *ptr);\r
82 void gf_isom_box_array_del(GF_List *boxList);\r
83 GF_Err gf_isom_box_array_write(GF_Box *parent, GF_List *list, GF_BitStream *bs);\r
84 GF_Err gf_isom_box_array_size(GF_Box *parent, GF_List *list);\r
85 \r
86 \r
87 enum\r
88 {\r
89         GF_ISOM_BOX_TYPE_CO64   = GF_4CC( 'c', 'o', '6', '4' ),\r
90         GF_ISOM_BOX_TYPE_STCO   = GF_4CC( 's', 't', 'c', 'o' ),\r
91         GF_ISOM_BOX_TYPE_CRHD   = GF_4CC( 'c', 'r', 'h', 'd' ),\r
92         GF_ISOM_BOX_TYPE_CTTS   = GF_4CC( 'c', 't', 't', 's' ),\r
93         GF_ISOM_BOX_TYPE_CPRT   = GF_4CC( 'c', 'p', 'r', 't' ),\r
94         GF_ISOM_BOX_TYPE_CHPL   = GF_4CC( 'c', 'h', 'p', 'l' ),\r
95         GF_ISOM_BOX_TYPE_URL    = GF_4CC( 'u', 'r', 'l', ' ' ),\r
96         GF_ISOM_BOX_TYPE_URN    = GF_4CC( 'u', 'r', 'n', ' ' ),\r
97         GF_ISOM_BOX_TYPE_DINF   = GF_4CC( 'd', 'i', 'n', 'f' ),\r
98         GF_ISOM_BOX_TYPE_DREF   = GF_4CC( 'd', 'r', 'e', 'f' ),\r
99         GF_ISOM_BOX_TYPE_STDP   = GF_4CC( 's', 't', 'd', 'p' ),\r
100         GF_ISOM_BOX_TYPE_EDTS   = GF_4CC( 'e', 'd', 't', 's' ),\r
101         GF_ISOM_BOX_TYPE_ELST   = GF_4CC( 'e', 'l', 's', 't' ),\r
102         GF_ISOM_BOX_TYPE_UUID   = GF_4CC( 'u', 'u', 'i', 'd' ),\r
103         GF_ISOM_BOX_TYPE_FREE   = GF_4CC( 'f', 'r', 'e', 'e' ),\r
104         GF_ISOM_BOX_TYPE_HDLR   = GF_4CC( 'h', 'd', 'l', 'r' ),\r
105         GF_ISOM_BOX_TYPE_GMHD   = GF_4CC( 'g', 'm', 'h', 'd' ),\r
106         GF_ISOM_BOX_TYPE_HMHD   = GF_4CC( 'h', 'm', 'h', 'd' ),\r
107         GF_ISOM_BOX_TYPE_HINT   = GF_4CC( 'h', 'i', 'n', 't' ),\r
108         GF_ISOM_BOX_TYPE_MDIA   = GF_4CC( 'm', 'd', 'i', 'a' ),\r
109         GF_ISOM_BOX_TYPE_MDAT   = GF_4CC( 'm', 'd', 'a', 't' ),\r
110         GF_ISOM_BOX_TYPE_MDHD   = GF_4CC( 'm', 'd', 'h', 'd' ),\r
111         GF_ISOM_BOX_TYPE_MINF   = GF_4CC( 'm', 'i', 'n', 'f' ),\r
112         GF_ISOM_BOX_TYPE_MOOV   = GF_4CC( 'm', 'o', 'o', 'v' ),\r
113         GF_ISOM_BOX_TYPE_MVHD   = GF_4CC( 'm', 'v', 'h', 'd' ),\r
114         GF_ISOM_BOX_TYPE_STSD   = GF_4CC( 's', 't', 's', 'd' ),\r
115         GF_ISOM_BOX_TYPE_STSZ   = GF_4CC( 's', 't', 's', 'z' ),\r
116         GF_ISOM_BOX_TYPE_STZ2   = GF_4CC( 's', 't', 'z', '2' ),\r
117         GF_ISOM_BOX_TYPE_STBL   = GF_4CC( 's', 't', 'b', 'l' ),\r
118         GF_ISOM_BOX_TYPE_STSC   = GF_4CC( 's', 't', 's', 'c' ),\r
119         GF_ISOM_BOX_TYPE_STSH   = GF_4CC( 's', 't', 's', 'h' ),\r
120         GF_ISOM_BOX_TYPE_SKIP   = GF_4CC( 's', 'k', 'i', 'p' ),\r
121         GF_ISOM_BOX_TYPE_SMHD   = GF_4CC( 's', 'm', 'h', 'd' ),\r
122         GF_ISOM_BOX_TYPE_STSS   = GF_4CC( 's', 't', 's', 's' ),\r
123         GF_ISOM_BOX_TYPE_STTS   = GF_4CC( 's', 't', 't', 's' ),\r
124         GF_ISOM_BOX_TYPE_TRAK   = GF_4CC( 't', 'r', 'a', 'k' ),\r
125         GF_ISOM_BOX_TYPE_TKHD   = GF_4CC( 't', 'k', 'h', 'd' ),\r
126         GF_ISOM_BOX_TYPE_TREF   = GF_4CC( 't', 'r', 'e', 'f' ),\r
127         GF_ISOM_BOX_TYPE_UDTA   = GF_4CC( 'u', 'd', 't', 'a' ),\r
128         GF_ISOM_BOX_TYPE_VMHD   = GF_4CC( 'v', 'm', 'h', 'd' ),\r
129         GF_ISOM_BOX_TYPE_FTYP   = GF_4CC( 'f', 't', 'y', 'p' ),\r
130         GF_ISOM_BOX_TYPE_FADB   = GF_4CC( 'p', 'a', 'd', 'b' ),\r
131         GF_ISOM_BOX_TYPE_PDIN   = GF_4CC( 'p', 'd', 'i', 'n' ),\r
132         GF_ISOM_BOX_TYPE_SDTP   = GF_4CC( 's', 'd', 't', 'p' ),\r
133 \r
134 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
135         /*Movie Fragments*/\r
136         GF_ISOM_BOX_TYPE_MVEX   = GF_4CC( 'm', 'v', 'e', 'x' ),\r
137         GF_ISOM_BOX_TYPE_MEHD   = GF_4CC( 'm', 'e', 'h', 'd' ),\r
138         GF_ISOM_BOX_TYPE_TREX   = GF_4CC( 't', 'r', 'e', 'x' ),\r
139         GF_ISOM_BOX_TYPE_MOOF   = GF_4CC( 'm', 'o', 'o', 'f' ),\r
140         GF_ISOM_BOX_TYPE_MFHD   = GF_4CC( 'm', 'f', 'h', 'd' ),\r
141         GF_ISOM_BOX_TYPE_TRAF   = GF_4CC( 't', 'r', 'a', 'f' ),\r
142         GF_ISOM_BOX_TYPE_TFHD   = GF_4CC( 't', 'f', 'h', 'd' ),\r
143         GF_ISOM_BOX_TYPE_TRUN   = GF_4CC( 't', 'r', 'u', 'n' ),\r
144 #endif\r
145 \r
146         /*MP4 extensions*/\r
147         GF_ISOM_BOX_TYPE_DPND   = GF_4CC( 'd', 'p', 'n', 'd' ),\r
148         GF_ISOM_BOX_TYPE_IODS   = GF_4CC( 'i', 'o', 'd', 's' ),\r
149         GF_ISOM_BOX_TYPE_ESDS   = GF_4CC( 'e', 's', 'd', 's' ),\r
150         GF_ISOM_BOX_TYPE_MPOD   = GF_4CC( 'm', 'p', 'o', 'd' ),\r
151         GF_ISOM_BOX_TYPE_SYNC   = GF_4CC( 's', 'y', 'n', 'c' ),\r
152         GF_ISOM_BOX_TYPE_IPIR   = GF_4CC( 'i', 'p', 'i', 'r' ),\r
153         GF_ISOM_BOX_TYPE_SDHD   = GF_4CC( 's', 'd', 'h', 'd' ),\r
154         GF_ISOM_BOX_TYPE_ODHD   = GF_4CC( 'o', 'd', 'h', 'd' ),\r
155         GF_ISOM_BOX_TYPE_NMHD   = GF_4CC( 'n', 'm', 'h', 'd' ),\r
156         GF_ISOM_BOX_TYPE_MP4S   = GF_4CC( 'm', 'p', '4', 's' ),\r
157         GF_ISOM_BOX_TYPE_MP4A   = GF_4CC( 'm', 'p', '4', 'a' ),\r
158         GF_ISOM_BOX_TYPE_MP4V   = GF_4CC( 'm', 'p', '4', 'v' ),\r
159 \r
160         /*AVC / H264 extension*/\r
161         GF_ISOM_BOX_TYPE_AVCC   = GF_4CC( 'a', 'v', 'c', 'C' ),\r
162         GF_ISOM_BOX_TYPE_BTRT   = GF_4CC( 'b', 't', 'r', 't' ),\r
163         GF_ISOM_BOX_TYPE_M4DS   = GF_4CC( 'm', '4', 'd', 's' ),\r
164         GF_ISOM_BOX_TYPE_AVC1   = GF_4CC( 'a', 'v', 'c', '1' ),\r
165         GF_ISOM_BOX_TYPE_PASP   = GF_4CC( 'p', 'a', 's', 'p' ),\r
166 \r
167         /*3GPP extensions*/\r
168         GF_ISOM_BOX_TYPE_DAMR   = GF_4CC( 'd', 'a', 'm', 'r' ),\r
169         GF_ISOM_BOX_TYPE_D263   = GF_4CC( 'd', '2', '6', '3' ),\r
170         GF_ISOM_BOX_TYPE_DEVC   = GF_4CC( 'd', 'e', 'v', 'c' ),\r
171         GF_ISOM_BOX_TYPE_DQCP   = GF_4CC( 'd', 'q', 'c', 'p' ),\r
172         GF_ISOM_BOX_TYPE_DSMV   = GF_4CC( 'd', 's', 'm', 'v' ),\r
173         GF_ISOM_BOX_TYPE_TSEL   = GF_4CC( 't', 's', 'e', 'l' ),\r
174 \r
175         /*3GPP text / MPEG-4 StreamingText*/\r
176         GF_ISOM_BOX_TYPE_FTAB   = GF_4CC( 'f', 't', 'a', 'b' ),\r
177         GF_ISOM_BOX_TYPE_TX3G   = GF_4CC( 't', 'x', '3', 'g' ),\r
178         GF_ISOM_BOX_TYPE_STYL   = GF_4CC( 's', 't', 'y', 'l' ),\r
179         GF_ISOM_BOX_TYPE_HLIT   = GF_4CC( 'h', 'l', 'i', 't' ),\r
180         GF_ISOM_BOX_TYPE_HCLR   = GF_4CC( 'h', 'c', 'l', 'r' ),\r
181         GF_ISOM_BOX_TYPE_KROK   = GF_4CC( 'k', 'r', 'o', 'k' ),\r
182         GF_ISOM_BOX_TYPE_DLAY   = GF_4CC( 'd', 'l', 'a', 'y' ),\r
183         GF_ISOM_BOX_TYPE_HREF   = GF_4CC( 'h', 'r', 'e', 'f' ),\r
184         GF_ISOM_BOX_TYPE_TBOX   = GF_4CC( 't', 'b', 'o', 'x' ),\r
185         GF_ISOM_BOX_TYPE_BLNK   = GF_4CC( 'b', 'l', 'n', 'k' ),\r
186         GF_ISOM_BOX_TYPE_TWRP   = GF_4CC( 't', 'w', 'r', 'p' ),\r
187 \r
188         /* ISO Base Media File Format Extensions for MPEG-21 */\r
189         GF_ISOM_BOX_TYPE_META   = GF_4CC( 'm', 'e', 't', 'a' ),\r
190         GF_ISOM_BOX_TYPE_XML    = GF_4CC( 'x', 'm', 'l', ' ' ),\r
191         GF_ISOM_BOX_TYPE_BXML   = GF_4CC( 'b', 'x', 'm', 'l' ),\r
192         GF_ISOM_BOX_TYPE_ILOC   = GF_4CC( 'i', 'l', 'o', 'c' ),\r
193         GF_ISOM_BOX_TYPE_PITM   = GF_4CC( 'p', 'i', 't', 'm' ),\r
194         GF_ISOM_BOX_TYPE_IPRO   = GF_4CC( 'i', 'p', 'r', 'o' ),\r
195         GF_ISOM_BOX_TYPE_INFE   = GF_4CC( 'i', 'n', 'f', 'e' ),\r
196         GF_ISOM_BOX_TYPE_IINF   = GF_4CC( 'i', 'i', 'n', 'f' ),\r
197         GF_ISOM_BOX_TYPE_ENCA   = GF_4CC( 'e', 'n', 'c', 'a' ),\r
198         GF_ISOM_BOX_TYPE_ENCV   = GF_4CC( 'e', 'n', 'c', 'v' ),\r
199         GF_ISOM_BOX_TYPE_ENCT   = GF_4CC( 'e', 'n', 'c', 't' ),\r
200         GF_ISOM_BOX_TYPE_ENCS   = GF_4CC( 'e', 'n', 'c', 's' ),\r
201         GF_ISOM_BOX_TYPE_SINF   = GF_4CC( 's', 'i', 'n', 'f' ),\r
202         GF_ISOM_BOX_TYPE_FRMA   = GF_4CC( 'f', 'r', 'm', 'a' ),\r
203         GF_ISOM_BOX_TYPE_SCHM   = GF_4CC( 's', 'c', 'h', 'm' ),\r
204         GF_ISOM_BOX_TYPE_SCHI   = GF_4CC( 's', 'c', 'h', 'i' ),\r
205 \r
206         GF_ISOM_BOX_TYPE_METX   = GF_4CC( 'm', 'e', 't', 'x' ),\r
207         GF_ISOM_BOX_TYPE_METT   = GF_4CC( 'm', 'e', 't', 't' ),\r
208 \r
209         /* ISMA 1.0 Encryption and Authentication V 1.0 */\r
210         GF_ISOM_BOX_TYPE_IKMS   = GF_4CC( 'i', 'K', 'M', 'S' ),\r
211         GF_ISOM_BOX_TYPE_ISFM   = GF_4CC( 'i', 'S', 'F', 'M' ),\r
212 \r
213         /* Hinting boxes */\r
214         GF_ISOM_BOX_TYPE_RTP_STSD       = GF_4CC( 'r', 't', 'p', ' ' ),\r
215         GF_ISOM_BOX_TYPE_HNTI   = GF_4CC( 'h', 'n', 't', 'i' ),\r
216         GF_ISOM_BOX_TYPE_RTP    = GF_4CC( 'r', 't', 'p', ' ' ),\r
217         GF_ISOM_BOX_TYPE_SDP    = GF_4CC( 's', 'd', 'p', ' ' ),\r
218         GF_ISOM_BOX_TYPE_HINF   = GF_4CC( 'h', 'i', 'n', 'f' ),\r
219         GF_ISOM_BOX_TYPE_NAME   = GF_4CC( 'n', 'a', 'm', 'e' ),\r
220         GF_ISOM_BOX_TYPE_TRPY   = GF_4CC( 't', 'r', 'p', 'y' ),\r
221         GF_ISOM_BOX_TYPE_NUMP   = GF_4CC( 'n', 'u', 'm', 'p' ),\r
222         GF_ISOM_BOX_TYPE_TOTL   = GF_4CC( 't', 'o', 't', 'l' ),\r
223         GF_ISOM_BOX_TYPE_NPCK   = GF_4CC( 'n', 'p', 'c', 'k' ),\r
224         GF_ISOM_BOX_TYPE_TPYL   = GF_4CC( 't', 'p', 'y', 'l' ),\r
225         GF_ISOM_BOX_TYPE_TPAY   = GF_4CC( 't', 'p', 'a', 'y' ),\r
226         GF_ISOM_BOX_TYPE_MAXR   = GF_4CC( 'm', 'a', 'x', 'r' ),\r
227         GF_ISOM_BOX_TYPE_DMED   = GF_4CC( 'd', 'm', 'e', 'd' ),\r
228         GF_ISOM_BOX_TYPE_DIMM   = GF_4CC( 'd', 'i', 'm', 'm' ),\r
229         GF_ISOM_BOX_TYPE_DREP   = GF_4CC( 'd', 'r', 'e', 'p' ),\r
230         GF_ISOM_BOX_TYPE_TMIN   = GF_4CC( 't', 'm', 'i', 'n' ),\r
231         GF_ISOM_BOX_TYPE_TMAX   = GF_4CC( 't', 'm', 'a', 'x' ),\r
232         GF_ISOM_BOX_TYPE_PMAX   = GF_4CC( 'p', 'm', 'a', 'x' ),\r
233         GF_ISOM_BOX_TYPE_DMAX   = GF_4CC( 'd', 'm', 'a', 'x' ),\r
234         GF_ISOM_BOX_TYPE_PAYT   = GF_4CC( 'p', 'a', 'y', 't' ),\r
235         GF_ISOM_BOX_TYPE_RELY   = GF_4CC( 'r', 'e', 'l', 'y' ),\r
236         GF_ISOM_BOX_TYPE_TIMS   = GF_4CC( 't', 'i', 'm', 's' ),\r
237         GF_ISOM_BOX_TYPE_TSRO   = GF_4CC( 't', 's', 'r', 'o' ),\r
238         GF_ISOM_BOX_TYPE_SNRO   = GF_4CC( 's', 'n', 'r', 'o' ),\r
239         GF_ISOM_BOX_TYPE_RTPO   = GF_4CC( 'r', 't', 'p', 'o' ),\r
240         \r
241         /*internal type for track references*/\r
242         GF_ISOM_BOX_TYPE_REFT   = GF_4CC( 'R', 'E', 'F', 'T' ),\r
243 \r
244         /* Apple extensions */\r
245 \r
246         GF_ISOM_BOX_TYPE_ILST   = GF_4CC( 'i', 'l', 's', 't' ),\r
247         GF_ISOM_BOX_TYPE_0xA9NAM        = GF_4CC( 0xA9, 'n', 'a', 'm' ),\r
248         GF_ISOM_BOX_TYPE_0xA9CMT        = GF_4CC( 0xA9, 'c', 'm', 't' ),\r
249         GF_ISOM_BOX_TYPE_0xA9DAY        = GF_4CC( 0xA9, 'd', 'a', 'y' ),\r
250         GF_ISOM_BOX_TYPE_0xA9ART        = GF_4CC( 0xA9, 'A', 'R', 'T' ),\r
251         GF_ISOM_BOX_TYPE_0xA9TRK        = GF_4CC( 0xA9, 't', 'r', 'k' ),\r
252         GF_ISOM_BOX_TYPE_0xA9ALB        = GF_4CC( 0xA9, 'a', 'l', 'b' ),\r
253         GF_ISOM_BOX_TYPE_0xA9COM        = GF_4CC( 0xA9, 'c', 'o', 'm' ),\r
254         GF_ISOM_BOX_TYPE_0xA9WRT        = GF_4CC( 0xA9, 'w', 'r', 't' ),\r
255         GF_ISOM_BOX_TYPE_0xA9TOO        = GF_4CC( 0xA9, 't', 'o', 'o' ),\r
256         GF_ISOM_BOX_TYPE_0xA9CPY        = GF_4CC( 0xA9, 'c', 'p', 'y' ),\r
257         GF_ISOM_BOX_TYPE_0xA9DES        = GF_4CC( 0xA9, 'd', 'e', 's' ),\r
258         GF_ISOM_BOX_TYPE_0xA9GEN        = GF_4CC( 0xA9, 'g', 'e', 'n' ),\r
259         GF_ISOM_BOX_TYPE_0xA9GRP        = GF_4CC( 0xA9, 'g', 'r', 'p' ),\r
260         GF_ISOM_BOX_TYPE_0xA9ENC        = GF_4CC( 0xA9, 'e', 'n', 'c' ),\r
261         GF_ISOM_BOX_TYPE_aART           = GF_4CC( 'a', 'A', 'R', 'T' ),\r
262         GF_ISOM_BOX_TYPE_PGAP = GF_4CC( 'p', 'g', 'a', 'p' ),\r
263         GF_ISOM_BOX_TYPE_GNRE   = GF_4CC( 'g', 'n', 'r', 'e' ),\r
264         GF_ISOM_BOX_TYPE_DISK   = GF_4CC( 'd', 'i', 's', 'k' ),\r
265         GF_ISOM_BOX_TYPE_TRKN   = GF_4CC( 't', 'r', 'k', 'n' ),\r
266         GF_ISOM_BOX_TYPE_TMPO   = GF_4CC( 't', 'm', 'p', 'o' ),\r
267         GF_ISOM_BOX_TYPE_CPIL   = GF_4CC( 'c', 'p', 'i', 'l' ),\r
268         GF_ISOM_BOX_TYPE_COVR   = GF_4CC( 'c', 'o', 'v', 'r' ),\r
269         GF_ISOM_BOX_TYPE_iTunesSpecificInfo     = GF_4CC( '-', '-', '-', '-' ),\r
270         GF_ISOM_BOX_TYPE_DATA   = GF_4CC( 'd', 'a', 't', 'a' ),\r
271 \r
272         GF_ISOM_HANDLER_TYPE_MDIR       = GF_4CC( 'm', 'd', 'i', 'r' ),\r
273         GF_ISOM_BOX_TYPE_CHAP   = GF_4CC( 'c', 'h', 'a', 'p' ),\r
274         \r
275         /*OMA (P)DCF boxes*/\r
276         GF_ISOM_BOX_TYPE_OHDR   = GF_4CC( 'o', 'h', 'd', 'r' ),\r
277         GF_ISOM_BOX_TYPE_GRPI   = GF_4CC( 'g', 'r', 'p', 'i' ),\r
278         GF_ISOM_BOX_TYPE_MDRI   = GF_4CC( 'm', 'd', 'r', 'i' ),\r
279         GF_ISOM_BOX_TYPE_ODTT   = GF_4CC( 'o', 'd', 't', 't' ),\r
280         GF_ISOM_BOX_TYPE_ODRB   = GF_4CC( 'o', 'd', 'r', 'b' ),\r
281         GF_ISOM_BOX_TYPE_ODKM   = GF_4CC( 'o', 'd', 'k', 'm' ),\r
282         GF_ISOM_BOX_TYPE_ODAF   = GF_4CC( 'o', 'd', 'a', 'f' ),\r
283 \r
284         /*3GPP DIMS */\r
285         GF_ISOM_BOX_TYPE_DIMS   = GF_4CC( 'd', 'i', 'm', 's' ),\r
286         GF_ISOM_BOX_TYPE_DIMC   = GF_4CC( 'd', 'i', 'm', 'C' ),\r
287         GF_ISOM_BOX_TYPE_DIST   = GF_4CC( 'd', 'i', 'S', 'T' ),\r
288 \r
289 \r
290         GF_ISOM_BOX_TYPE_AC3    = GF_4CC( 'a', 'c', '-', '3' ),\r
291         GF_ISOM_BOX_TYPE_DAC3   = GF_4CC( 'd', 'a', 'c', '3' ),\r
292 \r
293         /*ALL INTERNAL BOXES - NEVER WRITTEN TO FILE!!*/\r
294 \r
295         /*generic handlers*/\r
296         GF_ISOM_BOX_TYPE_GNRM   = GF_4CC( 'g', 'n', 'r', 'm' ),\r
297         GF_ISOM_BOX_TYPE_GNRV   = GF_4CC( 'g', 'n', 'r', 'v' ),\r
298         GF_ISOM_BOX_TYPE_GNRA   = GF_4CC( 'g', 'n', 'r', 'a' ),\r
299         /*storage of AU fragments (for MPEG-4 visual resync marker (video packets), located in stbl.*/\r
300         GF_ISOM_BOX_TYPE_STSF   =  GF_4CC( 'S', 'T', 'S', 'F' ),\r
301         /*base constructor of all hint formats (currently only RTP uses it)*/\r
302         GF_ISOM_BOX_TYPE_GHNT   = GF_4CC( 'g', 'h', 'n', 't' ),\r
303         /*for compatibility with old files hinted for DSS - needs special parsing*/\r
304         GF_ISOM_BOX_TYPE_VOID   = GF_4CC( 'V', 'O', 'I', 'D' ),\r
305 };\r
306 \r
307 \r
308 typedef struct\r
309 {\r
310         GF_ISOM_BOX\r
311         /*note: the data is NEVER loaded to the mdat in this lib*/\r
312         u64 dataSize;\r
313         char *data;\r
314 } GF_MediaDataBox;\r
315 \r
316 typedef struct\r
317 {\r
318         GF_ISOM_BOX\r
319         char *data;\r
320         u32 dataSize;\r
321 } GF_UnknownBox;\r
322 \r
323 typedef struct\r
324 {\r
325         GF_ISOM_UUID_BOX\r
326         char *data;\r
327         u32 dataSize;\r
328 } GF_UnknownUUIDBox;\r
329 \r
330 typedef struct\r
331 {\r
332         GF_ISOM_FULL_BOX\r
333         u64 creationTime;\r
334         u64 modificationTime;\r
335         u32 timeScale;\r
336         u64 duration;\r
337         u32 nextTrackID;\r
338         u32 preferredRate;\r
339         u16 preferredVolume;\r
340         char reserved[10];\r
341         u32 matrixA;\r
342         u32 matrixB;\r
343         u32 matrixU;\r
344         u32 matrixC;\r
345         u32 matrixD;\r
346         u32 matrixV;\r
347         u32 matrixW;\r
348         u32 matrixX;\r
349         u32 matrixY;\r
350         u32 previewTime;\r
351         u32 previewDuration;\r
352         u32 posterTime;\r
353         u32 selectionTime;\r
354         u32 selectionDuration;\r
355         u32 currentTime;\r
356 } GF_MovieHeaderBox;\r
357 \r
358 typedef struct\r
359 {\r
360         GF_ISOM_FULL_BOX\r
361         GF_Descriptor *descriptor;\r
362 } GF_ObjectDescriptorBox;\r
363 \r
364 /*used for entry list*/\r
365 typedef struct\r
366 {\r
367         u64 segmentDuration;\r
368         s64 mediaTime;\r
369         u32 mediaRate;\r
370 } GF_EdtsEntry;\r
371 \r
372 typedef struct\r
373 {\r
374         GF_ISOM_FULL_BOX\r
375         GF_List *entryList;\r
376 } GF_EditListBox;\r
377 \r
378 typedef struct\r
379 {\r
380         GF_ISOM_BOX\r
381         GF_EditListBox *editList;\r
382 } GF_EditBox;\r
383 \r
384 \r
385 /*used to classify boxes in the UserData GF_Box*/\r
386 typedef struct\r
387 {\r
388         u32 boxType;\r
389         u8 uuid[16];\r
390         GF_List *boxList;\r
391 } GF_UserDataMap;\r
392 \r
393 typedef struct\r
394 {\r
395         GF_ISOM_BOX\r
396         GF_List *recordList;\r
397 } GF_UserDataBox;\r
398 \r
399 typedef struct\r
400 {\r
401         GF_ISOM_BOX\r
402         GF_MovieHeaderBox *mvhd;\r
403         GF_ObjectDescriptorBox *iods;\r
404         GF_UserDataBox *udta;\r
405 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
406         struct __tag_mvex_box *mvex;\r
407 #endif\r
408         /*meta box if any*/\r
409         struct __tag_meta_box *meta;\r
410         /*track boxes*/\r
411         GF_List *trackList;\r
412         /*other boxes*/\r
413         GF_List *boxes;\r
414 \r
415         GF_ISOFile *mov;\r
416 \r
417 } GF_MovieBox;\r
418 \r
419 typedef struct\r
420 {\r
421         GF_ISOM_FULL_BOX\r
422         u64 creationTime;\r
423         u64 modificationTime;\r
424         u32 trackID;\r
425         u32 reserved1;\r
426         u64 duration;\r
427         u32 reserved2[2];\r
428         u16 layer;\r
429         u16 alternate_group;\r
430         u16 volume;\r
431         u16 reserved3;\r
432         u32 matrix[9];\r
433         u32 width, height;\r
434 } GF_TrackHeaderBox;\r
435 \r
436 typedef struct\r
437 {\r
438         GF_ISOM_BOX\r
439         GF_List *boxList;\r
440 } GF_TrackReferenceBox;\r
441 \r
442 \r
443 \r
444 typedef struct\r
445 {\r
446         GF_ISOM_BOX\r
447         GF_UserDataBox *udta;\r
448         GF_TrackHeaderBox *Header;\r
449         struct __tag_media_box *Media;\r
450         GF_EditBox *editBox;\r
451         GF_TrackReferenceBox *References;\r
452         /*meta box if any*/\r
453         struct __tag_meta_box *meta;\r
454         /*other*/\r
455         GF_List *boxes;\r
456 \r
457         GF_MovieBox *moov;\r
458         /*private for media padding*/\r
459         u32 padding_bytes;\r
460         /*private for editing*/\r
461         char *name;\r
462         /*private for editing*/\r
463         Bool is_unpacked;\r
464 } GF_TrackBox;\r
465 \r
466 typedef struct\r
467 {\r
468         GF_ISOM_FULL_BOX\r
469         u64 creationTime;\r
470         u64 modificationTime;\r
471         u32 timeScale;\r
472         u64 duration;\r
473         char packedLanguage[4];\r
474         u16 reserved;\r
475 } GF_MediaHeaderBox;\r
476 \r
477 \r
478 typedef struct\r
479 {\r
480         GF_ISOM_FULL_BOX\r
481         u32 reserved1;\r
482         u32 handlerType;\r
483         u8 reserved2[12];\r
484         char *nameUTF8;\r
485 } GF_HandlerBox;\r
486 \r
487 typedef struct __tag_media_box\r
488 {\r
489         GF_ISOM_BOX\r
490         GF_TrackBox *mediaTrack;\r
491         GF_MediaHeaderBox *mediaHeader;\r
492         GF_HandlerBox *handler;\r
493         struct __tag_media_info_box *information;\r
494         u64 BytesMissing;\r
495 } GF_MediaBox;\r
496 \r
497 typedef struct\r
498 {\r
499         GF_ISOM_FULL_BOX\r
500         u64 reserved;\r
501 } GF_VideoMediaHeaderBox;\r
502 \r
503 typedef struct\r
504 {\r
505         GF_ISOM_FULL_BOX\r
506         u32 reserved;\r
507 } GF_SoundMediaHeaderBox;\r
508 \r
509 typedef struct\r
510 {\r
511         GF_ISOM_FULL_BOX\r
512         /*this is used for us INTERNALLY*/\r
513         u32 subType;\r
514         u32 maxPDUSize;\r
515         u32 avgPDUSize;\r
516         u32 maxBitrate;\r
517         u32 avgBitrate;\r
518         u32 slidingAverageBitrate;\r
519 } GF_HintMediaHeaderBox;\r
520 \r
521 typedef struct\r
522 {\r
523         GF_ISOM_FULL_BOX\r
524 } GF_MPEGMediaHeaderBox;\r
525 \r
526 typedef struct\r
527 {\r
528         GF_ISOM_FULL_BOX\r
529 } GF_ODMediaHeaderBox;\r
530 \r
531 typedef struct\r
532 {\r
533         GF_ISOM_FULL_BOX\r
534 } GF_OCRMediaHeaderBox;\r
535 \r
536 typedef struct\r
537 {\r
538         GF_ISOM_FULL_BOX\r
539 } GF_SceneMediaHeaderBox;\r
540 \r
541 typedef struct\r
542 {\r
543         GF_ISOM_FULL_BOX\r
544         GF_List *boxList;\r
545 } GF_DataReferenceBox;\r
546 \r
547 typedef struct\r
548 {\r
549         GF_ISOM_BOX\r
550         GF_DataReferenceBox *dref;\r
551 } GF_DataInformationBox;\r
552 \r
553 #define GF_ISOM_DATAENTRY_FIELDS        \\r
554         char *location;\r
555 \r
556 typedef struct\r
557 {\r
558         GF_ISOM_FULL_BOX\r
559         GF_ISOM_DATAENTRY_FIELDS\r
560 } GF_DataEntryBox;\r
561 \r
562 typedef struct\r
563 {\r
564         GF_ISOM_FULL_BOX\r
565         GF_ISOM_DATAENTRY_FIELDS\r
566 } GF_DataEntryURLBox;\r
567 \r
568 typedef struct\r
569 {\r
570         GF_ISOM_FULL_BOX\r
571         GF_ISOM_DATAENTRY_FIELDS\r
572         char *nameURN;\r
573 } GF_DataEntryURNBox;\r
574 \r
575 typedef struct\r
576 {\r
577         u32 sampleCount;\r
578         u32 sampleDelta;\r
579 } GF_SttsEntry;\r
580 \r
581 typedef struct\r
582 {\r
583         GF_ISOM_FULL_BOX\r
584         GF_SttsEntry *entries;\r
585         u32 nb_entries, alloc_size;\r
586 \r
587 #ifndef GPAC_READ_ONLY\r
588         /*cache for WRITE*/\r
589         u32 w_currentSampleNum;\r
590         u64 w_LastDTS;\r
591 #endif\r
592         /*cache for READ*/\r
593         u32 r_FirstSampleInEntry;\r
594         u32 r_currentEntryIndex;\r
595         u64 r_CurrentDTS;\r
596 } GF_TimeToSampleBox;\r
597 \r
598 \r
599 /*TO CHECK - it could be reasonnable to only use 16bits for both count and offset*/\r
600 typedef struct\r
601 {\r
602         u32 sampleCount;\r
603         u32 decodingOffset;\r
604 } GF_DttsEntry;\r
605 \r
606 typedef struct\r
607 {\r
608         GF_ISOM_FULL_BOX\r
609         GF_DttsEntry *entries;\r
610         u32 nb_entries, alloc_size;\r
611 \r
612 #ifndef GPAC_READ_ONLY\r
613         u32 w_LastSampleNumber;\r
614         /*force one sample per entry*/\r
615         Bool unpack_mode;\r
616 #endif\r
617         /*Cache for read*/\r
618         u32 r_currentEntryIndex;\r
619         u32 r_FirstSampleInEntry;\r
620 } GF_CompositionOffsetBox;\r
621 \r
622 \r
623 typedef struct\r
624 {\r
625         u32 SampleNumber;\r
626         u32 fragmentCount;\r
627         u16 *fragmentSizes;\r
628 } GF_StsfEntry;\r
629 \r
630 typedef struct\r
631 {\r
632         GF_ISOM_FULL_BOX\r
633         GF_List *entryList;\r
634 #ifndef GPAC_READ_ONLY\r
635         /*Cache for write*/\r
636         GF_StsfEntry *w_currentEntry;\r
637         u32 w_currentEntryIndex;\r
638 #endif\r
639         /*Cache for read*/\r
640         u32 r_currentEntryIndex;\r
641         GF_StsfEntry *r_currentEntry;\r
642 } GF_SampleFragmentBox;\r
643 \r
644 \r
645 #define GF_ISOM_SAMPLE_ENTRY_FIELDS             \\r
646         GF_ISOM_UUID_BOX                                        \\r
647         u16 dataReferenceIndex;                         \\r
648         char reserved[ 6 ];                                     \\r
649         struct __tag_protect_box *protection_info;\r
650 \r
651 /*base sample entry box (never used but for typecasting)*/\r
652 typedef struct\r
653 {\r
654         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
655 } GF_SampleEntryBox;\r
656 \r
657 typedef struct\r
658 {\r
659         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
660         /*box type as specified in the file (not this box's type!!)*/\r
661         u32 EntryType;\r
662 \r
663         char *data;\r
664         u32 data_size;\r
665 } GF_GenericSampleEntryBox;\r
666 \r
667 typedef struct\r
668 {\r
669         GF_ISOM_FULL_BOX\r
670         GF_ESD *desc;\r
671 } GF_ESDBox;\r
672 \r
673 /*for all MPEG4 media except audio and video*/\r
674 typedef struct\r
675 {\r
676         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
677         GF_ESDBox *esd;\r
678         /*used for hinting when extracting the OD stream...*/\r
679         GF_SLConfig *slc;\r
680 } GF_MPEGSampleEntryBox;\r
681 \r
682 typedef struct\r
683 {\r
684         GF_ISOM_BOX\r
685         u32 hSpacing;\r
686         u32 vSpacing;\r
687 } GF_PixelAspectRatioBox;\r
688 \r
689 \r
690 #define GF_ISOM_VISUAL_SAMPLE_ENTRY             \\r
691         GF_ISOM_SAMPLE_ENTRY_FIELDS                     \\r
692         u16 version;                                            \\r
693         u16 revision;                                           \\r
694         u32 vendor;                                                     \\r
695         u32 temporal_quality;                           \\r
696         u32 spacial_quality;                            \\r
697         u16 Width, Height;                                      \\r
698         u32 horiz_res, vert_res;                        \\r
699         u32 entry_data_size;                            \\r
700         u16 frames_per_sample;                          \\r
701         char compressor_name[33];                       \\r
702         u16 bit_depth;                                          \\r
703         s16 color_table_index;                          \\r
704         GF_PixelAspectRatioBox *pasp;           \r
705 \r
706 typedef struct\r
707 {\r
708         GF_ISOM_VISUAL_SAMPLE_ENTRY\r
709 } GF_VisualSampleEntryBox;\r
710 \r
711 void gf_isom_video_sample_entry_init(GF_VisualSampleEntryBox *ent);\r
712 GF_Err gf_isom_video_sample_entry_read(GF_VisualSampleEntryBox *ptr, GF_BitStream *bs);\r
713 #ifndef GPAC_READ_ONLY\r
714 void gf_isom_video_sample_entry_write(GF_VisualSampleEntryBox *ent, GF_BitStream *bs);\r
715 void gf_isom_video_sample_entry_size(GF_VisualSampleEntryBox *ent);\r
716 #endif\r
717 \r
718 typedef struct\r
719 {\r
720         GF_ISOM_BOX\r
721         u32 bufferSizeDB;\r
722         u32 maxBitrate;\r
723         u32 avgBitrate;\r
724 } GF_MPEG4BitRateBox;\r
725 \r
726 typedef struct\r
727 {\r
728         GF_ISOM_BOX\r
729         GF_List *descriptors;\r
730 } GF_MPEG4ExtensionDescriptorsBox;\r
731 \r
732 typedef struct\r
733 {\r
734         GF_ISOM_BOX\r
735         GF_AVCConfig *config;\r
736 } GF_AVCConfigurationBox;\r
737 \r
738 typedef struct\r
739 {\r
740         GF_ISOM_VISUAL_SAMPLE_ENTRY\r
741         GF_ESDBox *esd;\r
742         /*used for Publishing*/\r
743         GF_SLConfig *slc;\r
744 \r
745         /*avc extensions - we merged with regular 'mp4v' box to handle isma E&A signaling of AVC*/\r
746         GF_AVCConfigurationBox *avc_config;\r
747         GF_MPEG4BitRateBox *bitrate;\r
748         /*ext descriptors*/\r
749         GF_MPEG4ExtensionDescriptorsBox *descr;\r
750         /*internally emulated esd*/\r
751         GF_ESD *emul_esd;\r
752         /*iPod's hack*/\r
753         GF_UnknownUUIDBox *ipod_ext;\r
754 \r
755 } GF_MPEGVisualSampleEntryBox;\r
756 \r
757 \r
758 /*this is the default visual sdst (to handle unknown media)*/\r
759 typedef struct\r
760 {\r
761         GF_ISOM_VISUAL_SAMPLE_ENTRY\r
762         /*box type as specified in the file (not this box's type!!)*/\r
763         u32 EntryType;\r
764         /*opaque description data (ESDS in MP4, SMI in SVQ3, ...)*/\r
765         char *data;\r
766         u32 data_size;\r
767 } GF_GenericVisualSampleEntryBox;\r
768 \r
769 \r
770 #define GF_ISOM_AUDIO_SAMPLE_ENTRY      \\r
771         GF_ISOM_SAMPLE_ENTRY_FIELDS             \\r
772         u16 version;                                    \\r
773         u16 revision;                                   \\r
774         u32 vendor;                                             \\r
775         u16 channel_count;                              \\r
776         u16 bitspersample;                              \\r
777         u16 compression_id;                             \\r
778         u16 packet_size;                                \\r
779         u16 samplerate_hi;                              \\r
780         u16 samplerate_lo;\r
781 \r
782 \r
783 typedef struct \r
784 {\r
785         GF_ISOM_AUDIO_SAMPLE_ENTRY\r
786 } GF_AudioSampleEntryBox;\r
787 \r
788 void gf_isom_audio_sample_entry_init(GF_AudioSampleEntryBox *ptr);\r
789 GF_Err gf_isom_audio_sample_entry_read(GF_AudioSampleEntryBox *ptr, GF_BitStream *bs);\r
790 #ifndef GPAC_READ_ONLY\r
791 void gf_isom_audio_sample_entry_write(GF_AudioSampleEntryBox *ptr, GF_BitStream *bs);\r
792 void gf_isom_audio_sample_entry_size(GF_AudioSampleEntryBox *ptr);\r
793 #endif\r
794 \r
795 \r
796 typedef struct\r
797 {\r
798         GF_ISOM_AUDIO_SAMPLE_ENTRY\r
799         GF_ESDBox *esd;\r
800         GF_SLConfig *slc;\r
801 } GF_MPEGAudioSampleEntryBox;\r
802 \r
803 typedef struct\r
804 {\r
805         GF_ISOM_BOX\r
806         GF_3GPConfig cfg;\r
807 } GF_3GPPConfigBox;\r
808 \r
809 typedef struct\r
810 {\r
811         GF_ISOM_AUDIO_SAMPLE_ENTRY\r
812         GF_3GPPConfigBox *info;\r
813 } GF_3GPPAudioSampleEntryBox;\r
814 \r
815 typedef struct\r
816 {\r
817         GF_ISOM_VISUAL_SAMPLE_ENTRY\r
818         GF_3GPPConfigBox *info;\r
819 } GF_3GPPVisualSampleEntryBox;\r
820 \r
821 /*this is the default visual sdst (to handle unknown media)*/\r
822 typedef struct\r
823 {\r
824         GF_ISOM_AUDIO_SAMPLE_ENTRY\r
825         /*box type as specified in the file (not this box's type!!)*/\r
826         u32 EntryType;\r
827         /*opaque description data (ESDS in MP4, ...)*/\r
828         char *data;\r
829         u32 data_size;\r
830 } GF_GenericAudioSampleEntryBox;\r
831 \r
832 typedef struct\r
833 {\r
834         GF_ISOM_BOX\r
835         GF_AC3Config cfg;\r
836 } GF_AC3ConfigBox;\r
837 \r
838 typedef struct\r
839 {\r
840         GF_ISOM_AUDIO_SAMPLE_ENTRY\r
841         GF_AC3ConfigBox *info;\r
842 } GF_AC3SampleEntryBox;\r
843 \r
844 \r
845 \r
846 \r
847 typedef struct\r
848 {\r
849         GF_ISOM_FULL_BOX\r
850         u8 profile;\r
851         u8 level;\r
852         u8 pathComponents;\r
853         Bool fullRequestHost;\r
854         Bool streamType;\r
855         u8 containsRedundant;\r
856         char *textEncoding;\r
857         char *contentEncoding;\r
858 } GF_DIMSSceneConfigBox;\r
859 \r
860 typedef struct\r
861 {\r
862         GF_ISOM_BOX\r
863         char *content_script_types;\r
864 } GF_DIMSScriptTypesBox;\r
865 \r
866 typedef struct\r
867 {\r
868         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
869         GF_DIMSSceneConfigBox *config;\r
870         GF_MPEG4BitRateBox *bitrate;\r
871         GF_DIMSScriptTypesBox *scripts;\r
872 } GF_DIMSSampleEntryBox;\r
873 \r
874 \r
875 /*base sample entry box (never used but for typecasting)*/\r
876 typedef struct\r
877 {\r
878         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
879         char *content_encoding; //optional\r
880         char *mime_type_or_namespace;   //not optional\r
881         char *xml_schema_loc;   // optional\r
882         GF_MPEG4BitRateBox *bitrate; // optional\r
883 } GF_MetaDataSampleEntryBox;\r
884 \r
885 typedef struct\r
886 {\r
887         GF_ISOM_FULL_BOX\r
888         GF_List *boxList;\r
889 } GF_SampleDescriptionBox;\r
890 \r
891 \r
892 typedef struct\r
893 {\r
894         GF_ISOM_FULL_BOX\r
895         /*if this is the compact version, sample size is actually fieldSize*/\r
896         u32 sampleSize;\r
897         u32 sampleCount;\r
898         u32 alloc_size;\r
899         u32 *sizes;\r
900 } GF_SampleSizeBox;\r
901 \r
902 typedef struct\r
903 {\r
904         GF_ISOM_FULL_BOX\r
905         u32 nb_entries;\r
906         u32 alloc_size;\r
907         u32 *offsets;\r
908 } GF_ChunkOffsetBox;\r
909 \r
910 typedef struct \r
911 {\r
912         GF_ISOM_FULL_BOX\r
913         u32 nb_entries;\r
914         u32 alloc_size;\r
915         u64 *offsets;\r
916 } GF_ChunkLargeOffsetBox;\r
917 \r
918 typedef struct\r
919 {\r
920         u32 firstChunk;\r
921         u32 nextChunk;\r
922         u32 samplesPerChunk;\r
923         u32 sampleDescriptionIndex;\r
924         u8 isEdited;\r
925 } GF_StscEntry;\r
926 \r
927 typedef struct\r
928 {\r
929         GF_ISOM_FULL_BOX\r
930         GF_StscEntry *entries;\r
931         u32 alloc_size, nb_entries;\r
932 \r
933         /*0-based cache for READ. In WRITE mode, we always have 1 sample per chunk so no need for a cache*/\r
934         u32 currentIndex;\r
935         /*first sample number in this chunk*/\r
936         u32 firstSampleInCurrentChunk;\r
937         u32 currentChunk;\r
938         u32 ghostNumber;\r
939 } GF_SampleToChunkBox;\r
940 \r
941 typedef struct\r
942 {\r
943         GF_ISOM_FULL_BOX\r
944         u32 alloc_size, nb_entries;\r
945         u32 *sampleNumbers;\r
946         /*cache for READ mode (in write we realloc no matter what)*/\r
947         u32 r_LastSyncSample;\r
948         /*0-based index in the array*/\r
949         u32 r_LastSampleIndex;\r
950 } GF_SyncSampleBox;\r
951 \r
952 typedef struct\r
953 {\r
954         u32 shadowedSampleNumber;\r
955         s32 syncSampleNumber;\r
956 } GF_StshEntry;\r
957 \r
958 typedef struct\r
959 {\r
960         GF_ISOM_FULL_BOX\r
961         GF_List *entries;\r
962         /*Cache for read mode*/\r
963         u32 r_LastEntryIndex;\r
964         u32 r_LastFoundSample;\r
965 } GF_ShadowSyncBox;\r
966 \r
967 typedef struct\r
968 {\r
969         GF_ISOM_FULL_BOX\r
970         u32 nb_entries;\r
971         u16 *priorities;\r
972 } GF_DegradationPriorityBox;\r
973 \r
974 typedef struct\r
975 {\r
976         GF_ISOM_FULL_BOX\r
977         u32 SampleCount;\r
978         u8 *padbits;\r
979 } GF_PaddingBitsBox;\r
980 \r
981 typedef struct\r
982 {\r
983         GF_ISOM_FULL_BOX\r
984         u32 sampleCount;\r
985         /*each dep type is packed on 1 byte*/\r
986         u8 *sample_info;\r
987 } GF_SampleDependencyTypeBox;\r
988 \r
989 \r
990 typedef struct\r
991 {\r
992         GF_ISOM_BOX\r
993         GF_TimeToSampleBox *TimeToSample;\r
994         GF_CompositionOffsetBox *CompositionOffset;\r
995         GF_SyncSampleBox *SyncSample;\r
996         GF_SampleDescriptionBox *SampleDescription;\r
997         GF_SampleSizeBox *SampleSize;\r
998         GF_SampleToChunkBox *SampleToChunk;\r
999         /*untyped, to handle 32 bits and 64 bits chunkOffsets*/\r
1000         GF_Box *ChunkOffset;\r
1001         GF_ShadowSyncBox *ShadowSync;\r
1002         GF_DegradationPriorityBox *DegradationPriority;\r
1003         GF_PaddingBitsBox *PaddingBits;\r
1004         GF_SampleDependencyTypeBox *SampleDep;\r
1005         GF_SampleFragmentBox *Fragments;\r
1006 \r
1007         u32 MaxSamplePerChunk;\r
1008         u16 groupID;\r
1009         u16 trackPriority;\r
1010         u32 currentEntryIndex;\r
1011 } GF_SampleTableBox;\r
1012 \r
1013 typedef struct __tag_media_info_box\r
1014 {\r
1015         GF_ISOM_BOX\r
1016         GF_DataInformationBox *dataInformation;\r
1017         GF_SampleTableBox *sampleTable;\r
1018         GF_Box *InfoHeader;\r
1019         struct __tag_data_map *dataHandler;\r
1020         u32 dataEntryIndex;\r
1021         GF_List *boxes;\r
1022 } GF_MediaInformationBox;\r
1023 \r
1024 \r
1025 typedef struct\r
1026 {\r
1027         GF_ISOM_BOX\r
1028         char *data;\r
1029         u32 dataSize;\r
1030 } GF_FreeSpaceBox;\r
1031 \r
1032 typedef struct\r
1033 {\r
1034         GF_ISOM_FULL_BOX\r
1035         char packedLanguageCode[4];\r
1036         char *notice;\r
1037 } GF_CopyrightBox;\r
1038 \r
1039 \r
1040 typedef struct\r
1041 {\r
1042         char *name;\r
1043         u64 start_time;\r
1044 } GF_ChapterEntry;\r
1045 \r
1046 typedef struct\r
1047 {\r
1048         GF_ISOM_FULL_BOX\r
1049         GF_List *list;\r
1050 } GF_ChapterListBox;\r
1051 \r
1052 typedef struct\r
1053 {\r
1054         GF_ISOM_BOX\r
1055         u32 reference_type;\r
1056         u32 trackIDCount;\r
1057         u32 *trackIDs;\r
1058 } GF_TrackReferenceTypeBox;\r
1059 \r
1060 typedef struct\r
1061 {\r
1062         GF_ISOM_BOX\r
1063         u32 majorBrand;\r
1064         u32 minorVersion;\r
1065         u32 altCount;\r
1066         u32 *altBrand;\r
1067 } GF_FileTypeBox;\r
1068 \r
1069 typedef struct\r
1070 {\r
1071         GF_ISOM_FULL_BOX\r
1072         u32 *rates;\r
1073         u32 *times;\r
1074         u32 count;\r
1075 } GF_ProgressiveDownloadBox;\r
1076 \r
1077 \r
1078 /*\r
1079         3GPP streaming text boxes\r
1080 */\r
1081 \r
1082 typedef struct\r
1083 {\r
1084         GF_ISOM_BOX\r
1085         u32 entry_count;\r
1086         GF_FontRecord *fonts;\r
1087 } GF_FontTableBox;\r
1088 \r
1089 typedef struct\r
1090 {\r
1091         GF_ISOM_SAMPLE_ENTRY_FIELDS                             \\r
1092         u32 displayFlags;\r
1093         s8 horizontal_justification;\r
1094         s8 vertical_justification;\r
1095         /*ARGB*/\r
1096         u32 back_color;\r
1097         GF_BoxRecord default_box; \r
1098         GF_StyleRecord  default_style;\r
1099         GF_FontTableBox *font_table;\r
1100 } GF_TextSampleEntryBox;\r
1101 \r
1102 typedef struct\r
1103 {\r
1104         GF_ISOM_BOX\r
1105         u32 entry_count;\r
1106         GF_StyleRecord *styles;\r
1107 } GF_TextStyleBox;\r
1108 \r
1109 typedef struct\r
1110 {\r
1111         GF_ISOM_BOX\r
1112         u16 startcharoffset;\r
1113         u16 endcharoffset; \r
1114 } GF_TextHighlightBox;\r
1115 \r
1116 typedef struct\r
1117 {\r
1118         GF_ISOM_BOX\r
1119         /*ARGB*/\r
1120         u32 hil_color;\r
1121 } GF_TextHighlightColorBox;\r
1122 \r
1123 typedef struct\r
1124 {\r
1125         u32 highlight_endtime;\r
1126         u16 start_charoffset;\r
1127         u16 end_charoffset;\r
1128 } KaraokeRecord;\r
1129 \r
1130 typedef struct\r
1131 {\r
1132         GF_ISOM_BOX\r
1133         u32 highlight_starttime;\r
1134         u16 nb_entries;\r
1135         KaraokeRecord *records;\r
1136 } GF_TextKaraokeBox;\r
1137 \r
1138 typedef struct\r
1139 {\r
1140         GF_ISOM_BOX\r
1141         u32 scroll_delay;\r
1142 } GF_TextScrollDelayBox;\r
1143 \r
1144 typedef struct\r
1145 {\r
1146         GF_ISOM_BOX\r
1147         u16 startcharoffset;\r
1148         u16 endcharoffset;\r
1149         char *URL;\r
1150         char *URL_hint;\r
1151 } GF_TextHyperTextBox;\r
1152 \r
1153 typedef struct\r
1154 {\r
1155         GF_ISOM_BOX\r
1156         GF_BoxRecord box;\r
1157 } GF_TextBoxBox;\r
1158 \r
1159 typedef struct\r
1160 {\r
1161         GF_ISOM_BOX\r
1162         u16 startcharoffset;\r
1163         u16 endcharoffset;\r
1164 } GF_TextBlinkBox;\r
1165 \r
1166 typedef struct\r
1167 {\r
1168         GF_ISOM_BOX\r
1169         u8 wrap_flag;\r
1170 } GF_TextWrapBox;\r
1171 \r
1172 typedef struct\r
1173 {\r
1174         GF_ISOM_FULL_BOX\r
1175         u32 switchGroup;\r
1176         u32 *attributeList;\r
1177         u32 attributeListCount;\r
1178 } GF_TrackSelectionBox;\r
1179 \r
1180 /*\r
1181         MPEG-21 extensions\r
1182 */\r
1183 typedef struct\r
1184 {\r
1185         GF_ISOM_FULL_BOX\r
1186         u32 xml_length;\r
1187         char *xml;\r
1188 } GF_XMLBox;\r
1189 \r
1190 typedef struct\r
1191 {\r
1192         GF_ISOM_FULL_BOX\r
1193         u32 data_length;\r
1194         char *data;\r
1195 } GF_BinaryXMLBox;\r
1196 \r
1197 typedef struct\r
1198 {\r
1199         u64 extent_offset;\r
1200         u64 extent_length;\r
1201 #ifndef GPAC_READ_OLNLY\r
1202         /*for storage only*/\r
1203         u64 original_extent_offset;\r
1204 #endif\r
1205 } GF_ItemExtentEntry;\r
1206 \r
1207 typedef struct \r
1208 {\r
1209         u16 item_ID;\r
1210         u16 data_reference_index;\r
1211         u64 base_offset;\r
1212 #ifndef GPAC_READ_OLNLY\r
1213         /*for storage only*/\r
1214         u64 original_base_offset;\r
1215 #endif\r
1216         GF_List *extent_entries;\r
1217 } GF_ItemLocationEntry;\r
1218 \r
1219 typedef struct\r
1220 {\r
1221         GF_ISOM_FULL_BOX\r
1222         u8 offset_size;\r
1223     u8 length_size;\r
1224         u8 base_offset_size;\r
1225         GF_List *location_entries;\r
1226 } GF_ItemLocationBox;\r
1227 \r
1228 typedef struct \r
1229 {\r
1230         GF_ISOM_FULL_BOX\r
1231         u16 item_ID;\r
1232 } GF_PrimaryItemBox;\r
1233 \r
1234 typedef struct\r
1235 {\r
1236         GF_ISOM_FULL_BOX\r
1237         GF_List *protection_information;\r
1238 } GF_ItemProtectionBox;\r
1239 \r
1240 typedef struct \r
1241 {\r
1242         GF_ISOM_FULL_BOX\r
1243         u16 item_ID;\r
1244         u16 item_protection_index;\r
1245         /*zero-terminated strings*/\r
1246         char *item_name;\r
1247         char *content_type;\r
1248         char *content_encoding;\r
1249         // needed to actually read the resource file, but not written in the MP21 file.\r
1250         char *full_path;\r
1251 } GF_ItemInfoEntryBox;\r
1252 \r
1253 typedef struct\r
1254 {\r
1255         GF_ISOM_FULL_BOX\r
1256         GF_List *item_infos;\r
1257 } GF_ItemInfoBox;\r
1258 \r
1259 typedef struct\r
1260 {\r
1261         GF_ISOM_BOX\r
1262         u32 data_format;\r
1263 } GF_OriginalFormatBox;\r
1264 \r
1265 typedef struct\r
1266 {\r
1267         GF_ISOM_FULL_BOX\r
1268         u32 scheme_type;\r
1269         u32 scheme_version;\r
1270         char *URI;\r
1271 } GF_SchemeTypeBox;\r
1272 \r
1273 /*ISMACryp specific*/\r
1274 typedef struct\r
1275 {\r
1276         GF_ISOM_FULL_BOX\r
1277         /*zero-terminated string*/\r
1278         char *URI;\r
1279 } GF_ISMAKMSBox;\r
1280 \r
1281 /*ISMACryp specific*/\r
1282 typedef struct __isma_format_box\r
1283 {\r
1284         GF_ISOM_FULL_BOX\r
1285         u8 selective_encryption;\r
1286         u8 key_indicator_length;\r
1287         u8 IV_length;\r
1288 } GF_ISMASampleFormatBox;\r
1289 \r
1290 typedef struct\r
1291 {\r
1292         GF_ISOM_BOX\r
1293         GF_ISMAKMSBox *ikms;\r
1294         GF_ISMASampleFormatBox *isfm;\r
1295         struct __oma_kms_box *okms;\r
1296 } GF_SchemeInformationBox;\r
1297 \r
1298 typedef struct __tag_protect_box\r
1299 {\r
1300         GF_ISOM_BOX\r
1301         GF_OriginalFormatBox *original_format;\r
1302         GF_SchemeTypeBox *scheme_type;\r
1303         GF_SchemeInformationBox *info;\r
1304 } GF_ProtectionInfoBox;\r
1305 \r
1306 typedef struct\r
1307 {\r
1308         GF_ISOM_FULL_BOX\r
1309         GF_List *descriptors;\r
1310 } GF_IPMPInfoBox;\r
1311 \r
1312 typedef struct\r
1313 {\r
1314         GF_ISOM_FULL_BOX\r
1315         GF_IPMP_ToolList *ipmp_tools;\r
1316         GF_List *descriptors;\r
1317 } GF_IPMPControlBox;\r
1318 \r
1319 \r
1320 typedef struct __tag_meta_box\r
1321 {\r
1322         GF_ISOM_FULL_BOX\r
1323         GF_HandlerBox *handler; \r
1324         GF_PrimaryItemBox *primary_resource;\r
1325         GF_DataInformationBox *file_locations;\r
1326         GF_ItemLocationBox *item_locations;\r
1327         GF_ItemProtectionBox *protections;\r
1328         GF_ItemInfoBox *item_infos;\r
1329         GF_IPMPControlBox *IPMP_control;\r
1330         GF_List *other_boxes;\r
1331 } GF_MetaBox;\r
1332 \r
1333 \r
1334 \r
1335 \r
1336 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
1337 \r
1338 /*V2 boxes - Movie Fragments*/\r
1339 \r
1340 typedef struct\r
1341 {\r
1342         GF_ISOM_FULL_BOX\r
1343         u64 fragment_duration;\r
1344 } GF_MovieExtendsHeaderBox;\r
1345 \r
1346 \r
1347 typedef struct __tag_mvex_box\r
1348 {\r
1349         GF_ISOM_BOX\r
1350         GF_List *TrackExList;\r
1351         GF_MovieExtendsHeaderBox *mehd;\r
1352         GF_ISOFile *mov;\r
1353 } GF_MovieExtendsBox;\r
1354 \r
1355 /*the TrackExtends contains default values for the track fragments*/\r
1356 typedef struct\r
1357 {\r
1358         GF_ISOM_FULL_BOX\r
1359         u32 trackID;\r
1360         u32 def_sample_desc_index;\r
1361         u32 def_sample_duration;\r
1362         u32 def_sample_size;\r
1363         u32 def_sample_flags;\r
1364         GF_TrackBox *track;\r
1365 } GF_TrackExtendsBox;\r
1366 \r
1367 /*indicates the seq num of this fragment*/\r
1368 typedef struct\r
1369 {\r
1370         GF_ISOM_FULL_BOX\r
1371         u32 sequence_number;\r
1372 } GF_MovieFragmentHeaderBox;\r
1373 \r
1374 /*MovieFragment is a container IN THE FILE, contains 1 fragment*/\r
1375 typedef struct\r
1376 {\r
1377         GF_ISOM_BOX\r
1378         GF_MovieFragmentHeaderBox *mfhd;\r
1379         GF_List *TrackList;\r
1380         GF_ISOFile *mov;\r
1381 } GF_MovieFragmentBox;\r
1382 \r
1383 \r
1384 /*FLAGS for TRAF*/\r
1385 enum\r
1386 {\r
1387         GF_ISOM_TRAF_BASE_OFFSET        =       0x01,\r
1388         GF_ISOM_TRAF_SAMPLE_DESC        =       0x02,\r
1389         GF_ISOM_TRAF_SAMPLE_DUR =       0x08,\r
1390         GF_ISOM_TRAF_SAMPLE_SIZE        =       0x10,\r
1391         GF_ISOM_TRAF_SAMPLE_FLAGS       =       0x20,\r
1392         GF_ISOM_TRAF_DUR_EMPTY  =       0x10000\r
1393 };\r
1394 \r
1395 typedef struct\r
1396 {\r
1397         GF_ISOM_FULL_BOX\r
1398         u32 trackID;\r
1399         /* all the following are optional fields */\r
1400         u64 base_data_offset;\r
1401         u32 sample_desc_index;\r
1402         u32 def_sample_duration;\r
1403         u32 def_sample_size;\r
1404         u32 def_sample_flags;\r
1405         u32 EmptyDuration;\r
1406         u8 IFrameSwitching;\r
1407 } GF_TrackFragmentHeaderBox;\r
1408 \r
1409 typedef struct\r
1410 {\r
1411         GF_ISOM_BOX\r
1412         GF_TrackFragmentHeaderBox *tfhd;\r
1413         GF_List *TrackRuns;\r
1414         /*keep a pointer to default flags*/\r
1415         GF_TrackExtendsBox *trex;\r
1416         /*when data caching is on*/\r
1417         u32 DataCache;\r
1418 } GF_TrackFragmentBox;\r
1419 \r
1420 /*FLAGS for TRUN : specify what is written in the SampleTable of TRUN*/\r
1421 enum\r
1422 {\r
1423         GF_ISOM_TRUN_DATA_OFFSET        = 0x01,\r
1424         GF_ISOM_TRUN_FIRST_FLAG         = 0x04,\r
1425         GF_ISOM_TRUN_DURATION           = 0x100,\r
1426         GF_ISOM_TRUN_SIZE                       = 0x200,\r
1427         GF_ISOM_TRUN_FLAGS                      = 0x400,\r
1428         GF_ISOM_TRUN_CTS_OFFSET         = 0x800\r
1429 };\r
1430 \r
1431 typedef struct\r
1432 {\r
1433         GF_ISOM_FULL_BOX\r
1434         u32 sample_count;\r
1435         /*the following are optional fields */\r
1436         s32 data_offset;\r
1437         u32 first_sample_flags;\r
1438         /*can be empty*/\r
1439         GF_List *entries;\r
1440 \r
1441         /*in write mode with data caching*/\r
1442         GF_BitStream *cache;\r
1443 } GF_TrackFragmentRunBox;\r
1444 \r
1445 typedef struct\r
1446 {\r
1447         u32 Duration;\r
1448         u32 size;\r
1449         u32 flags;\r
1450         u32 CTS_Offset;\r
1451 } GF_TrunEntry;\r
1452 \r
1453 #endif\r
1454 \r
1455 \r
1456 /*RTP Hint Track Sample Entry*/\r
1457 typedef struct\r
1458 {\r
1459         GF_ISOM_SAMPLE_ENTRY_FIELDS\r
1460         u16 HintTrackVersion;\r
1461         u16 LastCompatibleVersion;\r
1462         u32 MaxPacketSize;\r
1463         GF_List *HintDataTable;\r
1464         /*this is where we store the current RTP sample in read/write mode*/\r
1465         struct __tag_hint_sample *hint_sample;\r
1466         /*current hint sample in read mode, 1-based (0 is reset)*/\r
1467         u32 cur_sample;\r
1468         u32 pck_sn, ts_offset, ssrc;\r
1469         GF_TrackReferenceTypeBox *hint_ref;\r
1470 } GF_HintSampleEntryBox;\r
1471 \r
1472 \r
1473 typedef struct\r
1474 {\r
1475         GF_ISOM_BOX\r
1476         u32 subType;\r
1477         char *sdpText;\r
1478 } GF_RTPBox;\r
1479 \r
1480 typedef struct\r
1481 {\r
1482         GF_ISOM_BOX\r
1483         char *sdpText;\r
1484 } GF_SDPBox;\r
1485 \r
1486 typedef struct\r
1487 {\r
1488         GF_ISOM_BOX\r
1489         s32 timeOffset;\r
1490 } GF_RTPOBox;\r
1491 \r
1492 typedef struct\r
1493 {\r
1494         GF_ISOM_BOX\r
1495         /*contains GF_SDPBox if in track, GF_RTPBox if in movie*/\r
1496         GF_Box *SDP;\r
1497         GF_List *boxList;\r
1498 } GF_HintTrackInfoBox;\r
1499 \r
1500 typedef struct\r
1501 {\r
1502         GF_ISOM_BOX\r
1503         u8 reserved;\r
1504         u8 prefered;\r
1505         u8 required;\r
1506 } GF_RelyHintBox;\r
1507 \r
1508 /***********************************************************\r
1509                         data entry tables for RTP\r
1510 ***********************************************************/\r
1511 typedef struct\r
1512 {\r
1513         GF_ISOM_BOX\r
1514         u32 timeScale;\r
1515 } GF_TSHintEntryBox;\r
1516 \r
1517 typedef struct\r
1518 {\r
1519         GF_ISOM_BOX\r
1520         u32 TimeOffset; \r
1521 } GF_TimeOffHintEntryBox;\r
1522 \r
1523 typedef struct\r
1524 {\r
1525         GF_ISOM_BOX\r
1526         u32 SeqOffset;\r
1527 } GF_SeqOffHintEntryBox;\r
1528 \r
1529 \r
1530 \r
1531 /***********************************************************\r
1532                         hint track information boxes for RTP\r
1533 ***********************************************************/\r
1534 \r
1535 /*Total number of bytes that will be sent, including 12-byte RTP headers, but not including any network headers*/\r
1536 typedef struct\r
1537 {\r
1538         GF_ISOM_BOX\r
1539         u64 nbBytes;\r
1540 } GF_TRPYBox;\r
1541 \r
1542 /*32-bits version of trpy used in Darwin*/\r
1543 typedef struct\r
1544 {\r
1545         GF_ISOM_BOX\r
1546         u32 nbBytes;\r
1547 } GF_TOTLBox;\r
1548 \r
1549 /*Total number of network packets that will be sent*/\r
1550 typedef struct\r
1551 {\r
1552         GF_ISOM_BOX\r
1553         u64 nbPackets;\r
1554 } GF_NUMPBox;\r
1555 \r
1556 /*32-bits version of nump used in Darwin*/\r
1557 typedef struct\r
1558 {\r
1559         GF_ISOM_BOX\r
1560         u32 nbPackets;\r
1561 } GF_NPCKBox;\r
1562 \r
1563 \r
1564 /*Total number of bytes that will be sent, not including 12-byte RTP headers*/\r
1565 typedef struct\r
1566 {\r
1567         GF_ISOM_BOX\r
1568         u64 nbBytes;\r
1569 } GF_NTYLBox;\r
1570 \r
1571 /*32-bits version of tpyl used in Darwin*/\r
1572 typedef struct\r
1573 {\r
1574         GF_ISOM_BOX\r
1575         u32 nbBytes;\r
1576 } GF_TPAYBox;\r
1577 \r
1578 /*Maximum data rate in bits per second.*/\r
1579 typedef struct\r
1580 {\r
1581         GF_ISOM_BOX\r
1582         u32 granularity;\r
1583         u32 maxDataRate;\r
1584 } GF_MAXRBox;\r
1585 \r
1586 \r
1587 /*Total number of bytes from the media track to be sent*/\r
1588 typedef struct\r
1589 {\r
1590         GF_ISOM_BOX\r
1591         u64 nbBytes;\r
1592 } GF_DMEDBox;\r
1593 \r
1594 /*Number of bytes of immediate data to be sent*/\r
1595 typedef struct\r
1596 {\r
1597         GF_ISOM_BOX\r
1598         u64 nbBytes;\r
1599 } GF_DIMMBox;\r
1600 \r
1601 \r
1602 /*Number of bytes of repeated data to be sent*/\r
1603 typedef struct\r
1604 {\r
1605         GF_ISOM_BOX\r
1606         u64 nbBytes;\r
1607 } GF_DREPBox;\r
1608 \r
1609 /*Smallest relative transmission time, in milliseconds. signed integer for smoothing*/\r
1610 typedef struct\r
1611 {\r
1612         GF_ISOM_BOX\r
1613         s32 minTime;\r
1614 } GF_TMINBox;\r
1615 \r
1616 /*Largest relative transmission time, in milliseconds.*/\r
1617 typedef struct\r
1618 {\r
1619         GF_ISOM_BOX\r
1620         s32 maxTime;\r
1621 } GF_TMAXBox;\r
1622 \r
1623 /*Largest packet, in bytes, including 12-byte RTP header*/\r
1624 typedef struct\r
1625 {\r
1626         GF_ISOM_BOX\r
1627         u32 maxSize;\r
1628 } GF_PMAXBox;\r
1629 \r
1630 /*Longest packet duration, in milliseconds*/\r
1631 typedef struct\r
1632 {\r
1633         GF_ISOM_BOX\r
1634         u32 maxDur;\r
1635 } GF_DMAXBox;\r
1636 \r
1637 /*32-bit payload type number, followed by rtpmap payload string */\r
1638 typedef struct\r
1639 {\r
1640         GF_ISOM_BOX\r
1641         u32 payloadCode;\r
1642         char *payloadString;\r
1643 } GF_PAYTBox;\r
1644 \r
1645 \r
1646 typedef struct\r
1647 {\r
1648         GF_ISOM_BOX\r
1649         char *string;\r
1650 } GF_NameBox;\r
1651 \r
1652 typedef struct\r
1653 {\r
1654         GF_ISOM_BOX\r
1655         GF_List *dataRates;\r
1656         GF_List *boxList;\r
1657 } GF_HintInfoBox;\r
1658 \r
1659 /*Apple extension*/\r
1660 \r
1661 typedef struct\r
1662 {\r
1663         GF_ISOM_FULL_BOX\r
1664         u32 reserved;\r
1665         char *data;\r
1666         u32 dataSize;\r
1667 } GF_DataBox;\r
1668 \r
1669 typedef struct\r
1670 {\r
1671         GF_ISOM_BOX\r
1672         GF_DataBox *data;\r
1673 } GF_ListItemBox;\r
1674 \r
1675 typedef struct\r
1676 {\r
1677         GF_ISOM_BOX\r
1678         GF_List *tags;\r
1679 } GF_ItemListBox;\r
1680 \r
1681 /*OMA (P)DCF extensions*/\r
1682 typedef struct\r
1683 {\r
1684         GF_ISOM_FULL_BOX\r
1685         u8 EncryptionMethod;\r
1686         u8 PaddingScheme;\r
1687         u64 PlaintextLength;\r
1688         char *ContentID;\r
1689         char *RightsIssuerURL;\r
1690         char *TextualHeaders;\r
1691         u32 TextualHeadersLen;\r
1692         GF_List *ExtendedHeaders;\r
1693 } GF_OMADRMCommonHeaderBox;\r
1694 \r
1695 typedef struct\r
1696 {\r
1697         GF_ISOM_FULL_BOX\r
1698         u8 GKEncryptionMethod;\r
1699         char *GroupID;\r
1700         u16 GKLength;\r
1701         char *GroupKey;\r
1702 } GF_OMADRMGroupIDBox;\r
1703 \r
1704 typedef struct\r
1705 {\r
1706         GF_ISOM_BOX\r
1707         GF_List *boxes;\r
1708 } GF_OMADRMMutableInformationBox;\r
1709 \r
1710 typedef struct\r
1711 {\r
1712         GF_ISOM_FULL_BOX\r
1713         char TransactionID[16];\r
1714 } GF_OMADRMTransactionTrackingBox;\r
1715 \r
1716 typedef struct\r
1717 {\r
1718         GF_ISOM_FULL_BOX\r
1719         char *oma_ro;\r
1720         u32 oma_ro_size;\r
1721 } GF_OMADRMRightsObjectBox;\r
1722 \r
1723 /*identical*/\r
1724 typedef struct __isma_format_box GF_OMADRMAUFormatBox;\r
1725 \r
1726 typedef struct __oma_kms_box\r
1727 {\r
1728         GF_ISOM_FULL_BOX\r
1729         GF_OMADRMCommonHeaderBox *hdr;\r
1730         GF_OMADRMAUFormatBox *fmt;\r
1731 } GF_OMADRMKMSBox;\r
1732 \r
1733 \r
1734 \r
1735 /*\r
1736                 Data Map (media storage) stuff\r
1737 */\r
1738 \r
1739 /*regular file IO*/\r
1740 #define GF_ISOM_DATA_FILE                       0x01\r
1741 /*File Mapaing object, read-only mode on complete files (no download)*/\r
1742 #define GF_ISOM_DATA_FILE_MAPPING               0x02\r
1743 /*External file object. Needs implementation*/\r
1744 #define GF_ISOM_DATA_FILE_EXTERN                0x03\r
1745 \r
1746 /*Data Map modes*/\r
1747 enum\r
1748 {\r
1749         /*read mode*/\r
1750         GF_ISOM_DATA_MAP_READ = 1,\r
1751         /*write mode*/\r
1752         GF_ISOM_DATA_MAP_WRITE = 2,\r
1753         /*the following modes are just ways of signaling extended functionalities\r
1754         edit mode, to make sure the file is here, set to GF_ISOM_DATA_MAP_READ afterwards*/\r
1755         GF_ISOM_DATA_MAP_EDIT = 3,\r
1756         /*read-only access to the movie file: we create a file mapping object\r
1757         mode is set to GF_ISOM_DATA_MAP_READ afterwards*/\r
1758         GF_ISOM_DATA_MAP_READ_ONLY = 4,\r
1759 };\r
1760 \r
1761 /*this is the DataHandler structure each data handler has its own bitstream*/\r
1762 #define GF_ISOM_BASE_DATA_HANDLER       \\r
1763         u8      type;           \\r
1764         u64     curPos;         \\r
1765         u8      mode;           \\r
1766         GF_BitStream *bs;\r
1767 \r
1768 typedef struct __tag_data_map\r
1769 {\r
1770         GF_ISOM_BASE_DATA_HANDLER\r
1771 } GF_DataMap;\r
1772 \r
1773 typedef struct \r
1774 {\r
1775         GF_ISOM_BASE_DATA_HANDLER\r
1776         FILE *stream;\r
1777         Bool last_acces_was_read;\r
1778 #ifndef GPAC_READ_ONLY\r
1779         char *temp_file;\r
1780 #endif\r
1781 } GF_FileDataMap;\r
1782 \r
1783 /*file mapping handler. used if supported, only on read mode for complete files  (not in file download)*/\r
1784 typedef struct \r
1785 {\r
1786         GF_ISOM_BASE_DATA_HANDLER\r
1787         char *name;\r
1788         u32 file_size;\r
1789         char *byte_map;\r
1790         u32 byte_pos;\r
1791 } GF_FileMappingDataMap;\r
1792 \r
1793 GF_Err gf_isom_datamap_new(const char *location, const char *parentPath, u8 mode, GF_DataMap **outDataMap);\r
1794 void gf_isom_datamap_del(GF_DataMap *ptr);\r
1795 GF_Err gf_isom_datamap_open(GF_MediaBox *minf, u32 dataRefIndex, u8 Edit);\r
1796 void gf_isom_datamap_close(GF_MediaInformationBox *minf);\r
1797 u32 gf_isom_datamap_get_data(GF_DataMap *map, char *buffer, u32 bufferLength, u64 Offset);\r
1798 \r
1799 /*File-based data map*/\r
1800 GF_DataMap *gf_isom_fdm_new(const char *sPath, u8 mode);\r
1801 void gf_isom_fdm_del(GF_FileDataMap *ptr);\r
1802 u32 gf_isom_fdm_get_data(GF_FileDataMap *ptr, char *buffer, u32 bufferLength, u64 fileOffset);\r
1803 \r
1804 #ifndef GPAC_READ_ONLY\r
1805 GF_DataMap *gf_isom_fdm_new_temp(const char *sTempPath);\r
1806 #endif\r
1807 \r
1808 /*file-mapping, read only*/\r
1809 GF_DataMap *gf_isom_fmo_new(const char *sPath, u8 mode);\r
1810 void gf_isom_fmo_del(GF_FileMappingDataMap *ptr);\r
1811 u32 gf_isom_fmo_get_data(GF_FileMappingDataMap *ptr, char *buffer, u32 bufferLength, u64 fileOffset);\r
1812 \r
1813 #ifndef GPAC_READ_ONLY\r
1814 u64 gf_isom_datamap_get_offset(GF_DataMap *map);\r
1815 GF_Err gf_isom_datamap_add_data(GF_DataMap *ptr, char *data, u32 dataSize);\r
1816 #endif  \r
1817 \r
1818 /*\r
1819                 Movie stuff\r
1820 */\r
1821 \r
1822 \r
1823 /*time def for MP4/QT/MJ2K files*/\r
1824 #define GF_ISOM_MAC_TIME_OFFSET 2082758400/*208284480 */\r
1825 \r
1826 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
1827 #define GF_ISOM_FORMAT_FRAG_FLAGS(pad, sync, deg) ( ( (pad) << 17) | ( ( !(sync) ) << 16) | (deg) );\r
1828 #define GF_ISOM_GET_FRAG_PAD(flag) ( (flag) >> 17) & 0x7\r
1829 #define GF_ISOM_GET_FRAG_SYNC(flag) ( ! ( ( (flag) >> 16) & 0x1))\r
1830 #define GF_ISOM_GET_FRAG_DEG(flag)      (flag) & 0x7FFF\r
1831 #endif\r
1832 \r
1833 enum\r
1834 {\r
1835         GF_ISOM_FRAG_WRITE_READY        =       0x01,\r
1836         GF_ISOM_FRAG_READ_DEBUG         =       0x02,\r
1837 };\r
1838 \r
1839 /*this is our movie object*/\r
1840 struct __tag_isom {\r
1841         /*the last fatal error*/\r
1842         GF_Err LastError;\r
1843         /*the original filename*/\r
1844         char *fileName;\r
1845         /*the original file in read/edit, and also used in fragments mode\r
1846         once the first moov has been written\r
1847         Nota: this API doesn't allow fragments BEFORE the MOOV in order\r
1848         to make easily parsable files (note there could be some data (mdat) before\r
1849         the moov*/\r
1850         GF_DataMap *movieFileMap;\r
1851 \r
1852 #ifndef GPAC_READ_ONLY\r
1853         /*the final file name*/\r
1854         char *finalName;\r
1855         /*the file where we store edited samples (for READ_WRITE and WRITE mode only)*/\r
1856         GF_DataMap *editFileMap;\r
1857         /*the interleaving time for dummy mode (in movie TimeScale)*/\r
1858         u32 interleavingTime;\r
1859 #endif\r
1860 \r
1861         u8 openMode;\r
1862         u8 storageMode;\r
1863         /*if true 3GPP text streams are read as MPEG-4 StreamingText*/\r
1864         u8 convert_streaming_text;\r
1865         u8 is_jp2;\r
1866 \r
1867         /*main boxes for fast access*/\r
1868         /*moov*/\r
1869         GF_MovieBox *moov;\r
1870         /*our MDAT box (one and only one when we store the file)*/\r
1871         GF_MediaDataBox *mdat;\r
1872         /*file brand (since v2, NULL means mp4 v1)*/\r
1873         GF_FileTypeBox *brand;\r
1874         /*progressive download info*/\r
1875         GF_ProgressiveDownloadBox *pdin;\r
1876         /*meta box if any*/\r
1877         GF_MetaBox *meta;\r
1878 \r
1879 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
1880         u32 FragmentsFlags, NextMoofNumber;\r
1881         /*active fragment*/\r
1882         GF_MovieFragmentBox *moof;\r
1883         /*in WRITE mode, this is the current MDAT where data is written*/\r
1884         /*in READ mode this is the last valid file position before a gf_isom_box_read failed*/\r
1885         u64 current_top_box_start;\r
1886 #endif\r
1887 \r
1888         /*this contains ALL the root boxes excepts fragments*/\r
1889         GF_List *TopBoxes;\r
1890 \r
1891         /*default track for sync of MPEG4 streams - this is the first accessed stream without OCR info - only set in READ mode*/\r
1892         s32 es_id_default_sync;\r
1893 };\r
1894 \r
1895 /*time function*/\r
1896 u64 gf_isom_get_mp4time();\r
1897 /*set the last error of the file. if file is NULL, set the static error (used for IO errors*/\r
1898 void gf_isom_set_last_error(GF_ISOFile *the_file, GF_Err error);\r
1899 GF_Err gf_isom_parse_movie_boxes(GF_ISOFile *mov, u64 *bytesMissing);\r
1900 GF_ISOFile *gf_isom_new_movie();\r
1901 /*Movie and Track access functions*/\r
1902 GF_TrackBox *gf_isom_get_track_from_file(GF_ISOFile *the_file, u32 trackNumber);\r
1903 GF_TrackBox *gf_isom_get_track(GF_MovieBox *moov, u32 trackNumber);\r
1904 GF_TrackBox *gf_isom_get_track_from_id(GF_MovieBox *moov, u32 trackID);\r
1905 u32 gf_isom_get_tracknum_from_id(GF_MovieBox *moov, u32 trackID);\r
1906 /*open a movie*/\r
1907 GF_ISOFile *gf_isom_open_file(const char *fileName, u32 OpenMode, const char *tmp_dir);\r
1908 /*close and delete a movie*/\r
1909 void gf_isom_delete_movie(GF_ISOFile *mov);\r
1910 /*StreamDescription reconstruction Functions*/\r
1911 GF_Err GetESD(GF_MovieBox *moov, u32 trackID, u32 StreamDescIndex, GF_ESD **outESD);\r
1912 GF_Err GetESDForTime(GF_MovieBox *moov, u32 trackID, u64 CTS, GF_ESD **outESD);\r
1913 GF_Err Media_GetSampleDesc(GF_MediaBox *mdia, u32 SampleDescIndex, GF_SampleEntryBox **out_entry, u32 *dataRefIndex);\r
1914 GF_Err Media_GetSampleDescIndex(GF_MediaBox *mdia, u64 DTS, u32 *sampleDescIndex);\r
1915 /*get esd for given sample desc - \r
1916         @true_desc_only: if true doesn't emulate desc and returns native ESD,\r
1917                                 otherwise emulates if needed/possible (TimedText) and return a hard copy of the desc\r
1918 */\r
1919 GF_Err Media_GetESD(GF_MediaBox *mdia, u32 sampleDescIndex, GF_ESD **esd, Bool true_desc_only);\r
1920 Bool Track_IsMPEG4Stream(u32 HandlerType);\r
1921 Bool IsMP4Description(u32 entryType);\r
1922 /*Find a reference of a given type*/\r
1923 GF_Err Track_FindRef(GF_TrackBox *trak, u32 ReferenceType, GF_TrackReferenceTypeBox **dpnd);\r
1924 /*Time and sample*/\r
1925 GF_Err GetMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *MediaTime, s64 *SegmentStartTime, s64 *MediaOffset, u8 *useEdit);\r
1926 GF_Err Media_GetSample(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample **samp, u32 *sampleDescriptionIndex, Bool no_data, u64 *out_offset);\r
1927 GF_Err Media_CheckDataEntry(GF_MediaBox *mdia, u32 dataEntryIndex);\r
1928 GF_Err Media_FindSyncSample(GF_SampleTableBox *stbl, u32 searchFromTime, u32 *sampleNumber, u8 mode);\r
1929 GF_Err Media_RewriteODFrame(GF_MediaBox *mdia, GF_ISOSample *sample);\r
1930 GF_Err Media_FindDataRef(GF_DataReferenceBox *dref, char *URLname, char *URNname, u32 *dataRefIndex);\r
1931 Bool Media_IsSelfContained(GF_MediaBox *mdia, u32 StreamDescIndex);\r
1932 \r
1933 /*check the TimeToSample for the given time and return the Sample number\r
1934 if the entry is not found, return the closest sampleNumber in prevSampleNumber and 0 in sampleNumber\r
1935 if the DTS required is after all DTSs in the list, set prevSampleNumber and SampleNumber to 0\r
1936 useCTS specifies that we're looking for a composition time\r
1937 */\r
1938 GF_Err findEntryForTime(GF_SampleTableBox *stbl, u64 DTS, u8 useCTS, u32 *sampleNumber, u32 *prevSampleNumber);\r
1939 /*Reading of the sample tables*/\r
1940 GF_Err stbl_GetSampleSize(GF_SampleSizeBox *stsz, u32 SampleNumber, u32 *Size);\r
1941 GF_Err stbl_GetSampleCTS(GF_CompositionOffsetBox *ctts, u32 SampleNumber, u32 *CTSoffset);\r
1942 GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS);\r
1943 /*find a RAP or set the prev / next RAPs if vars are passed*/\r
1944 GF_Err stbl_GetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 *IsRAP, u32 *prevRAP, u32 *nextRAP);\r
1945 GF_Err stbl_GetSampleInfos(GF_SampleTableBox *stbl, u32 sampleNumber, u64 *offset, u32 *chunkNumber, u32 *descIndex, u8 *isEdited);\r
1946 GF_Err stbl_GetSampleShadow(GF_ShadowSyncBox *stsh, u32 *sampleNumber, u32 *syncNum);\r
1947 GF_Err stbl_GetPaddingBits(GF_PaddingBitsBox *padb, u32 SampleNumber, u8 *PadBits);\r
1948 u32 stbl_GetSampleFragmentCount(GF_SampleFragmentBox *stsf, u32 sampleNumber);\r
1949 u32 stbl_GetSampleFragmentSize(GF_SampleFragmentBox *stsf, u32 sampleNumber, u32 FragmentIndex);\r
1950 GF_Err stbl_GetSampleDepType(GF_SampleDependencyTypeBox *stbl, u32 SampleNumber, u32 *dependsOn, u32 *dependedOn, u32 *redundant);\r
1951 \r
1952 /*unpack sample2chunk and chunk offset so that we have 1 sample per chunk (edition mode only)*/\r
1953 GF_Err stbl_UnpackOffsets(GF_SampleTableBox *stbl);\r
1954 GF_Err SetTrackDuration(GF_TrackBox *trak);\r
1955 GF_Err Media_SetDuration(GF_TrackBox *trak);\r
1956 \r
1957 /*rewrites 3GP samples desc as MPEG-4 ESD*/\r
1958 GF_Err gf_isom_get_ttxt_esd(GF_MediaBox *mdia, GF_ESD **out_esd);\r
1959 /*inserts TTU header - only used when conversion to StreamingText is on*/\r
1960 GF_Err gf_isom_rewrite_text_sample(GF_ISOSample *samp, u32 sampleDescriptionIndex, u32 sample_dur);\r
1961 \r
1962 GF_UserDataMap *udta_getEntry(GF_UserDataBox *ptr, u32 box_type, bin128 *uuid);\r
1963 \r
1964 #ifndef GPAC_READ_ONLY\r
1965 \r
1966 GF_Err FlushCaptureMode(GF_ISOFile *movie);\r
1967 GF_Err CanAccessMovie(GF_ISOFile *movie, u32 Mode);\r
1968 GF_ISOFile *gf_isom_create_movie(const char *fileName, u32 OpenMode, const char *tmp_dir);\r
1969 void gf_isom_insert_moov(GF_ISOFile *file);\r
1970 \r
1971 GF_Err WriteToFile(GF_ISOFile *movie);\r
1972 GF_Err Track_SetStreamDescriptor(GF_TrackBox *trak, u32 StreamDescriptionIndex, u32 DataReferenceIndex, GF_ESD *esd, u32 *outStreamIndex);\r
1973 u8 RequestTrack(GF_MovieBox *moov, u32 TrackID);\r
1974 /*Track-Media setup*/\r
1975 GF_Err NewMedia(GF_MediaBox **mdia, u32 MediaType, u32 TimeScale);\r
1976 GF_Err Media_ParseODFrame(GF_MediaBox *mdia, GF_ISOSample *sample, GF_ISOSample **od_samp);\r
1977 GF_Err Media_AddSample(GF_MediaBox *mdia, u64 data_offset, GF_ISOSample *sample, u32 StreamDescIndex, u32 syncShadowNumber);\r
1978 GF_Err Media_CreateDataRef(GF_DataReferenceBox *dref, char *URLname, char *URNname, u32 *dataRefIndex);\r
1979 /*update a media sample. ONLY in edit mode*/\r
1980 GF_Err Media_UpdateSample(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample *sample, Bool data_only);\r
1981 GF_Err Media_UpdateSampleReference(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample *sample, u64 data_offset);\r
1982 /*addition in the sample tables*/\r
1983 GF_Err stbl_AddDTS(GF_SampleTableBox *stbl, u64 DTS, u32 *sampleNumber, u32 LastAUDefDuration);\r
1984 GF_Err stbl_AddCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 CTSoffset);\r
1985 GF_Err stbl_AddSize(GF_SampleSizeBox *stsz, u32 sampleNumber, u32 size);\r
1986 GF_Err stbl_AddRAP(GF_SyncSampleBox *stss, u32 sampleNumber);\r
1987 GF_Err stbl_AddShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber, u32 shadowNumber);\r
1988 GF_Err stbl_AddChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u32 StreamDescIndex, u64 offset);\r
1989 /*NB - no add for padding, this is done only through SetPaddingBits*/\r
1990 \r
1991 GF_Err stbl_AddSampleFragment(GF_SampleTableBox *stbl, u32 sampleNumber, u16 size);\r
1992 \r
1993 /*update of the sample table\r
1994 all these functions are called in edit and we always have 1 sample per chunk*/\r
1995 GF_Err stbl_SetChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u64 offset);\r
1996 GF_Err stbl_SetSampleCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 offset);\r
1997 GF_Err stbl_SetSampleSize(GF_SampleSizeBox *stsz, u32 SampleNumber, u32 size);\r
1998 GF_Err stbl_SetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 isRAP);\r
1999 GF_Err stbl_SetSyncShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber, u32 syncSample);\r
2000 GF_Err stbl_SetPaddingBits(GF_SampleTableBox *stbl, u32 SampleNumber, u8 bits);\r
2001 /*for adding fragmented samples*/\r
2002 GF_Err stbl_SampleSizeAppend(GF_SampleSizeBox *stsz, u32 data_size);\r
2003 /*writing of the final chunk info in edit mode*/\r
2004 GF_Err stbl_SetChunkAndOffset(GF_SampleTableBox *stbl, u32 sampleNumber, u32 StreamDescIndex, GF_SampleToChunkBox *the_stsc, GF_Box **the_stco, u64 data_offset, u8 forceNewChunk);\r
2005 /*EDIT LIST functions*/\r
2006 GF_EdtsEntry *CreateEditEntry(u64 EditDuration, u64 MediaTime, u8 EditMode);\r
2007 \r
2008 GF_Err stbl_SetRedundant(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2009 GF_Err stbl_AddRedundant(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2010 \r
2011 /*REMOVE functions*/\r
2012 GF_Err stbl_RemoveDTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 LastAUDefDuration);\r
2013 GF_Err stbl_RemoveCTS(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2014 GF_Err stbl_RemoveSize(GF_SampleSizeBox *stsz, u32 sampleNumber);\r
2015 GF_Err stbl_RemoveChunk(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2016 GF_Err stbl_RemoveRAP(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2017 GF_Err stbl_RemoveShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber);\r
2018 GF_Err stbl_RemovePaddingBits(GF_SampleTableBox *stbl, u32 SampleNumber);\r
2019 GF_Err stbl_RemoveSampleFragments(GF_SampleTableBox *stbl, u32 sampleNumber);\r
2020 GF_Err stbl_RemoveRedundant(GF_SampleTableBox *stbl, u32 SampleNumber);\r
2021 \r
2022 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
2023 GF_Err StoreFragment(GF_ISOFile *movie);\r
2024 #endif\r
2025 \r
2026 #endif  \r
2027 \r
2028 \r
2029 GF_Err GetNextMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *OutMovieTime);\r
2030 GF_Err GetPrevMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *OutMovieTime);\r
2031 \r
2032 Bool IsHintTrack(GF_TrackBox *trak);\r
2033 Bool CheckHintFormat(GF_TrackBox *trak, u32 HintType);\r
2034 u32 GetHintFormat(GF_TrackBox *trak);\r
2035 \r
2036 \r
2037 /*locate a box by its type or UUID*/\r
2038 GF_ItemListBox *gf_ismo_locate_box(GF_List *list, u32 boxType, bin128 UUID);\r
2039 \r
2040 GF_Err moov_AddBox(GF_Box *ptr, GF_Box *a);\r
2041 GF_Err tref_AddBox(GF_Box *ptr, GF_Box *a);\r
2042 GF_Err trak_AddBox(GF_Box *ptr, GF_Box *a);\r
2043 GF_Err mvex_AddBox(GF_Box *ptr, GF_Box *a);\r
2044 GF_Err stsd_AddBox(GF_SampleDescriptionBox *ptr, GF_Box *a);\r
2045 GF_Err hnti_AddBox(GF_HintTrackInfoBox *hnti, GF_Box *a);\r
2046 GF_Err udta_AddBox(GF_UserDataBox *ptr, GF_Box *a);\r
2047 GF_Err edts_AddBox(GF_Box *s, GF_Box *a);\r
2048 GF_Err stdp_Read(GF_Box *s, GF_BitStream *bs);\r
2049 GF_Err sdtp_Read(GF_Box *s, GF_BitStream *bs);\r
2050 GF_Err dinf_AddBox(GF_Box *s, GF_Box *a);\r
2051 GF_Err minf_AddBox(GF_Box *s, GF_Box *a);\r
2052 GF_Err mdia_AddBox(GF_Box *s, GF_Box *a);\r
2053 GF_Err stbl_AddBox(GF_SampleTableBox *ptr, GF_Box *a);\r
2054 \r
2055 GF_Err AVC_UpdateESD(GF_MPEGVisualSampleEntryBox *avc, GF_ESD *esd);\r
2056 void AVC_RewriteESDescriptor(GF_MPEGVisualSampleEntryBox *avc);\r
2057 GF_Err reftype_AddRefTrack(GF_TrackReferenceTypeBox *ref, u32 trackID, u16 *outRefIndex);\r
2058 \r
2059 \r
2060 /*\r
2061                 Hinting stuff\r
2062 */\r
2063 \r
2064 /*the HintType for each protocol*/\r
2065 enum\r
2066 {\r
2067         GF_ISMO_HINT_RTP        = 1,\r
2068         /*not supported yet*/\r
2069         GF_ISMO_MPEG2_TS        = 2\r
2070 };\r
2071 \r
2072 /*****************************************************\r
2073                 RTP Data Entries\r
2074 *****************************************************/\r
2075 \r
2076 #define GF_ISMO_BASE_DTE_ENTRY  \\r
2077         u8 source;\r
2078 \r
2079 typedef struct\r
2080 {\r
2081         GF_ISMO_BASE_DTE_ENTRY\r
2082 } GF_GenericDTE;\r
2083 \r
2084 typedef struct\r
2085 {\r
2086         GF_ISMO_BASE_DTE_ENTRY\r
2087 } GF_EmptyDTE;\r
2088 \r
2089 typedef struct\r
2090 {\r
2091         GF_ISMO_BASE_DTE_ENTRY\r
2092         u8 dataLength;\r
2093         char data[14];\r
2094 } GF_ImmediateDTE;\r
2095 \r
2096 typedef struct\r
2097 {\r
2098         GF_ISMO_BASE_DTE_ENTRY\r
2099         s8 trackRefIndex;\r
2100         u32 sampleNumber;\r
2101         u16 dataLength;\r
2102         u32 byteOffset;\r
2103         u16 bytesPerComp;\r
2104         u16 samplesPerComp;\r
2105 } GF_SampleDTE;\r
2106 \r
2107 typedef struct\r
2108 {\r
2109         GF_ISMO_BASE_DTE_ENTRY\r
2110         s8 trackRefIndex;\r
2111         u32 streamDescIndex;\r
2112         u16 dataLength;\r
2113         u32 byteOffset;\r
2114         u32 reserved;\r
2115 } GF_StreamDescDTE;\r
2116 \r
2117 GF_GenericDTE *NewDTE(u8 type);\r
2118 void DelDTE(GF_GenericDTE *dte);\r
2119 GF_Err ReadDTE(GF_GenericDTE *dte, GF_BitStream *bs);\r
2120 GF_Err WriteDTE(GF_GenericDTE *dte, GF_BitStream *bs);\r
2121 GF_Err OffsetDTE(GF_GenericDTE *dte, u32 offset, u32 HintSampleNumber);\r
2122 \r
2123 /*****************************************************\r
2124                 RTP Sample\r
2125 *****************************************************/\r
2126 \r
2127 /*data cache when reading*/\r
2128 typedef struct __tag_hint_data_cache\r
2129 {\r
2130         GF_ISOSample *samp;\r
2131         GF_TrackBox *trak;\r
2132         u32 sample_num;\r
2133 } GF_HintDataCache;\r
2134 \r
2135 \r
2136 typedef struct __tag_hint_sample\r
2137 {\r
2138         /*used internally for future protocol support (write only)*/\r
2139         u8 HintType;\r
2140         /*QT packets*/\r
2141         u16 reserved;\r
2142         GF_List *packetTable;\r
2143         char *AdditionalData;\r
2144         u32 dataLength;\r
2145         /*used internally for hinting*/\r
2146         u64 TransmissionTime;\r
2147         /*for read only, used to store samples fetched while building packets*/\r
2148         GF_List *sample_cache;\r
2149 } GF_HintSample;\r
2150 \r
2151 GF_HintSample *gf_isom_hint_sample_new(u32 ProtocolType);\r
2152 void gf_isom_hint_sample_del(GF_HintSample *ptr);\r
2153 GF_Err gf_isom_hint_sample_read(GF_HintSample *ptr, GF_BitStream *bs, u32 sampleSize);\r
2154 GF_Err gf_isom_hint_sample_write(GF_HintSample *ptr, GF_BitStream *bs);\r
2155 u32 gf_isom_hint_sample_size(GF_HintSample *ptr);\r
2156 \r
2157 /*****************************************************\r
2158                 Hint Packets (generic packet for future protocol support)\r
2159 *****************************************************/\r
2160 #define GF_ISOM_BASE_PACKET                     \\r
2161         s32 relativeTransTime;\r
2162 \r
2163 \r
2164 typedef struct\r
2165 {\r
2166         GF_ISOM_BASE_PACKET\r
2167 } GF_HintPacket;\r
2168 \r
2169 GF_HintPacket *gf_isom_hint_pck_new(u8 HintType);\r
2170 void gf_isom_hint_pck_del(u8 HintType, GF_HintPacket *ptr);\r
2171 GF_Err gf_isom_hint_pck_read(u8 HintType, GF_HintPacket *ptr, GF_BitStream *bs);\r
2172 GF_Err gf_isom_hint_pck_write(u8 HintType, GF_HintPacket *ptr, GF_BitStream *bs);\r
2173 u32 gf_isom_hint_pck_size(u8 HintType, GF_HintPacket *ptr);\r
2174 GF_Err gf_isom_hint_pck_offset(u8 HintType, GF_HintPacket *ptr, u32 offset, u32 HintSampleNumber);\r
2175 GF_Err gf_isom_hint_pck_add_dte(u8 HintType, GF_HintPacket *ptr, GF_GenericDTE *dte, u8 AtBegin);\r
2176 /*get the size of the packet AS RECONSTRUCTED BY THE SERVER (without CSRC)*/\r
2177 u32 gf_isom_hint_pck_length(u8 HintType, GF_HintPacket *ptr);\r
2178 \r
2179 /*the RTP packet*/\r
2180 typedef struct\r
2181 {\r
2182         GF_ISOM_BASE_PACKET     \r
2183         \r
2184         /*RTP Header*/\r
2185         u8 P_bit;\r
2186         u8 X_bit;\r
2187         u8 M_bit;\r
2188         /*on 7 bits */\r
2189         u8 payloadType;\r
2190         u16 SequenceNumber;\r
2191         /*Hinting flags*/\r
2192         u8 B_bit;\r
2193         u8 R_bit;\r
2194         /*ExtraInfos TLVs - not really used */\r
2195         GF_List *TLV;\r
2196         /*DataTable - contains the DTEs...*/\r
2197         GF_List *DataTable;\r
2198 } GF_RTPPacket;\r
2199 \r
2200 GF_RTPPacket *gf_isom_hint_rtp_new();\r
2201 void gf_isom_hint_rtp_del(GF_RTPPacket *ptr);\r
2202 GF_Err gf_isom_hint_rtp_read(GF_RTPPacket *ptr, GF_BitStream *bs);\r
2203 GF_Err gf_isom_hint_rtp_write(GF_RTPPacket *ptr, GF_BitStream *bs);\r
2204 u32 gf_isom_hint_rtp_size(GF_RTPPacket *ptr);\r
2205 GF_Err gf_isom_hint_rtp_offset(GF_RTPPacket *ptr, u32 offset, u32 HintSampleNumber);\r
2206 u32 gf_isom_hint_rtp_length(GF_RTPPacket *ptr);\r
2207 \r
2208 \r
2209 \r
2210 struct _3gpp_text_sample \r
2211 {\r
2212         char *text;\r
2213         u32 len;\r
2214         \r
2215         GF_TextStyleBox *styles;\r
2216         /*at most one of these*/\r
2217         GF_TextHighlightColorBox *highlight_color;\r
2218         GF_TextScrollDelayBox *scroll_delay;\r
2219         GF_TextBoxBox *box;\r
2220         GF_TextWrapBox *wrap;\r
2221 \r
2222         GF_List *others;\r
2223         GF_TextKaraokeBox *cur_karaoke;\r
2224 };\r
2225 \r
2226 GF_TextSample *gf_isom_parse_texte_sample(GF_BitStream *bs);\r
2227 GF_TextSample *gf_isom_parse_texte_sample_from_data(char *data, u32 dataLength);\r
2228 \r
2229 \r
2230 \r
2231 /*\r
2232         these are exported just in case, there should never be needed outside the lib\r
2233 */\r
2234 \r
2235 GF_Box *reftype_New();\r
2236 GF_Box *free_New();\r
2237 GF_Box *mdat_New();\r
2238 GF_Box *moov_New();\r
2239 GF_Box *mvhd_New();\r
2240 GF_Box *mdhd_New();\r
2241 GF_Box *vmhd_New();\r
2242 GF_Box *smhd_New();\r
2243 GF_Box *hmhd_New();\r
2244 GF_Box *nmhd_New();\r
2245 GF_Box *stbl_New();\r
2246 GF_Box *dinf_New();\r
2247 GF_Box *url_New();\r
2248 GF_Box *urn_New();\r
2249 GF_Box *cprt_New();\r
2250 GF_Box *chpl_New();\r
2251 GF_Box *hdlr_New();\r
2252 GF_Box *iods_New();\r
2253 GF_Box *trak_New();\r
2254 GF_Box *mp4s_New();\r
2255 GF_Box *mp4v_New();\r
2256 GF_Box *mp4a_New();\r
2257 GF_Box *edts_New();\r
2258 GF_Box *udta_New();\r
2259 GF_Box *dref_New();\r
2260 GF_Box *stsd_New();\r
2261 GF_Box *stts_New();\r
2262 GF_Box *ctts_New();\r
2263 GF_Box *stsh_New();\r
2264 GF_Box *elst_New();\r
2265 GF_Box *stsc_New();\r
2266 GF_Box *stsz_New();\r
2267 GF_Box *stco_New();\r
2268 GF_Box *stss_New();\r
2269 GF_Box *stdp_New();\r
2270 GF_Box *sdtp_New();\r
2271 GF_Box *co64_New();\r
2272 GF_Box *esds_New();\r
2273 GF_Box *minf_New();\r
2274 GF_Box *tkhd_New();\r
2275 GF_Box *tref_New();\r
2276 GF_Box *mdia_New();\r
2277 GF_Box *defa_New();\r
2278 GF_Box *uuid_New();\r
2279 GF_Box *void_New();\r
2280 GF_Box *stsf_New();\r
2281 GF_Box *gnrm_New();\r
2282 GF_Box *gnrv_New();\r
2283 GF_Box *gnra_New();\r
2284 GF_Box *pdin_New();\r
2285 \r
2286 void reftype_del(GF_Box *);\r
2287 void free_del(GF_Box *);\r
2288 void mdat_del(GF_Box *);\r
2289 void moov_del(GF_Box *);\r
2290 void mvhd_del(GF_Box *);\r
2291 void mdhd_del(GF_Box *);\r
2292 void vmhd_del(GF_Box *);\r
2293 void smhd_del(GF_Box *);\r
2294 void hmhd_del(GF_Box *);\r
2295 void nmhd_del(GF_Box *);\r
2296 void stbl_del(GF_Box *);\r
2297 void dinf_del(GF_Box *);\r
2298 void url_del(GF_Box *);\r
2299 void urn_del(GF_Box *);\r
2300 void chpl_del(GF_Box *);\r
2301 void cprt_del(GF_Box *);\r
2302 void hdlr_del(GF_Box *);\r
2303 void iods_del(GF_Box *);\r
2304 void trak_del(GF_Box *);\r
2305 void mp4s_del(GF_Box *);\r
2306 void mp4v_del(GF_Box *);\r
2307 void mp4a_del(GF_Box *);\r
2308 void edts_del(GF_Box *);\r
2309 void udta_del(GF_Box *);\r
2310 void dref_del(GF_Box *);\r
2311 void stsd_del(GF_Box *);\r
2312 void stts_del(GF_Box *);\r
2313 void ctts_del(GF_Box *);\r
2314 void stsh_del(GF_Box *);\r
2315 void elst_del(GF_Box *);\r
2316 void stsc_del(GF_Box *);\r
2317 void stsz_del(GF_Box *);\r
2318 void stco_del(GF_Box *);\r
2319 void stss_del(GF_Box *);\r
2320 void stdp_del(GF_Box *);\r
2321 void sdtp_del(GF_Box *);\r
2322 void co64_del(GF_Box *);\r
2323 void esds_del(GF_Box *);\r
2324 void minf_del(GF_Box *);\r
2325 void tkhd_del(GF_Box *);\r
2326 void tref_del(GF_Box *);\r
2327 void mdia_del(GF_Box *);\r
2328 void defa_del(GF_Box *);\r
2329 void uuid_del(GF_Box *);\r
2330 void void_del(GF_Box *);\r
2331 void stsf_del(GF_Box *);\r
2332 void gnrm_del(GF_Box *);\r
2333 void gnrv_del(GF_Box *);\r
2334 void gnra_del(GF_Box *);\r
2335 void pdin_del(GF_Box *);\r
2336 \r
2337 GF_Err reftype_Write(GF_Box *s, GF_BitStream *bs);\r
2338 GF_Err free_Write(GF_Box *s, GF_BitStream *bs);\r
2339 GF_Err mdat_Write(GF_Box *s, GF_BitStream *bs);\r
2340 GF_Err moov_Write(GF_Box *s, GF_BitStream *bs);\r
2341 GF_Err mvhd_Write(GF_Box *s, GF_BitStream *bs);\r
2342 GF_Err mdhd_Write(GF_Box *s, GF_BitStream *bs);\r
2343 GF_Err vmhd_Write(GF_Box *s, GF_BitStream *bs);\r
2344 GF_Err smhd_Write(GF_Box *s, GF_BitStream *bs);\r
2345 GF_Err hmhd_Write(GF_Box *s, GF_BitStream *bs);\r
2346 GF_Err nmhd_Write(GF_Box *s, GF_BitStream *bs);\r
2347 GF_Err stbl_Write(GF_Box *s, GF_BitStream *bs);\r
2348 GF_Err dinf_Write(GF_Box *s, GF_BitStream *bs);\r
2349 GF_Err url_Write(GF_Box *s, GF_BitStream *bs);\r
2350 GF_Err urn_Write(GF_Box *s, GF_BitStream *bs);\r
2351 GF_Err chpl_Write(GF_Box *s, GF_BitStream *bs);\r
2352 GF_Err cprt_Write(GF_Box *s, GF_BitStream *bs);\r
2353 GF_Err hdlr_Write(GF_Box *s, GF_BitStream *bs);\r
2354 GF_Err iods_Write(GF_Box *s, GF_BitStream *bs);\r
2355 GF_Err trak_Write(GF_Box *s, GF_BitStream *bs);\r
2356 GF_Err mp4s_Write(GF_Box *s, GF_BitStream *bs);\r
2357 GF_Err mp4v_Write(GF_Box *s, GF_BitStream *bs);\r
2358 GF_Err mp4a_Write(GF_Box *s, GF_BitStream *bs);\r
2359 GF_Err edts_Write(GF_Box *s, GF_BitStream *bs);\r
2360 GF_Err udta_Write(GF_Box *s, GF_BitStream *bs);\r
2361 GF_Err dref_Write(GF_Box *s, GF_BitStream *bs);\r
2362 GF_Err stsd_Write(GF_Box *s, GF_BitStream *bs);\r
2363 GF_Err stts_Write(GF_Box *s, GF_BitStream *bs);\r
2364 GF_Err ctts_Write(GF_Box *s, GF_BitStream *bs);\r
2365 GF_Err stsh_Write(GF_Box *s, GF_BitStream *bs);\r
2366 GF_Err elst_Write(GF_Box *s, GF_BitStream *bs);\r
2367 GF_Err stsc_Write(GF_Box *s, GF_BitStream *bs);\r
2368 GF_Err stsz_Write(GF_Box *s, GF_BitStream *bs);\r
2369 GF_Err stco_Write(GF_Box *s, GF_BitStream *bs);\r
2370 GF_Err stss_Write(GF_Box *s, GF_BitStream *bs);\r
2371 GF_Err stdp_Write(GF_Box *s, GF_BitStream *bs);\r
2372 GF_Err sdtp_Write(GF_Box *s, GF_BitStream *bs);\r
2373 GF_Err co64_Write(GF_Box *s, GF_BitStream *bs);\r
2374 GF_Err esds_Write(GF_Box *s, GF_BitStream *bs);\r
2375 GF_Err minf_Write(GF_Box *s, GF_BitStream *bs);\r
2376 GF_Err tkhd_Write(GF_Box *s, GF_BitStream *bs);\r
2377 GF_Err tref_Write(GF_Box *s, GF_BitStream *bs);\r
2378 GF_Err mdia_Write(GF_Box *s, GF_BitStream *bs);\r
2379 GF_Err defa_Write(GF_Box *s, GF_BitStream *bs);\r
2380 GF_Err uuid_Write(GF_Box *s, GF_BitStream *bs);\r
2381 GF_Err void_Write(GF_Box *s, GF_BitStream *bs);\r
2382 GF_Err stsf_Write(GF_Box *s, GF_BitStream *bs);\r
2383 GF_Err gnrm_Write(GF_Box *s, GF_BitStream *bs);\r
2384 GF_Err gnrv_Write(GF_Box *s, GF_BitStream *bs);\r
2385 GF_Err gnra_Write(GF_Box *s, GF_BitStream *bs);\r
2386 GF_Err pdin_Write(GF_Box *s, GF_BitStream *bs);\r
2387 \r
2388 GF_Err reftype_Size(GF_Box *);\r
2389 GF_Err free_Size(GF_Box *);\r
2390 GF_Err mdat_Size(GF_Box *);\r
2391 GF_Err moov_Size(GF_Box *);\r
2392 GF_Err mvhd_Size(GF_Box *);\r
2393 GF_Err mdhd_Size(GF_Box *);\r
2394 GF_Err vmhd_Size(GF_Box *);\r
2395 GF_Err smhd_Size(GF_Box *);\r
2396 GF_Err hmhd_Size(GF_Box *);\r
2397 GF_Err nmhd_Size(GF_Box *);\r
2398 GF_Err stbl_Size(GF_Box *);\r
2399 GF_Err dinf_Size(GF_Box *);\r
2400 GF_Err url_Size(GF_Box *);\r
2401 GF_Err urn_Size(GF_Box *);\r
2402 GF_Err chpl_Size(GF_Box *);\r
2403 GF_Err cprt_Size(GF_Box *);\r
2404 GF_Err hdlr_Size(GF_Box *);\r
2405 GF_Err iods_Size(GF_Box *);\r
2406 GF_Err trak_Size(GF_Box *);\r
2407 GF_Err mp4s_Size(GF_Box *);\r
2408 GF_Err mp4v_Size(GF_Box *);\r
2409 GF_Err mp4a_Size(GF_Box *);\r
2410 GF_Err edts_Size(GF_Box *);\r
2411 GF_Err udta_Size(GF_Box *);\r
2412 GF_Err dref_Size(GF_Box *);\r
2413 GF_Err stsd_Size(GF_Box *);\r
2414 GF_Err stts_Size(GF_Box *);\r
2415 GF_Err ctts_Size(GF_Box *);\r
2416 GF_Err stsh_Size(GF_Box *);\r
2417 GF_Err elst_Size(GF_Box *);\r
2418 GF_Err stsc_Size(GF_Box *);\r
2419 GF_Err stsz_Size(GF_Box *);\r
2420 GF_Err stco_Size(GF_Box *);\r
2421 GF_Err stss_Size(GF_Box *);\r
2422 GF_Err stdp_Size(GF_Box *);\r
2423 GF_Err sdtp_Size(GF_Box *);\r
2424 GF_Err co64_Size(GF_Box *);\r
2425 GF_Err esds_Size(GF_Box *);\r
2426 GF_Err minf_Size(GF_Box *);\r
2427 GF_Err tkhd_Size(GF_Box *);\r
2428 GF_Err tref_Size(GF_Box *);\r
2429 GF_Err mdia_Size(GF_Box *);\r
2430 GF_Err defa_Size(GF_Box *);\r
2431 GF_Err uuid_Size(GF_Box *);\r
2432 GF_Err void_Size(GF_Box *);\r
2433 GF_Err stsf_Size(GF_Box *);\r
2434 GF_Err gnrm_Size(GF_Box *);\r
2435 GF_Err gnrv_Size(GF_Box *);\r
2436 GF_Err gnra_Size(GF_Box *);\r
2437 GF_Err pdin_Size(GF_Box *);\r
2438 \r
2439 GF_Err reftype_Read(GF_Box *s, GF_BitStream *bs);\r
2440 GF_Err free_Read(GF_Box *s, GF_BitStream *bs);\r
2441 GF_Err mdat_Read(GF_Box *s, GF_BitStream *bs);\r
2442 GF_Err moov_Read(GF_Box *s, GF_BitStream *bs);\r
2443 GF_Err mvhd_Read(GF_Box *s, GF_BitStream *bs);\r
2444 GF_Err mdhd_Read(GF_Box *s, GF_BitStream *bs);\r
2445 GF_Err vmhd_Read(GF_Box *s, GF_BitStream *bs);\r
2446 GF_Err smhd_Read(GF_Box *s, GF_BitStream *bs);\r
2447 GF_Err hmhd_Read(GF_Box *s, GF_BitStream *bs);\r
2448 GF_Err nmhd_Read(GF_Box *s, GF_BitStream *bs);\r
2449 GF_Err stbl_Read(GF_Box *s, GF_BitStream *bs);\r
2450 GF_Err dinf_Read(GF_Box *s, GF_BitStream *bs);\r
2451 GF_Err url_Read(GF_Box *s, GF_BitStream *bs);\r
2452 GF_Err urn_Read(GF_Box *s, GF_BitStream *bs);\r
2453 GF_Err chpl_Read(GF_Box *s, GF_BitStream *bs);\r
2454 GF_Err cprt_Read(GF_Box *s, GF_BitStream *bs);\r
2455 GF_Err hdlr_Read(GF_Box *s, GF_BitStream *bs);\r
2456 GF_Err iods_Read(GF_Box *s, GF_BitStream *bs);\r
2457 GF_Err trak_Read(GF_Box *s, GF_BitStream *bs);\r
2458 GF_Err mp4s_Read(GF_Box *s, GF_BitStream *bs);\r
2459 GF_Err mp4v_Read(GF_Box *s, GF_BitStream *bs);\r
2460 GF_Err mp4a_Read(GF_Box *s, GF_BitStream *bs);\r
2461 GF_Err edts_Read(GF_Box *s, GF_BitStream *bs);\r
2462 GF_Err udta_Read(GF_Box *s, GF_BitStream *bs);\r
2463 GF_Err dref_Read(GF_Box *s, GF_BitStream *bs);\r
2464 GF_Err stsd_Read(GF_Box *s, GF_BitStream *bs);\r
2465 GF_Err stts_Read(GF_Box *s, GF_BitStream *bs);\r
2466 GF_Err ctts_Read(GF_Box *s, GF_BitStream *bs);\r
2467 GF_Err stsh_Read(GF_Box *s, GF_BitStream *bs);\r
2468 GF_Err elst_Read(GF_Box *s, GF_BitStream *bs);\r
2469 GF_Err stsc_Read(GF_Box *s, GF_BitStream *bs);\r
2470 GF_Err stsz_Read(GF_Box *s, GF_BitStream *bs);\r
2471 GF_Err stco_Read(GF_Box *s, GF_BitStream *bs);\r
2472 GF_Err stss_Read(GF_Box *s, GF_BitStream *bs);\r
2473 GF_Err stdp_Read(GF_Box *s, GF_BitStream *bs);\r
2474 GF_Err sdtp_Read(GF_Box *s, GF_BitStream *bs);\r
2475 GF_Err co64_Read(GF_Box *s, GF_BitStream *bs);\r
2476 GF_Err esds_Read(GF_Box *s, GF_BitStream *bs);\r
2477 GF_Err minf_Read(GF_Box *s, GF_BitStream *bs);\r
2478 GF_Err tkhd_Read(GF_Box *s, GF_BitStream *bs);\r
2479 GF_Err tref_Read(GF_Box *s, GF_BitStream *bs);\r
2480 GF_Err mdia_Read(GF_Box *s, GF_BitStream *bs);\r
2481 GF_Err defa_Read(GF_Box *s, GF_BitStream *bs);\r
2482 GF_Err uuid_Read(GF_Box *s, GF_BitStream *bs);\r
2483 GF_Err void_Read(GF_Box *s, GF_BitStream *bs);\r
2484 GF_Err stsf_Read(GF_Box *s, GF_BitStream *bs);\r
2485 GF_Err pdin_Read(GF_Box *s, GF_BitStream *bs);\r
2486 \r
2487 \r
2488 GF_Box *hinf_New();\r
2489 GF_Box *trpy_New();\r
2490 GF_Box *totl_New();\r
2491 GF_Box *nump_New();\r
2492 GF_Box *npck_New();\r
2493 GF_Box *tpyl_New();\r
2494 GF_Box *tpay_New();\r
2495 GF_Box *maxr_New();\r
2496 GF_Box *dmed_New();\r
2497 GF_Box *dimm_New();\r
2498 GF_Box *drep_New();\r
2499 GF_Box *tmin_New();\r
2500 GF_Box *tmax_New();\r
2501 GF_Box *pmax_New();\r
2502 GF_Box *dmax_New();\r
2503 GF_Box *payt_New();\r
2504 GF_Box *name_New();\r
2505 GF_Box *rely_New();\r
2506 GF_Box *snro_New();\r
2507 GF_Box *tims_New();\r
2508 GF_Box *tsro_New();\r
2509 GF_Box *ghnt_New();\r
2510 GF_Box *hnti_New();\r
2511 GF_Box *sdp_New();\r
2512 GF_Box *rtpo_New();\r
2513 \r
2514 void hinf_del(GF_Box *s);\r
2515 void trpy_del(GF_Box *s);\r
2516 void totl_del(GF_Box *s);\r
2517 void nump_del(GF_Box *s);\r
2518 void npck_del(GF_Box *s);\r
2519 void tpyl_del(GF_Box *s);\r
2520 void tpay_del(GF_Box *s);\r
2521 void maxr_del(GF_Box *s);\r
2522 void dmed_del(GF_Box *s);\r
2523 void dimm_del(GF_Box *s);\r
2524 void drep_del(GF_Box *s);\r
2525 void tmin_del(GF_Box *s);\r
2526 void tmax_del(GF_Box *s);\r
2527 void pmax_del(GF_Box *s);\r
2528 void dmax_del(GF_Box *s);\r
2529 void payt_del(GF_Box *s);\r
2530 void name_del(GF_Box *s);\r
2531 void rely_del(GF_Box *s);\r
2532 void snro_del(GF_Box *s);\r
2533 void tims_del(GF_Box *s);\r
2534 void tsro_del(GF_Box *s);\r
2535 void ghnt_del(GF_Box *s);\r
2536 void hnti_del(GF_Box *a);\r
2537 void sdp_del(GF_Box *a);\r
2538 void rtpo_del(GF_Box *s);\r
2539 \r
2540 GF_Err hinf_Read(GF_Box *s, GF_BitStream *bs);\r
2541 GF_Err trpy_Read(GF_Box *s, GF_BitStream *bs);\r
2542 GF_Err totl_Read(GF_Box *s, GF_BitStream *bs);\r
2543 GF_Err nump_Read(GF_Box *s, GF_BitStream *bs);\r
2544 GF_Err npck_Read(GF_Box *s, GF_BitStream *bs);\r
2545 GF_Err tpyl_Read(GF_Box *s, GF_BitStream *bs);\r
2546 GF_Err tpay_Read(GF_Box *s, GF_BitStream *bs);\r
2547 GF_Err maxr_Read(GF_Box *s, GF_BitStream *bs);\r
2548 GF_Err dmed_Read(GF_Box *s, GF_BitStream *bs);\r
2549 GF_Err dimm_Read(GF_Box *s, GF_BitStream *bs);\r
2550 GF_Err drep_Read(GF_Box *s, GF_BitStream *bs);\r
2551 GF_Err tmin_Read(GF_Box *s, GF_BitStream *bs);\r
2552 GF_Err tmax_Read(GF_Box *s, GF_BitStream *bs);\r
2553 GF_Err pmax_Read(GF_Box *s, GF_BitStream *bs);\r
2554 GF_Err dmax_Read(GF_Box *s, GF_BitStream *bs);\r
2555 GF_Err payt_Read(GF_Box *s, GF_BitStream *bs);\r
2556 GF_Err name_Read(GF_Box *s, GF_BitStream *bs);\r
2557 GF_Err rely_Read(GF_Box *s, GF_BitStream *bs);\r
2558 GF_Err snro_Read(GF_Box *s, GF_BitStream *bs);\r
2559 GF_Err tims_Read(GF_Box *s, GF_BitStream *bs);\r
2560 GF_Err tsro_Read(GF_Box *s, GF_BitStream *bs);\r
2561 GF_Err ghnt_Read(GF_Box *s, GF_BitStream *bs);\r
2562 GF_Err hnti_Read(GF_Box *s, GF_BitStream *bs);\r
2563 GF_Err sdp_Read(GF_Box *s, GF_BitStream *bs);\r
2564 GF_Err rtpo_Read(GF_Box *s, GF_BitStream *bs);\r
2565 \r
2566 GF_Err hinf_Write(GF_Box *s, GF_BitStream *bs);\r
2567 GF_Err trpy_Write(GF_Box *s, GF_BitStream *bs);\r
2568 GF_Err totl_Write(GF_Box *s, GF_BitStream *bs);\r
2569 GF_Err nump_Write(GF_Box *s, GF_BitStream *bs);\r
2570 GF_Err npck_Write(GF_Box *s, GF_BitStream *bs);\r
2571 GF_Err tpyl_Write(GF_Box *s, GF_BitStream *bs);\r
2572 GF_Err tpay_Write(GF_Box *s, GF_BitStream *bs);\r
2573 GF_Err maxr_Write(GF_Box *s, GF_BitStream *bs);\r
2574 GF_Err dmed_Write(GF_Box *s, GF_BitStream *bs);\r
2575 GF_Err dimm_Write(GF_Box *s, GF_BitStream *bs);\r
2576 GF_Err drep_Write(GF_Box *s, GF_BitStream *bs);\r
2577 GF_Err tmin_Write(GF_Box *s, GF_BitStream *bs);\r
2578 GF_Err tmax_Write(GF_Box *s, GF_BitStream *bs);\r
2579 GF_Err pmax_Write(GF_Box *s, GF_BitStream *bs);\r
2580 GF_Err dmax_Write(GF_Box *s, GF_BitStream *bs);\r
2581 GF_Err payt_Write(GF_Box *s, GF_BitStream *bs);\r
2582 GF_Err name_Write(GF_Box *s, GF_BitStream *bs);\r
2583 GF_Err rely_Write(GF_Box *s, GF_BitStream *bs);\r
2584 GF_Err snro_Write(GF_Box *s, GF_BitStream *bs);\r
2585 GF_Err tims_Write(GF_Box *s, GF_BitStream *bs);\r
2586 GF_Err tsro_Write(GF_Box *s, GF_BitStream *bs);\r
2587 GF_Err ghnt_Write(GF_Box *s, GF_BitStream *bs);\r
2588 GF_Err hnti_Write(GF_Box *s, GF_BitStream *bs);\r
2589 GF_Err sdp_Write(GF_Box *s, GF_BitStream *bs);\r
2590 GF_Err rtpo_Write(GF_Box *s, GF_BitStream *bs);\r
2591 \r
2592 GF_Err hinf_Size(GF_Box *s);\r
2593 GF_Err trpy_Size(GF_Box *s);\r
2594 GF_Err totl_Size(GF_Box *s);\r
2595 GF_Err nump_Size(GF_Box *s);\r
2596 GF_Err npck_Size(GF_Box *s);\r
2597 GF_Err tpyl_Size(GF_Box *s);\r
2598 GF_Err tpay_Size(GF_Box *s);\r
2599 GF_Err maxr_Size(GF_Box *s);\r
2600 GF_Err dmed_Size(GF_Box *s);\r
2601 GF_Err dimm_Size(GF_Box *s);\r
2602 GF_Err drep_Size(GF_Box *s);\r
2603 GF_Err tmin_Size(GF_Box *s);\r
2604 GF_Err tmax_Size(GF_Box *s);\r
2605 GF_Err pmax_Size(GF_Box *s);\r
2606 GF_Err dmax_Size(GF_Box *s);\r
2607 GF_Err payt_Size(GF_Box *s);\r
2608 GF_Err name_Size(GF_Box *s);\r
2609 GF_Err rely_Size(GF_Box *s);\r
2610 GF_Err snro_Size(GF_Box *s);\r
2611 GF_Err tims_Size(GF_Box *s);\r
2612 GF_Err tsro_Size(GF_Box *s);\r
2613 GF_Err ghnt_Size(GF_Box *s);\r
2614 GF_Err hnti_Size(GF_Box *s);\r
2615 GF_Err sdp_Size(GF_Box *s);\r
2616 GF_Err rtpo_Size(GF_Box *s);\r
2617 \r
2618 \r
2619 GF_Box *ftyp_New();\r
2620 void ftyp_del(GF_Box *s);\r
2621 GF_Err ftyp_Read(GF_Box *s,GF_BitStream *bs);\r
2622 GF_Err ftyp_Write(GF_Box *s, GF_BitStream *bs);\r
2623 GF_Err ftyp_Size(GF_Box *s);\r
2624 \r
2625 GF_Box *padb_New();\r
2626 void padb_del(GF_Box *s);\r
2627 GF_Err padb_Read(GF_Box *s, GF_BitStream *bs);\r
2628 GF_Err padb_Write(GF_Box *s, GF_BitStream *bs);\r
2629 GF_Err padb_Size(GF_Box *s);\r
2630 \r
2631 GF_Box *gppa_New(u32 type);\r
2632 GF_Box *gppv_New(u32 type);\r
2633 GF_Box *gppc_New(u32 type);\r
2634 void gppa_del(GF_Box *s);\r
2635 void gppv_del(GF_Box *s);\r
2636 void gppc_del(GF_Box *s);\r
2637 GF_Err gppa_Read(GF_Box *s, GF_BitStream *bs);\r
2638 GF_Err gppv_Read(GF_Box *s, GF_BitStream *bs);\r
2639 GF_Err gppc_Read(GF_Box *s, GF_BitStream *bs);\r
2640 #ifndef GPAC_READ_ONLY\r
2641 GF_Err gppa_Write(GF_Box *s, GF_BitStream *bs);\r
2642 GF_Err gppv_Write(GF_Box *s, GF_BitStream *bs);\r
2643 GF_Err gppc_Write(GF_Box *s, GF_BitStream *bs);\r
2644 GF_Err gppa_Size(GF_Box *s);\r
2645 GF_Err gppv_Size(GF_Box *s);\r
2646 GF_Err gppc_Size(GF_Box *s);\r
2647 #endif\r
2648 \r
2649 \r
2650 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
2651 GF_Box *mvex_New();\r
2652 GF_Box *trex_New();\r
2653 GF_Box *moof_New();\r
2654 GF_Box *mfhd_New();\r
2655 GF_Box *traf_New();\r
2656 GF_Box *tfhd_New();\r
2657 GF_Box *trun_New();\r
2658 \r
2659 void mvex_del(GF_Box *s);\r
2660 void trex_del(GF_Box *s);\r
2661 void moof_del(GF_Box *s);\r
2662 void mfhd_del(GF_Box *s);\r
2663 void traf_del(GF_Box *s);\r
2664 void tfhd_del(GF_Box *s);\r
2665 void trun_del(GF_Box *s);\r
2666 \r
2667 GF_Err mvex_Read(GF_Box *s, GF_BitStream *bs);\r
2668 GF_Err trex_Read(GF_Box *s, GF_BitStream *bs);\r
2669 GF_Err moof_Read(GF_Box *s, GF_BitStream *bs);\r
2670 GF_Err mfhd_Read(GF_Box *s, GF_BitStream *bs);\r
2671 GF_Err traf_Read(GF_Box *s, GF_BitStream *bs);\r
2672 GF_Err tfhd_Read(GF_Box *s, GF_BitStream *bs);\r
2673 GF_Err trun_Read(GF_Box *s, GF_BitStream *bs);\r
2674 \r
2675 GF_Err mvex_Write(GF_Box *s, GF_BitStream *bs);\r
2676 GF_Err trex_Write(GF_Box *s, GF_BitStream *bs);\r
2677 GF_Err moof_Write(GF_Box *s, GF_BitStream *bs);\r
2678 GF_Err mfhd_Write(GF_Box *s, GF_BitStream *bs);\r
2679 GF_Err traf_Write(GF_Box *s, GF_BitStream *bs);\r
2680 GF_Err tfhd_Write(GF_Box *s, GF_BitStream *bs);\r
2681 GF_Err trun_Write(GF_Box *s, GF_BitStream *bs);\r
2682 \r
2683 GF_Err mvex_Size(GF_Box *s);\r
2684 GF_Err trex_Size(GF_Box *s);\r
2685 GF_Err moof_Size(GF_Box *s);\r
2686 GF_Err mfhd_Size(GF_Box *s);\r
2687 GF_Err traf_Size(GF_Box *s);\r
2688 GF_Err tfhd_Size(GF_Box *s);\r
2689 GF_Err trun_Size(GF_Box *s);\r
2690 \r
2691 \r
2692 GF_Box *mehd_New();\r
2693 void mehd_del(GF_Box *s);\r
2694 GF_Err mehd_Read(GF_Box *s, GF_BitStream *bs);\r
2695 GF_Err mehd_Write(GF_Box *s, GF_BitStream *bs);\r
2696 GF_Err mehd_Size(GF_Box *s);\r
2697 \r
2698 #endif \r
2699 \r
2700 /*avc ext*/\r
2701 GF_Box *avcc_New();\r
2702 void avcc_del(GF_Box *s);\r
2703 GF_Err avcc_Read(GF_Box *s, GF_BitStream *bs);\r
2704 GF_Err avcc_Write(GF_Box *s, GF_BitStream *bs);\r
2705 GF_Err avcc_Size(GF_Box *s);\r
2706 \r
2707 GF_Box *avc1_New();\r
2708 \r
2709 GF_Box *m4ds_New();\r
2710 void m4ds_del(GF_Box *s);\r
2711 GF_Err m4ds_Read(GF_Box *s, GF_BitStream *bs);\r
2712 GF_Err m4ds_Write(GF_Box *s, GF_BitStream *bs);\r
2713 GF_Err m4ds_Size(GF_Box *s);\r
2714 \r
2715 GF_Box *btrt_New();\r
2716 void btrt_del(GF_Box *s);\r
2717 GF_Err btrt_Read(GF_Box *s, GF_BitStream *bs);\r
2718 GF_Err btrt_Write(GF_Box *s, GF_BitStream *bs);\r
2719 GF_Err btrt_Size(GF_Box *s);\r
2720 \r
2721 \r
2722 /*3GPP streaming text*/\r
2723 GF_Box *ftab_New();\r
2724 GF_Box *tx3g_New();\r
2725 GF_Box *styl_New();\r
2726 GF_Box *hlit_New();\r
2727 GF_Box *hclr_New();\r
2728 GF_Box *krok_New();\r
2729 GF_Box *dlay_New();\r
2730 GF_Box *href_New();\r
2731 GF_Box *tbox_New();\r
2732 GF_Box *blnk_New();\r
2733 GF_Box *twrp_New();\r
2734 \r
2735 void ftab_del(GF_Box *s);\r
2736 void tx3g_del(GF_Box *s);\r
2737 void styl_del(GF_Box *s);\r
2738 void hlit_del(GF_Box *s);\r
2739 void hclr_del(GF_Box *s);\r
2740 void krok_del(GF_Box *s);\r
2741 void dlay_del(GF_Box *s);\r
2742 void href_del(GF_Box *s);\r
2743 void tbox_del(GF_Box *s);\r
2744 void blnk_del(GF_Box *s);\r
2745 void twrp_del(GF_Box *s);\r
2746 \r
2747 GF_Err ftab_Read(GF_Box *s, GF_BitStream *bs);\r
2748 GF_Err tx3g_Read(GF_Box *s, GF_BitStream *bs);\r
2749 GF_Err styl_Read(GF_Box *s, GF_BitStream *bs);\r
2750 GF_Err hlit_Read(GF_Box *s, GF_BitStream *bs);\r
2751 GF_Err hclr_Read(GF_Box *s, GF_BitStream *bs);\r
2752 GF_Err krok_Read(GF_Box *s, GF_BitStream *bs);\r
2753 GF_Err dlay_Read(GF_Box *s, GF_BitStream *bs);\r
2754 GF_Err href_Read(GF_Box *s, GF_BitStream *bs);\r
2755 GF_Err tbox_Read(GF_Box *s, GF_BitStream *bs);\r
2756 GF_Err blnk_Read(GF_Box *s, GF_BitStream *bs);\r
2757 GF_Err twrp_Read(GF_Box *s, GF_BitStream *bs);\r
2758 \r
2759 #ifndef GPAC_READ_ONLY\r
2760 GF_Err ftab_Write(GF_Box *s, GF_BitStream *bs);\r
2761 GF_Err tx3g_Write(GF_Box *s, GF_BitStream *bs);\r
2762 GF_Err styl_Write(GF_Box *s, GF_BitStream *bs);\r
2763 GF_Err hlit_Write(GF_Box *s, GF_BitStream *bs);\r
2764 GF_Err hclr_Write(GF_Box *s, GF_BitStream *bs);\r
2765 GF_Err krok_Write(GF_Box *s, GF_BitStream *bs);\r
2766 GF_Err dlay_Write(GF_Box *s, GF_BitStream *bs);\r
2767 GF_Err href_Write(GF_Box *s, GF_BitStream *bs);\r
2768 GF_Err tbox_Write(GF_Box *s, GF_BitStream *bs);\r
2769 GF_Err blnk_Write(GF_Box *s, GF_BitStream *bs);\r
2770 GF_Err twrp_Write(GF_Box *s, GF_BitStream *bs);\r
2771 \r
2772 GF_Err ftab_Size(GF_Box *s);\r
2773 GF_Err tx3g_Size(GF_Box *s);\r
2774 GF_Err styl_Size(GF_Box *s);\r
2775 GF_Err hlit_Size(GF_Box *s);\r
2776 GF_Err hclr_Size(GF_Box *s);\r
2777 GF_Err krok_Size(GF_Box *s);\r
2778 GF_Err dlay_Size(GF_Box *s);\r
2779 GF_Err href_Size(GF_Box *s);\r
2780 GF_Err tbox_Size(GF_Box *s);\r
2781 GF_Err blnk_Size(GF_Box *s);\r
2782 GF_Err twrp_Size(GF_Box *s);\r
2783 #endif\r
2784 \r
2785 \r
2786 /* MPEG-21 functions */\r
2787 GF_Box *meta_New();\r
2788 GF_Box *xml_New();\r
2789 GF_Box *bxml_New();\r
2790 GF_Box *iloc_New();\r
2791 GF_Box *pitm_New();\r
2792 GF_Box *ipro_New();\r
2793 GF_Box *infe_New();\r
2794 GF_Box *iinf_New();\r
2795 GF_Box *sinf_New();\r
2796 GF_Box *frma_New();\r
2797 GF_Box *schm_New();\r
2798 GF_Box *schi_New();\r
2799 GF_Box *enca_New();\r
2800 GF_Box *encv_New();\r
2801 GF_Box *encs_New();\r
2802 \r
2803 void meta_del(GF_Box *s);\r
2804 void xml_del(GF_Box *s);\r
2805 void bxml_del(GF_Box *s);\r
2806 void iloc_del(GF_Box *s);\r
2807 void pitm_del(GF_Box *s);\r
2808 void ipro_del(GF_Box *s);\r
2809 void infe_del(GF_Box *s);\r
2810 void iinf_del(GF_Box *s);\r
2811 void sinf_del(GF_Box *s);\r
2812 void frma_del(GF_Box *s);\r
2813 void schm_del(GF_Box *s);\r
2814 void schi_del(GF_Box *s);\r
2815 \r
2816 GF_Err meta_Read(GF_Box *s, GF_BitStream *bs);\r
2817 GF_Err xml_Read(GF_Box *s, GF_BitStream *bs);\r
2818 GF_Err bxml_Read(GF_Box *s, GF_BitStream *bs);\r
2819 GF_Err iloc_Read(GF_Box *s, GF_BitStream *bs);\r
2820 GF_Err pitm_Read(GF_Box *s, GF_BitStream *bs);\r
2821 GF_Err ipro_Read(GF_Box *s, GF_BitStream *bs);\r
2822 GF_Err infe_Read(GF_Box *s, GF_BitStream *bs);\r
2823 GF_Err iinf_Read(GF_Box *s, GF_BitStream *bs);\r
2824 GF_Err sinf_Read(GF_Box *s, GF_BitStream *bs);\r
2825 GF_Err frma_Read(GF_Box *s, GF_BitStream *bs);\r
2826 GF_Err schm_Read(GF_Box *s, GF_BitStream *bs);\r
2827 GF_Err schi_Read(GF_Box *s, GF_BitStream *bs);\r
2828 \r
2829 #ifndef GPAC_READ_ONLY\r
2830 GF_Err meta_Write(GF_Box *s, GF_BitStream *bs);\r
2831 GF_Err xml_Write(GF_Box *s, GF_BitStream *bs);\r
2832 GF_Err bxml_Write(GF_Box *s, GF_BitStream *bs);\r
2833 GF_Err iloc_Write(GF_Box *s, GF_BitStream *bs);\r
2834 GF_Err pitm_Write(GF_Box *s, GF_BitStream *bs);\r
2835 GF_Err ipro_Write(GF_Box *s, GF_BitStream *bs);\r
2836 GF_Err infe_Write(GF_Box *s, GF_BitStream *bs);\r
2837 GF_Err iinf_Write(GF_Box *s, GF_BitStream *bs);\r
2838 GF_Err sinf_Write(GF_Box *s, GF_BitStream *bs);\r
2839 GF_Err frma_Write(GF_Box *s, GF_BitStream *bs);\r
2840 GF_Err schm_Write(GF_Box *s, GF_BitStream *bs);\r
2841 GF_Err schi_Write(GF_Box *s, GF_BitStream *bs);\r
2842 \r
2843 GF_Err meta_Size(GF_Box *s);\r
2844 GF_Err xml_Size(GF_Box *s);\r
2845 GF_Err bxml_Size(GF_Box *s);\r
2846 GF_Err iloc_Size(GF_Box *s);\r
2847 GF_Err pitm_Size(GF_Box *s);\r
2848 GF_Err ipro_Size(GF_Box *s);\r
2849 GF_Err infe_Size(GF_Box *s);\r
2850 GF_Err iinf_Size(GF_Box *s);\r
2851 GF_Err sinf_Size(GF_Box *s);\r
2852 GF_Err frma_Size(GF_Box *s);\r
2853 GF_Err schm_Size(GF_Box *s);\r
2854 GF_Err schi_Size(GF_Box *s);\r
2855 #endif\r
2856 \r
2857 /* end of MPEG-21 functions */\r
2858 \r
2859 \r
2860 /** ISMACryp functions **/\r
2861 GF_Box *iKMS_New();\r
2862 GF_Box *iSFM_New();\r
2863 void iKMS_del(GF_Box *s);\r
2864 void iSFM_del(GF_Box *s);\r
2865 GF_Err iKMS_Read(GF_Box *s, GF_BitStream *bs);\r
2866 GF_Err iSFM_Read(GF_Box *s, GF_BitStream *bs);\r
2867 #ifndef GPAC_READ_ONLY\r
2868 GF_Err iKMS_Write(GF_Box *s, GF_BitStream *bs);\r
2869 GF_Err iSFM_Write(GF_Box *s, GF_BitStream *bs);\r
2870 GF_Err iKMS_Size(GF_Box *s);\r
2871 GF_Err iSFM_Size(GF_Box *s);\r
2872 #endif\r
2873 \r
2874 /* Apple extensions */\r
2875 void ilst_del(GF_Box *s);\r
2876 void ListItem_del(GF_Box *s);\r
2877 void data_del(GF_Box *s);\r
2878 GF_Err ilst_Read(GF_Box *s, GF_BitStream *bs);\r
2879 GF_Err ListItem_Read(GF_Box *s, GF_BitStream *bs);\r
2880 GF_Err data_Read(GF_Box *s, GF_BitStream *bs);\r
2881 GF_Box *ilst_New();\r
2882 GF_Box *ListItem_New(u32 type);\r
2883 GF_Box *data_New();\r
2884 #ifndef GPAC_READ_ONLY\r
2885 GF_Err ilst_Write(GF_Box *s, GF_BitStream *bs);\r
2886 GF_Err ListItem_Write(GF_Box *s, GF_BitStream *bs);\r
2887 GF_Err data_Write(GF_Box *s, GF_BitStream *bs);\r
2888 GF_Err ilst_Size(GF_Box *s);\r
2889 GF_Err ListItem_Size(GF_Box *s);\r
2890 GF_Err data_Size(GF_Box *s);\r
2891 #endif\r
2892 \r
2893 \r
2894 GF_Err gb_box_array_dump(GF_List *list, FILE * trace);\r
2895 GF_Err reftype_dump(GF_Box *a, FILE * trace);\r
2896 GF_Err free_dump(GF_Box *a, FILE * trace);\r
2897 GF_Err mdat_dump(GF_Box *a, FILE * trace);\r
2898 GF_Err moov_dump(GF_Box *a, FILE * trace);\r
2899 GF_Err mvhd_dump(GF_Box *a, FILE * trace);\r
2900 GF_Err mdhd_dump(GF_Box *a, FILE * trace);\r
2901 GF_Err vmhd_dump(GF_Box *a, FILE * trace);\r
2902 GF_Err smhd_dump(GF_Box *a, FILE * trace);\r
2903 GF_Err hmhd_dump(GF_Box *a, FILE * trace);\r
2904 GF_Err nmhd_dump(GF_Box *a, FILE * trace);\r
2905 GF_Err stbl_dump(GF_Box *a, FILE * trace);\r
2906 GF_Err dinf_dump(GF_Box *a, FILE * trace);\r
2907 GF_Err url_dump(GF_Box *a, FILE * trace);\r
2908 GF_Err urn_dump(GF_Box *a, FILE * trace);\r
2909 GF_Err cprt_dump(GF_Box *a, FILE * trace);\r
2910 GF_Err hdlr_dump(GF_Box *a, FILE * trace);\r
2911 GF_Err iods_dump(GF_Box *a, FILE * trace);\r
2912 GF_Err trak_dump(GF_Box *a, FILE * trace);\r
2913 GF_Err mp4s_dump(GF_Box *a, FILE * trace);\r
2914 GF_Err mp4v_dump(GF_Box *a, FILE * trace);\r
2915 GF_Err mp4a_dump(GF_Box *a, FILE * trace);\r
2916 GF_Err edts_dump(GF_Box *a, FILE * trace);\r
2917 GF_Err udta_dump(GF_Box *a, FILE * trace);\r
2918 GF_Err dref_dump(GF_Box *a, FILE * trace);\r
2919 GF_Err stsd_dump(GF_Box *a, FILE * trace);\r
2920 GF_Err stts_dump(GF_Box *a, FILE * trace);\r
2921 GF_Err ctts_dump(GF_Box *a, FILE * trace);\r
2922 GF_Err stsh_dump(GF_Box *a, FILE * trace);\r
2923 GF_Err elst_dump(GF_Box *a, FILE * trace);\r
2924 GF_Err stsc_dump(GF_Box *a, FILE * trace);\r
2925 GF_Err stsz_dump(GF_Box *a, FILE * trace);\r
2926 GF_Err stco_dump(GF_Box *a, FILE * trace);\r
2927 GF_Err stss_dump(GF_Box *a, FILE * trace);\r
2928 GF_Err stdp_dump(GF_Box *a, FILE * trace);\r
2929 GF_Err sdtp_dump(GF_Box *a, FILE * trace);\r
2930 GF_Err co64_dump(GF_Box *a, FILE * trace);\r
2931 GF_Err esds_dump(GF_Box *a, FILE * trace);\r
2932 GF_Err minf_dump(GF_Box *a, FILE * trace);\r
2933 GF_Err tkhd_dump(GF_Box *a, FILE * trace);\r
2934 GF_Err tref_dump(GF_Box *a, FILE * trace);\r
2935 GF_Err mdia_dump(GF_Box *a, FILE * trace);\r
2936 GF_Err defa_dump(GF_Box *a, FILE * trace);\r
2937 GF_Err void_dump(GF_Box *a, FILE * trace);\r
2938 GF_Err ftyp_dump(GF_Box *a, FILE * trace);\r
2939 GF_Err padb_dump(GF_Box *a, FILE * trace);\r
2940 GF_Err stsf_dump(GF_Box *a, FILE * trace);\r
2941 GF_Err gnrm_dump(GF_Box *a, FILE * trace);\r
2942 GF_Err gnrv_dump(GF_Box *a, FILE * trace);\r
2943 GF_Err gnra_dump(GF_Box *a, FILE * trace);\r
2944 GF_Err gppa_dump(GF_Box *a, FILE * trace);\r
2945 GF_Err gppv_dump(GF_Box *a, FILE * trace);\r
2946 GF_Err gppc_dump(GF_Box *a, FILE * trace);\r
2947 GF_Err chpl_dump(GF_Box *a, FILE * trace);\r
2948 GF_Err dpin_dump(GF_Box *a, FILE * trace);\r
2949 \r
2950 GF_Err hinf_dump(GF_Box *a, FILE * trace);\r
2951 GF_Err trpy_dump(GF_Box *a, FILE * trace);\r
2952 GF_Err totl_dump(GF_Box *a, FILE * trace);\r
2953 GF_Err nump_dump(GF_Box *a, FILE * trace);\r
2954 GF_Err npck_dump(GF_Box *a, FILE * trace);\r
2955 GF_Err tpyl_dump(GF_Box *a, FILE * trace);\r
2956 GF_Err tpay_dump(GF_Box *a, FILE * trace);\r
2957 GF_Err maxr_dump(GF_Box *a, FILE * trace);\r
2958 GF_Err dmed_dump(GF_Box *a, FILE * trace);\r
2959 GF_Err dimm_dump(GF_Box *a, FILE * trace);\r
2960 GF_Err drep_dump(GF_Box *a, FILE * trace);\r
2961 GF_Err tmin_dump(GF_Box *a, FILE * trace);\r
2962 GF_Err tmax_dump(GF_Box *a, FILE * trace);\r
2963 GF_Err pmax_dump(GF_Box *a, FILE * trace);\r
2964 GF_Err dmax_dump(GF_Box *a, FILE * trace);\r
2965 GF_Err payt_dump(GF_Box *a, FILE * trace);\r
2966 GF_Err name_dump(GF_Box *a, FILE * trace);\r
2967 GF_Err rely_dump(GF_Box *a, FILE * trace);\r
2968 GF_Err snro_dump(GF_Box *a, FILE * trace);\r
2969 GF_Err tims_dump(GF_Box *a, FILE * trace);\r
2970 GF_Err tsro_dump(GF_Box *a, FILE * trace);\r
2971 GF_Err ghnt_dump(GF_Box *a, FILE * trace);\r
2972 GF_Err hnti_dump(GF_Box *a, FILE * trace);\r
2973 GF_Err sdp_dump(GF_Box *a, FILE * trace);\r
2974 GF_Err rtpo_dump(GF_Box *a, FILE * trace);\r
2975 \r
2976 \r
2977 \r
2978 #ifndef GPAC_ISOM_NO_FRAGMENTS\r
2979 GF_Err mvex_dump(GF_Box *a, FILE * trace);\r
2980 GF_Err mehd_dump(GF_Box *a, FILE * trace);\r
2981 GF_Err trex_dump(GF_Box *a, FILE * trace);\r
2982 GF_Err moof_dump(GF_Box *a, FILE * trace);\r
2983 GF_Err mfhd_dump(GF_Box *a, FILE * trace);\r
2984 GF_Err traf_dump(GF_Box *a, FILE * trace);\r
2985 GF_Err tfhd_dump(GF_Box *a, FILE * trace);\r
2986 GF_Err trun_dump(GF_Box *a, FILE * trace);\r
2987 #endif\r
2988 \r
2989 GF_Err avcc_dump(GF_Box *a, FILE * trace);\r
2990 GF_Err avc1_dump(GF_Box *a, FILE * trace);\r
2991 GF_Err m4ds_dump(GF_Box *a, FILE * trace);\r
2992 GF_Err btrt_dump(GF_Box *a, FILE * trace);\r
2993 \r
2994 GF_Err ftab_dump(GF_Box *a, FILE * trace);\r
2995 GF_Err tx3g_dump(GF_Box *a, FILE * trace);\r
2996 GF_Err styl_dump(GF_Box *a, FILE * trace);\r
2997 GF_Err hlit_dump(GF_Box *a, FILE * trace);\r
2998 GF_Err hclr_dump(GF_Box *a, FILE * trace);\r
2999 GF_Err krok_dump(GF_Box *a, FILE * trace);\r
3000 GF_Err dlay_dump(GF_Box *a, FILE * trace);\r
3001 GF_Err href_dump(GF_Box *a, FILE * trace);\r
3002 GF_Err tbox_dump(GF_Box *a, FILE * trace);\r
3003 GF_Err blnk_dump(GF_Box *a, FILE * trace);\r
3004 GF_Err twrp_dump(GF_Box *a, FILE * trace);\r
3005 \r
3006 /* ISMACryp dump */\r
3007 GF_Err iKMS_dump(GF_Box *a, FILE * trace);\r
3008 GF_Err iSFM_dump(GF_Box *a, FILE * trace);\r
3009 \r
3010 /*MPEG-21 extensions dump*/\r
3011 GF_Err meta_dump(GF_Box *a, FILE * trace);\r
3012 GF_Err xml_dump(GF_Box *a, FILE * trace);\r
3013 GF_Err bxml_dump(GF_Box *a, FILE * trace);\r
3014 GF_Err iloc_dump(GF_Box *a, FILE * trace);\r
3015 GF_Err pitm_dump(GF_Box *a, FILE * trace);\r
3016 GF_Err ipro_dump(GF_Box *a, FILE * trace);\r
3017 GF_Err infe_dump(GF_Box *a, FILE * trace);\r
3018 GF_Err iinf_dump(GF_Box *a, FILE * trace);\r
3019 GF_Err sinf_dump(GF_Box *a, FILE * trace);\r
3020 GF_Err frma_dump(GF_Box *a, FILE * trace);\r
3021 GF_Err schm_dump(GF_Box *a, FILE * trace);\r
3022 GF_Err schi_dump(GF_Box *a, FILE * trace);\r
3023 \r
3024 /*Apple extensions*/\r
3025 GF_Err ilst_dump(GF_Box *a, FILE * trace);\r
3026 GF_Err ListItem_dump(GF_Box *a, FILE * trace);\r
3027 GF_Err data_dump(GF_Box *a, FILE * trace);\r
3028 \r
3029 /*Apple extensions*/\r
3030 GF_MetaBox *gf_isom_apple_get_meta_extensions(GF_ISOFile *mov);\r
3031 \r
3032 #ifndef GPAC_READ_ONLY\r
3033 GF_MetaBox *gf_isom_apple_create_meta_extensions(GF_ISOFile *mov);\r
3034 #endif //GPAC_READ_ONLY\r
3035 \r
3036 /*OMA extensions*/\r
3037 GF_Box *ohdr_New();\r
3038 void ohdr_del(GF_Box *s);\r
3039 GF_Err ohdr_Read(GF_Box *s, GF_BitStream *bs);\r
3040 GF_Err ohdr_Write(GF_Box *s, GF_BitStream *bs);\r
3041 GF_Err ohdr_Size(GF_Box *s);\r
3042 GF_Err ohdr_dump(GF_Box *a, FILE * trace);\r
3043 GF_Box *grpi_New();\r
3044 void grpi_del(GF_Box *s);\r
3045 GF_Err grpi_Read(GF_Box *s, GF_BitStream *bs);\r
3046 GF_Err grpi_Write(GF_Box *s, GF_BitStream *bs);\r
3047 GF_Err grpi_Size(GF_Box *s);\r
3048 GF_Err grpi_dump(GF_Box *a, FILE * trace);\r
3049 GF_Box *mdri_New();\r
3050 void mdri_del(GF_Box *s);\r
3051 GF_Err mdri_Read(GF_Box *s, GF_BitStream *bs);\r
3052 GF_Err mdri_Write(GF_Box *s, GF_BitStream *bs);\r
3053 GF_Err mdri_Size(GF_Box *s);\r
3054 GF_Err mdri_dump(GF_Box *a, FILE * trace);\r
3055 GF_Box *odtt_New();\r
3056 void odtt_del(GF_Box *s);\r
3057 GF_Err odtt_Read(GF_Box *s, GF_BitStream *bs);\r
3058 GF_Err odtt_Write(GF_Box *s, GF_BitStream *bs);\r
3059 GF_Err odtt_Size(GF_Box *s);\r
3060 GF_Err odtt_dump(GF_Box *a, FILE * trace);\r
3061 GF_Box *odrb_New();\r
3062 void odrb_del(GF_Box *s);\r
3063 GF_Err odrb_Read(GF_Box *s, GF_BitStream *bs);\r
3064 GF_Err odrb_Write(GF_Box *s, GF_BitStream *bs);\r
3065 GF_Err odrb_Size(GF_Box *s);\r
3066 GF_Err odrb_dump(GF_Box *a, FILE * trace);\r
3067 GF_Box *odkm_New();\r
3068 void odkm_del(GF_Box *s);\r
3069 GF_Err odkm_Read(GF_Box *s, GF_BitStream *bs);\r
3070 GF_Err odkm_Write(GF_Box *s, GF_BitStream *bs);\r
3071 GF_Err odkm_Size(GF_Box *s);\r
3072 GF_Err odkm_dump(GF_Box *a, FILE * trace);\r
3073 \r
3074 \r
3075 GF_Box *pasp_New();\r
3076 void pasp_del(GF_Box *s);\r
3077 GF_Err pasp_Read(GF_Box *s, GF_BitStream *bs);\r
3078 GF_Err pasp_Write(GF_Box *s, GF_BitStream *bs);\r
3079 GF_Err pasp_Size(GF_Box *s);\r
3080 GF_Err pasp_dump(GF_Box *a, FILE * trace);\r
3081 \r
3082 GF_Box *metx_New(u32 type);\r
3083 void metx_del(GF_Box *s);\r
3084 GF_Err metx_Read(GF_Box *s, GF_BitStream *bs);\r
3085 GF_Err metx_Write(GF_Box *s, GF_BitStream *bs);\r
3086 GF_Err metx_Size(GF_Box *s);\r
3087 GF_Err metx_dump(GF_Box *a, FILE * trace);\r
3088 \r
3089 \r
3090 \r
3091 GF_Box *tsel_New();\r
3092 void tsel_del(GF_Box *s);\r
3093 GF_Err tsel_Read(GF_Box *s, GF_BitStream *bs);\r
3094 GF_Err tsel_Write(GF_Box *s, GF_BitStream *bs);\r
3095 GF_Err tsel_Size(GF_Box *s);\r
3096 GF_Err tsel_dump(GF_Box *a, FILE * trace);\r
3097 \r
3098 \r
3099 GF_Box *dimC_New();\r
3100 void dimC_del(GF_Box *s);\r
3101 GF_Err dimC_Read(GF_Box *s, GF_BitStream *bs);\r
3102 GF_Err dimC_Write(GF_Box *s, GF_BitStream *bs);\r
3103 GF_Err dimC_Size(GF_Box *s);\r
3104 GF_Err dimC_dump(GF_Box *a, FILE * trace);\r
3105 \r
3106 GF_Box *dims_New();\r
3107 void dims_del(GF_Box *s);\r
3108 GF_Err dims_Read(GF_Box *s, GF_BitStream *bs);\r
3109 GF_Err dims_Write(GF_Box *s, GF_BitStream *bs);\r
3110 GF_Err dims_Size(GF_Box *s);\r
3111 GF_Err dims_dump(GF_Box *a, FILE * trace);\r
3112 \r
3113 GF_Box *diST_New();\r
3114 void diST_del(GF_Box *s);\r
3115 GF_Err diST_Read(GF_Box *s, GF_BitStream *bs);\r
3116 GF_Err diST_Write(GF_Box *s, GF_BitStream *bs);\r
3117 GF_Err diST_Size(GF_Box *s);\r
3118 GF_Err diST_dump(GF_Box *a, FILE * trace);\r
3119 \r
3120 \r
3121 GF_Box *ac3_New();\r
3122 void ac3_del(GF_Box *s);\r
3123 GF_Err ac3_Read(GF_Box *s, GF_BitStream *bs);\r
3124 GF_Err ac3_Write(GF_Box *s, GF_BitStream *bs);\r
3125 GF_Err ac3_Size(GF_Box *s);\r
3126 GF_Err ac3_dump(GF_Box *a, FILE * trace);\r
3127 \r
3128 GF_Box *dac3_New();\r
3129 void dac3_del(GF_Box *s);\r
3130 GF_Err dac3_Read(GF_Box *s, GF_BitStream *bs);\r
3131 GF_Err dac3_Write(GF_Box *s, GF_BitStream *bs);\r
3132 GF_Err dac3_Size(GF_Box *s);\r
3133 GF_Err dac3_dump(GF_Box *a, FILE * trace);\r
3134 \r
3135 #ifdef __cplusplus\r
3136 }\r
3137 #endif\r
3138 \r
3139 #endif //_GF_ISOMEDIA_DEV_H_\r
3140 \r