1 /*
2 * GPAC - Multimedia Framework C SDK
3 *
4 * Authors: Jean Le Feuvre
5 * Copyright (c) Telecom ParisTech 2000-2012
6 * All rights reserved
7 *
8 * This file is part of GPAC / ISO Media File Format sub-project
9 *
10 * GPAC is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2, or (at your option)
13 * any later version.
14 *
15 * GPAC is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; see the file COPYING. If not, write to
22 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 */
25
26 #include <gpac/internal/isomedia_dev.h>
27
28 #ifndef GPAC_DISABLE_ISOM
29
30 //Add this funct to handle incomplete files...
31 //bytesExpected is 0 most of the time. If the file is incomplete, bytesExpected
32 //is the number of bytes missing to parse the box...
gf_isom_parse_root_box(GF_Box ** outBox,GF_BitStream * bs,u64 * bytesExpected,Bool progressive_mode)33 GF_Err gf_isom_parse_root_box(GF_Box **outBox, GF_BitStream *bs, u64 *bytesExpected, Bool progressive_mode)
34 {
35 GF_Err ret;
36 u64 start;
37 //first make sure we can at least get the box size and type...
38 //18 = size (int32) + type (int32)
39 if (gf_bs_available(bs) < 8) {
40 *bytesExpected = 8;
41 return GF_ISOM_INCOMPLETE_FILE;
42 }
43 start = gf_bs_get_position(bs);
44 ret = gf_isom_parse_box_ex(outBox, bs, 0, GF_TRUE);
45 if (ret == GF_ISOM_INCOMPLETE_FILE) {
46 *bytesExpected = (*outBox)->size;
47 GF_LOG(progressive_mode ? GF_LOG_DEBUG : GF_LOG_ERROR, GF_LOG_CONTAINER, ("[iso file] Incomplete box %s\n", gf_4cc_to_str((*outBox)->type)));
48 gf_bs_seek(bs, start);
49 gf_isom_box_del(*outBox);
50 *outBox = NULL;
51 }
52 return ret;
53 }
54
gf_isom_parse_box_ex(GF_Box ** outBox,GF_BitStream * bs,u32 parent_type,Bool is_root_box)55 GF_Err gf_isom_parse_box_ex(GF_Box **outBox, GF_BitStream *bs, u32 parent_type, Bool is_root_box)
56 {
57 u32 type, uuid_type, hdr_size;
58 u64 size, start, end;
59 char uuid[16];
60 GF_Err e;
61 GF_Box *newBox;
62
63 if ((bs == NULL) || (outBox == NULL)) return GF_BAD_PARAM;
64 *outBox = NULL;
65
66 start = gf_bs_get_position(bs);
67
68 uuid_type = 0;
69 size = (u64)gf_bs_read_u32(bs);
70 hdr_size = 4;
71 /*fix for some boxes found in some old hinted files*/
72 if ((size >= 2) && (size <= 4)) {
73 size = 4;
74 type = GF_ISOM_BOX_TYPE_VOID;
75 }
76 else {
77 type = gf_bs_read_u32(bs);
78 hdr_size += 4;
79 /*no size means till end of file - EXCEPT FOR some old QuickTime boxes...*/
80 if (type == GF_ISOM_BOX_TYPE_TOTL)
81 size = 12;
82 if (!size) {
83 if (is_root_box) {
84 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning Read Box type %s (0x%08X) size 0 reading till the end of file\n", gf_4cc_to_str(type), type));
85 size = gf_bs_available(bs) + 8;
86 }
87 else {
88 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning Read Box type %s (0x%08X) size 0 - patching to size=8 ...\n", gf_4cc_to_str(type), type));
89 size = 8;
90 }
91 }
92 }
93 /*handle uuid*/
94 memset(uuid, 0, 16);
95 if (type == GF_ISOM_BOX_TYPE_UUID) {
96 gf_bs_read_data(bs, uuid, 16);
97 hdr_size += 16;
98 }
99
100 //handle large box
101 if (size == 1) {
102 size = gf_bs_read_u64(bs);
103 hdr_size += 8;
104 }
105 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Read Box type %s size "LLD" start "LLD"\n", gf_4cc_to_str(type), LLD_CAST size, LLD_CAST start));
106
107 if (size < hdr_size) {
108 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Box size "LLD" less than box header size %d\n", LLD_CAST size, hdr_size));
109 return GF_ISOM_INVALID_FILE;
110 }
111
112 if (parent_type && (parent_type == GF_ISOM_BOX_TYPE_TREF)) {
113 newBox = gf_isom_box_new(GF_ISOM_BOX_TYPE_REFT);
114 if (!newBox) return GF_OUT_OF_MEM;
115 ((GF_TrackReferenceTypeBox*)newBox)->reference_type = type;
116 }
117 else if (parent_type && (parent_type == GF_ISOM_BOX_TYPE_IREF)) {
118 newBox = gf_isom_box_new(GF_ISOM_BOX_TYPE_REFI);
119 if (!newBox) return GF_OUT_OF_MEM;
120 ((GF_ItemReferenceTypeBox*)newBox)->reference_type = type;
121 }
122 else {
123 //OK, create the box based on the type
124 newBox = gf_isom_box_new(uuid_type ? uuid_type : type);
125 if (!newBox) return GF_OUT_OF_MEM;
126 }
127
128 //OK, init and read this box
129 if (type == GF_ISOM_BOX_TYPE_UUID) {
130 memcpy(((GF_UUIDBox *)newBox)->uuid, uuid, 16);
131 ((GF_UnknownUUIDBox *)newBox)->internal_4cc = uuid_type;
132 }
133
134 if (!newBox->type) newBox->type = type;
135
136 end = gf_bs_available(bs);
137 if (size - hdr_size > end) {
138 newBox->size = size - hdr_size - end;
139 *outBox = newBox;
140 return GF_ISOM_INCOMPLETE_FILE;
141 }
142 //we need a special reading for these boxes...
143 if ((newBox->type == GF_ISOM_BOX_TYPE_STDP) || (newBox->type == GF_ISOM_BOX_TYPE_SDTP)) {
144 newBox->size = size;
145 *outBox = newBox;
146 return GF_OK;
147 }
148
149 newBox->size = size - hdr_size;
150 e = gf_isom_box_read(newBox, bs);
151 newBox->size = size;
152 end = gf_bs_get_position(bs);
153
154 if (e && (e != GF_ISOM_INCOMPLETE_FILE)) {
155 gf_isom_box_del(newBox);
156 *outBox = NULL;
157 GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[iso file] Read Box \"%s\" failed (%s) - skiping\n", gf_4cc_to_str(type), gf_error_to_string(e)));
158 /*let's still try to load the file since no error was notified*/
159 gf_bs_seek(bs, start + hdr_size);
160 newBox = free_New();
161 ((GF_FreeSpaceBox*)newBox)->original_4cc = type;
162 newBox->size = size - hdr_size;
163 e = gf_isom_box_read(newBox, bs);
164 newBox->size = size;
165 end = gf_bs_get_position(bs);
166 if (e) return e;
167 }
168
169 if (end - start > size) {
170 GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[iso file] Box \"%s\" size "LLU" invalid (read "LLU")\n", gf_4cc_to_str(type), LLU_CAST size, LLU_CAST(end - start)));
171 /*let's still try to load the file since no error was notified*/
172 gf_bs_seek(bs, start + size);
173 }
174 else if (end - start < size) {
175 u32 to_skip = (u32)(size - (end - start));
176 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Box \"%s\" has %d extra bytes\n", gf_4cc_to_str(type), to_skip));
177 gf_bs_skip_bytes(bs, to_skip);
178 }
179 *outBox = newBox;
180 return e;
181 }
182
183 GF_EXPORT
gf_isom_parse_box(GF_Box ** outBox,GF_BitStream * bs)184 GF_Err gf_isom_parse_box(GF_Box **outBox, GF_BitStream *bs)
185 {
186 return gf_isom_parse_box_ex(outBox, bs, 0, GF_FALSE);
187 }
188
gf_isom_full_box_read(GF_Box * ptr,GF_BitStream * bs)189 GF_Err gf_isom_full_box_read(GF_Box *ptr, GF_BitStream *bs)
190 {
191 GF_FullBox *self = (GF_FullBox *)ptr;
192 if (ptr->size<4) return GF_ISOM_INVALID_FILE;
193 self->version = gf_bs_read_u8(bs);
194 self->flags = gf_bs_read_u24(bs);
195 ptr->size -= 4;
196 return GF_OK;
197 }
198
199
200 //void gf_isom_full_box_init(GF_Box *a)
201 //{
202 // GF_FullBox *ptr = (GF_FullBox *)a;
203 // if (! ptr) return;
204 // ptr->flags = 0;
205 // ptr->version = 0;
206 //}
207
208
gf_isom_box_array_del(GF_List * other_boxes)209 void gf_isom_box_array_del(GF_List *other_boxes)
210 {
211 u32 count, i;
212 GF_Box *a;
213 if (!other_boxes) return;
214 count = gf_list_count(other_boxes);
215 for (i = 0; i < count; i++) {
216 a = (GF_Box *)gf_list_get(other_boxes, i);
217 if (a) gf_isom_box_del(a);
218 }
219 gf_list_del(other_boxes);
220 }
221
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)222 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)
223 {
224 GF_Err e;
225 GF_Box *a = NULL;
226
227 while (parent->size) {
228 e = gf_isom_parse_box_ex(&a, bs, parent_type, GF_FALSE);
229 if (e) {
230 if (a) gf_isom_box_del(a);
231 return e;
232 }
233 if (parent->size < a->size) {
234 GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[iso file] Box \"%s\" is larger than container box\n", gf_4cc_to_str(a->type)));
235 parent->size = 0;
236 }
237 else {
238 parent->size -= a->size;
239 }
240 e = add_box(parent, a);
241 if (e) {
242 gf_isom_box_del(a);
243 return e;
244 }
245 }
246 return GF_OK;
247 }
248
gf_isom_read_box_list(GF_Box * parent,GF_BitStream * bs,GF_Err (* add_box)(GF_Box * par,GF_Box * b))249 GF_Err gf_isom_read_box_list(GF_Box *parent, GF_BitStream *bs, GF_Err(*add_box)(GF_Box *par, GF_Box *b))
250 {
251 return gf_isom_read_box_list_ex(parent, bs, add_box, 0);
252 }
253
254 #ifndef GPAC_DISABLE_ISOM_WRITE
255
gf_isom_box_get_size(GF_Box * ptr)256 GF_Err gf_isom_box_get_size(GF_Box *ptr)
257 {
258 ptr->size = 8;
259
260 if (ptr->type == GF_ISOM_BOX_TYPE_UUID) {
261 ptr->size += 16;
262 }
263 //the large size is handled during write, cause at this stage we don't know the size
264 return GF_OK;
265 }
266
gf_isom_full_box_get_size(GF_Box * ptr)267 GF_Err gf_isom_full_box_get_size(GF_Box *ptr)
268 {
269 GF_Err e;
270 e = gf_isom_box_get_size(ptr);
271 if (e) return e;
272 ptr->size += 4;
273 return GF_OK;
274 }
275
276
277 GF_EXPORT
gf_isom_box_write_header(GF_Box * ptr,GF_BitStream * bs)278 GF_Err gf_isom_box_write_header(GF_Box *ptr, GF_BitStream *bs)
279 {
280 u64 start;
281 if (!bs || !ptr) return GF_BAD_PARAM;
282 if (!ptr->size) return GF_ISOM_INVALID_FILE;
283
284 start = gf_bs_get_position(bs);
285 if (ptr->size > 0xFFFFFFFF) {
286 gf_bs_write_u32(bs, 1);
287 }
288 else {
289 gf_bs_write_u32(bs, (u32)ptr->size);
290 }
291 gf_bs_write_u32(bs, ptr->type);
292 if (ptr->type == GF_ISOM_BOX_TYPE_UUID) {
293 u32 i;
294 char uuid[16];
295 char strUUID[32];
296
297 switch (((GF_UUIDBox*)ptr)->internal_4cc) {
298 case GF_ISOM_BOX_UUID_TENC:
299 memcpy(strUUID, "8974dbce7be74c5184f97148f9882554", 32);
300 break;
301 case GF_ISOM_BOX_UUID_PSEC:
302 memcpy(strUUID, "A2394F525A9B4F14A2446C427C648DF4", 32);
303 break;
304 case GF_ISOM_BOX_UUID_MSSM:
305 memcpy(strUUID, "A5D40B30E81411DDBA2F0800200C9A66", 32);
306 break;
307 case GF_ISOM_BOX_UUID_PSSH:
308 memcpy(strUUID, "D08A4F1810F34A82B6C832D8ABA183D3", 32);
309 break;
310 case GF_ISOM_BOX_UUID_TFXD:
311 memcpy(strUUID, "6D1D9B0542D544E680E2141DAFF757B2", 32);
312 break;
313 default:
314 memset(strUUID, 0, 32);
315 break;
316 }
317
318 for (i = 0; i < 16; i++) {
319 char t[3];
320 t[2] = 0;
321 t[0] = strUUID[2 * i];
322 t[1] = strUUID[2 * i + 1];
323 uuid[i] = (u8)strtol(t, NULL, 16);
324 }
325
326 gf_bs_write_data(bs, uuid, 16);
327 }
328 if (ptr->size > 0xFFFFFFFF)
329 gf_bs_write_u64(bs, ptr->size);
330
331 GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Written Box type %s size "LLD" start "LLD"\n", gf_4cc_to_str(ptr->type), LLD_CAST ptr->size, LLD_CAST start));
332
333 return GF_OK;
334 }
335
gf_isom_full_box_write(GF_Box * s,GF_BitStream * bs)336 GF_Err gf_isom_full_box_write(GF_Box *s, GF_BitStream *bs)
337 {
338 GF_Err e;
339 GF_FullBox *ptr = (GF_FullBox *)s;
340 e = gf_isom_box_write_header(s, bs);
341 if (e) return e;
342 gf_bs_write_u8(bs, ptr->version);
343 gf_bs_write_u24(bs, ptr->flags);
344 return GF_OK;
345 }
346
347
gf_isom_box_array_write(GF_Box * parent,GF_List * list,GF_BitStream * bs)348 GF_Err gf_isom_box_array_write(GF_Box *parent, GF_List *list, GF_BitStream *bs)
349 {
350 u32 count, i;
351 GF_Box *a;
352 GF_Err e;
353 if (!list) return GF_BAD_PARAM;
354 count = gf_list_count(list);
355 for (i = 0; i < count; i++) {
356 a = (GF_Box *)gf_list_get(list, i);
357 if (a) {
358 e = gf_isom_box_write(a, bs);
359 if (e) {
360 GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("ISOBMF: Error %s writing box %s\n", gf_error_to_string(e), gf_4cc_to_str(a->type)));
361 return e;
362 }
363 }
364 }
365 return GF_OK;
366 }
367
gf_isom_box_array_size(GF_Box * parent,GF_List * list)368 GF_Err gf_isom_box_array_size(GF_Box *parent, GF_List *list)
369 {
370 GF_Err e;
371 u32 count, i;
372 GF_Box *a;
373 if (!list) return GF_BAD_PARAM;
374
375 count = gf_list_count(list);
376 for (i = 0; i < count; i++) {
377 a = (GF_Box *)gf_list_get(list, i);
378 if (a) {
379 e = gf_isom_box_size(a);
380 if (e) {
381 GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("ISOBMF: Error %s computing box %s size\n", gf_error_to_string(e), gf_4cc_to_str(a->type)));
382 return e;
383 }
384 parent->size += a->size;
385 }
386 }
387 return GF_OK;
388 }
389
390 #endif /*GPAC_DISABLE_ISOM_WRITE*/
391
392 GF_EXPORT
gf_isom_box_new(u32 boxType)393 GF_Box *gf_isom_box_new(u32 boxType)
394 {
395 GF_Box *a;
396 switch (boxType) {
397 case GF_ISOM_BOX_TYPE_REFT:
398 return reftype_New();
399 case GF_ISOM_BOX_TYPE_REFI:
400 return ireftype_New();
401 case GF_ISOM_BOX_TYPE_FREE:
402 return free_New();
403 case GF_ISOM_BOX_TYPE_SKIP:
404 a = free_New();
405 if (a) a->type = GF_ISOM_BOX_TYPE_SKIP;
406 return a;
407 case GF_ISOM_BOX_TYPE_MDAT:
408 return mdat_New();
409 case GF_ISOM_BOX_TYPE_MOOV:
410 return moov_New();
411 case GF_ISOM_BOX_TYPE_MVHD:
412 return mvhd_New();
413 case GF_ISOM_BOX_TYPE_MDHD:
414 return mdhd_New();
415 case GF_ISOM_BOX_TYPE_VMHD:
416 return vmhd_New();
417 case GF_ISOM_BOX_TYPE_SMHD:
418 return smhd_New();
419 case GF_ISOM_BOX_TYPE_HMHD:
420 return hmhd_New();
421 case GF_ISOM_BOX_TYPE_ODHD:
422 case GF_ISOM_BOX_TYPE_CRHD:
423 case GF_ISOM_BOX_TYPE_SDHD:
424 case GF_ISOM_BOX_TYPE_NMHD:
425 case GF_ISOM_BOX_TYPE_STHD:
426 a = nmhd_New();
427 if (a) a->type = boxType;
428 return a;
429 case GF_ISOM_BOX_TYPE_STBL:
430 return stbl_New();
431 case GF_ISOM_BOX_TYPE_DINF:
432 return dinf_New();
433 case GF_ISOM_BOX_TYPE_URL:
434 return url_New();
435 case GF_ISOM_BOX_TYPE_URN:
436 return urn_New();
437 case GF_ISOM_BOX_TYPE_CPRT:
438 return cprt_New();
439 case GF_ISOM_BOX_TYPE_KIND:
440 return kind_New();
441 case GF_ISOM_BOX_TYPE_CHPL:
442 return chpl_New();
443 case GF_ISOM_BOX_TYPE_HDLR:
444 return hdlr_New();
445 case GF_ISOM_BOX_TYPE_IODS:
446 return iods_New();
447 case GF_ISOM_BOX_TYPE_TRAK:
448 return trak_New();
449 case GF_ISOM_BOX_TYPE_MP4S:
450 return mp4s_New();
451 case GF_ISOM_BOX_TYPE_MP4A:
452 return mp4a_New();
453 case GF_ISOM_BOX_TYPE_GNRM:
454 return gnrm_New();
455 case GF_ISOM_BOX_TYPE_GNRV:
456 return gnrv_New();
457 case GF_ISOM_BOX_TYPE_GNRA:
458 return gnra_New();
459 case GF_ISOM_BOX_TYPE_EDTS:
460 return edts_New();
461 case GF_ISOM_BOX_TYPE_UDTA:
462 return udta_New();
463 case GF_ISOM_BOX_TYPE_DREF:
464 return dref_New();
465 case GF_ISOM_BOX_TYPE_STSD:
466 return stsd_New();
467 case GF_ISOM_BOX_TYPE_STTS:
468 return stts_New();
469 case GF_ISOM_BOX_TYPE_CTTS:
470 return ctts_New();
471 case GF_ISOM_BOX_TYPE_CSLG:
472 return cslg_New();
473 case GF_ISOM_BOX_TYPE_STSH:
474 return stsh_New();
475 case GF_ISOM_BOX_TYPE_ELST:
476 return elst_New();
477 case GF_ISOM_BOX_TYPE_STSC:
478 return stsc_New();
479 case GF_ISOM_BOX_TYPE_STZ2:
480 case GF_ISOM_BOX_TYPE_STSZ:
481 a = stsz_New();
482 if (a) a->type = boxType;
483 return a;
484 case GF_ISOM_BOX_TYPE_STCO:
485 return stco_New();
486 case GF_ISOM_BOX_TYPE_STSS:
487 return stss_New();
488 case GF_ISOM_BOX_TYPE_STDP:
489 return stdp_New();
490 case GF_ISOM_BOX_TYPE_SDTP:
491 return sdtp_New();
492 case GF_ISOM_BOX_TYPE_CO64:
493 return co64_New();
494 case GF_ISOM_BOX_TYPE_ESDS:
495 return esds_New();
496 case GF_ISOM_BOX_TYPE_MINF:
497 return minf_New();
498 case GF_ISOM_BOX_TYPE_TKHD:
499 return tkhd_New();
500 case GF_ISOM_BOX_TYPE_TREF:
501 return tref_New();
502 case GF_ISOM_BOX_TYPE_MDIA:
503 return mdia_New();
504 case GF_ISOM_BOX_TYPE_MFRA:
505 return mfra_New();
506 case GF_ISOM_BOX_TYPE_TFRA:
507 return tfra_New();
508 case GF_ISOM_BOX_TYPE_ELNG:
509 return elng_New();
510
511 case GF_ISOM_BOX_TYPE_FTYP:
512 case GF_ISOM_BOX_TYPE_STYP:
513 a = ftyp_New();
514 if (a) a->type = boxType;
515 return a;
516 case GF_ISOM_BOX_TYPE_PADB:
517 return padb_New();
518 case GF_ISOM_BOX_TYPE_VOID:
519 return void_New();
520 case GF_ISOM_BOX_TYPE_STSF:
521 return stsf_New();
522 case GF_ISOM_BOX_TYPE_PDIN:
523 return pdin_New();
524 case GF_ISOM_BOX_TYPE_SBGP:
525 return sbgp_New();
526 case GF_ISOM_BOX_TYPE_SGPD:
527 return sgpd_New();
528 case GF_ISOM_BOX_TYPE_SAIZ:
529 return saiz_New();
530 case GF_ISOM_BOX_TYPE_SAIO:
531 return saio_New();
532 case GF_ISOM_BOX_TYPE_PSSH:
533 return pssh_New();
534 case GF_ISOM_BOX_TYPE_TENC:
535 return tenc_New();
536
537 #ifndef GPAC_DISABLE_ISOM_HINTING
538 case GF_ISOM_BOX_TYPE_RTP_STSD:
539 a = ghnt_New();
540 if (a) a->type = boxType;
541 return a;
542 case GF_ISOM_BOX_TYPE_RTPO:
543 return rtpo_New();
544 case GF_ISOM_BOX_TYPE_HNTI:
545 return hnti_New();
546 case GF_ISOM_BOX_TYPE_SDP:
547 return sdp_New();
548 case GF_ISOM_BOX_TYPE_HINF:
549 return hinf_New();
550 case GF_ISOM_BOX_TYPE_RELY:
551 return rely_New();
552 case GF_ISOM_BOX_TYPE_TIMS:
553 return tims_New();
554 case GF_ISOM_BOX_TYPE_TSRO:
555 return tsro_New();
556 case GF_ISOM_BOX_TYPE_SNRO:
557 return snro_New();
558 case GF_ISOM_BOX_TYPE_TRPY:
559 return trpy_New();
560 case GF_ISOM_BOX_TYPE_NUMP:
561 return nump_New();
562 case GF_ISOM_BOX_TYPE_TOTL:
563 return totl_New();
564 case GF_ISOM_BOX_TYPE_NPCK:
565 return npck_New();
566 case GF_ISOM_BOX_TYPE_TPYL:
567 return tpyl_New();
568 case GF_ISOM_BOX_TYPE_TPAY:
569 return tpay_New();
570 case GF_ISOM_BOX_TYPE_MAXR:
571 return maxr_New();
572 case GF_ISOM_BOX_TYPE_DMED:
573 return dmed_New();
574 case GF_ISOM_BOX_TYPE_DIMM:
575 return dimm_New();
576 case GF_ISOM_BOX_TYPE_DREP:
577 return drep_New();
578 case GF_ISOM_BOX_TYPE_TMIN:
579 return tmin_New();
580 case GF_ISOM_BOX_TYPE_TMAX:
581 return tmax_New();
582 case GF_ISOM_BOX_TYPE_PMAX:
583 return pmax_New();
584 case GF_ISOM_BOX_TYPE_DMAX:
585 return dmax_New();
586 case GF_ISOM_BOX_TYPE_PAYT:
587 return payt_New();
588 case GF_ISOM_BOX_TYPE_NAME:
589 return name_New();
590 #endif /*GPAC_DISABLE_ISOM_HINTING*/
591
592 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
593 case GF_ISOM_BOX_TYPE_MVEX:
594 return mvex_New();
595 case GF_ISOM_BOX_TYPE_MEHD:
596 return mehd_New();
597 case GF_ISOM_BOX_TYPE_TREX:
598 return trex_New();
599 case GF_ISOM_BOX_TYPE_TREP:
600 return trep_New();
601 case GF_ISOM_BOX_TYPE_MOOF:
602 return moof_New();
603 case GF_ISOM_BOX_TYPE_MFHD:
604 return mfhd_New();
605 case GF_ISOM_BOX_TYPE_TRAF:
606 return traf_New();
607 case GF_ISOM_BOX_TYPE_TFHD:
608 return tfhd_New();
609 case GF_ISOM_BOX_TYPE_TRUN:
610 return trun_New();
611 #endif
612
613 /*3GPP boxes*/
614 case GF_ISOM_SUBTYPE_3GP_AMR:
615 case GF_ISOM_SUBTYPE_3GP_AMR_WB:
616 case GF_ISOM_SUBTYPE_3GP_EVRC:
617 case GF_ISOM_SUBTYPE_3GP_QCELP:
618 case GF_ISOM_SUBTYPE_3GP_SMV:
619 return gppa_New(boxType);
620 case GF_ISOM_SUBTYPE_3GP_H263:
621 return gppv_New(boxType);
622 case GF_ISOM_BOX_TYPE_DAMR:
623 case GF_ISOM_BOX_TYPE_DEVC:
624 case GF_ISOM_BOX_TYPE_DQCP:
625 case GF_ISOM_BOX_TYPE_DSMV:
626 case GF_ISOM_BOX_TYPE_D263:
627 return gppc_New(boxType);
628
629 /*AVC boxes*/
630 case GF_ISOM_BOX_TYPE_AVCC:
631 case GF_ISOM_BOX_TYPE_SVCC:
632 a = avcc_New();
633 if (a) a->type = boxType;
634 return a;
635 case GF_ISOM_BOX_TYPE_HVCC:
636 case GF_ISOM_BOX_TYPE_LHVC:
637 a = hvcc_New();
638 if (a) a->type = boxType;
639 return a;
640
641 case GF_ISOM_BOX_TYPE_BTRT:
642 return btrt_New();
643 case GF_ISOM_BOX_TYPE_M4DS:
644 return m4ds_New();
645
646 case GF_ISOM_BOX_TYPE_MP4V:
647 case GF_ISOM_BOX_TYPE_ENCV:
648 case GF_ISOM_BOX_TYPE_AVC1:
649 case GF_ISOM_BOX_TYPE_AVC2:
650 case GF_ISOM_BOX_TYPE_AVC3:
651 case GF_ISOM_BOX_TYPE_AVC4:
652 case GF_ISOM_BOX_TYPE_SVC1:
653 case GF_ISOM_BOX_TYPE_HVC1:
654 case GF_ISOM_BOX_TYPE_HEV1:
655 case GF_ISOM_BOX_TYPE_HVC2:
656 case GF_ISOM_BOX_TYPE_HEV2:
657 case GF_ISOM_BOX_TYPE_LHV1:
658 case GF_ISOM_BOX_TYPE_LHE1:
659 case GF_ISOM_BOX_TYPE_HVT1:
660 return mp4v_encv_avc_hevc_new(boxType);
661
662 /*3GPP streaming text*/
663 case GF_ISOM_BOX_TYPE_FTAB:
664 return ftab_New();
665 case GF_ISOM_BOX_TYPE_TX3G:
666 return tx3g_New();
667 case GF_ISOM_BOX_TYPE_TEXT:
668 return text_New();
669 case GF_ISOM_BOX_TYPE_STYL:
670 return styl_New();
671 case GF_ISOM_BOX_TYPE_HLIT:
672 return hlit_New();
673 case GF_ISOM_BOX_TYPE_HCLR:
674 return hclr_New();
675 case GF_ISOM_BOX_TYPE_KROK:
676 return krok_New();
677 case GF_ISOM_BOX_TYPE_DLAY:
678 return dlay_New();
679 case GF_ISOM_BOX_TYPE_HREF:
680 return href_New();
681 case GF_ISOM_BOX_TYPE_TBOX:
682 return tbox_New();
683 case GF_ISOM_BOX_TYPE_BLNK:
684 return blnk_New();
685 case GF_ISOM_BOX_TYPE_TWRP:
686 return twrp_New();
687
688 /* ISMA 1.0 Encryption and Authentication V 1.0 */
689 case GF_ISOM_BOX_TYPE_IKMS:
690 return iKMS_New();
691 case GF_ISOM_BOX_TYPE_ISFM:
692 return iSFM_New();
693
694 /* ISO FF extensions for MPEG-21 */
695 case GF_ISOM_BOX_TYPE_META:
696 return meta_New();
697 case GF_ISOM_BOX_TYPE_XML:
698 return xml_New();
699 case GF_ISOM_BOX_TYPE_BXML:
700 return bxml_New();
701 case GF_ISOM_BOX_TYPE_ILOC:
702 return iloc_New();
703 case GF_ISOM_BOX_TYPE_PITM:
704 return pitm_New();
705 case GF_ISOM_BOX_TYPE_IPRO:
706 return ipro_New();
707 case GF_ISOM_BOX_TYPE_INFE:
708 return infe_New();
709 case GF_ISOM_BOX_TYPE_IINF:
710 return iinf_New();
711 case GF_ISOM_BOX_TYPE_IREF:
712 return iref_New();
713 case GF_ISOM_BOX_TYPE_SINF:
714 return sinf_New();
715 case GF_ISOM_BOX_TYPE_FRMA:
716 return frma_New();
717 case GF_ISOM_BOX_TYPE_SCHM:
718 return schm_New();
719 case GF_ISOM_BOX_TYPE_SCHI:
720 return schi_New();
721 case GF_ISOM_BOX_TYPE_ENCA:
722 return enca_New();
723 case GF_ISOM_BOX_TYPE_ENCS:
724 return encs_New();
725
726 case GF_ISOM_BOX_TYPE_SENC:
727 return senc_New();
728
729 case GF_ISOM_BOX_UUID_TENC:
730 return piff_tenc_New();
731 case GF_ISOM_BOX_UUID_PSEC:
732 return piff_psec_New();
733 case GF_ISOM_BOX_UUID_PSSH:
734 return piff_pssh_New();
735 case GF_ISOM_BOX_UUID_TFXD:
736 return tfxd_New();
737 case GF_ISOM_BOX_UUID_MSSM:
738 case GF_ISOM_BOX_UUID_TFRF:
739 case GF_ISOM_BOX_TYPE_UUID:
740 return uuid_New();
741
742 #ifndef GPAC_DISABLE_ISOM_ADOBE
743 /* Adobe extensions */
744 case GF_ISOM_BOX_TYPE_ABST:
745 return abst_New();
746 case GF_ISOM_BOX_TYPE_AFRA:
747 return afra_New();
748 case GF_ISOM_BOX_TYPE_ASRT:
749 return asrt_New();
750 case GF_ISOM_BOX_TYPE_AFRT:
751 return afrt_New();
752 #endif
753
754 /* Apple extensions */
755 case GF_ISOM_BOX_TYPE_ILST:
756 return ilst_New();
757
758 case GF_ISOM_BOX_TYPE_0xA9NAM:
759 case GF_ISOM_BOX_TYPE_0xA9CMT:
760 case GF_ISOM_BOX_TYPE_0xA9DAY:
761 case GF_ISOM_BOX_TYPE_0xA9ART:
762 case GF_ISOM_BOX_TYPE_0xA9TRK:
763 case GF_ISOM_BOX_TYPE_0xA9ALB:
764 case GF_ISOM_BOX_TYPE_0xA9COM:
765 case GF_ISOM_BOX_TYPE_0xA9WRT:
766 case GF_ISOM_BOX_TYPE_0xA9TOO:
767 case GF_ISOM_BOX_TYPE_0xA9CPY:
768 case GF_ISOM_BOX_TYPE_0xA9DES:
769 case GF_ISOM_BOX_TYPE_0xA9GEN:
770 case GF_ISOM_BOX_TYPE_0xA9GRP:
771 case GF_ISOM_BOX_TYPE_0xA9ENC:
772 case GF_ISOM_BOX_TYPE_aART:
773 case GF_ISOM_BOX_TYPE_GNRE:
774 case GF_ISOM_BOX_TYPE_DISK:
775 case GF_ISOM_BOX_TYPE_TRKN:
776 case GF_ISOM_BOX_TYPE_TMPO:
777 case GF_ISOM_BOX_TYPE_CPIL:
778 case GF_ISOM_BOX_TYPE_PGAP:
779 case GF_ISOM_BOX_TYPE_COVR:
780 return ListItem_New(boxType);
781
782 case GF_ISOM_BOX_TYPE_DATA:
783 return data_New();
784
785 case GF_ISOM_BOX_TYPE_OHDR:
786 return ohdr_New();
787 case GF_ISOM_BOX_TYPE_GRPI:
788 return grpi_New();
789 case GF_ISOM_BOX_TYPE_MDRI:
790 return mdri_New();
791 case GF_ISOM_BOX_TYPE_ODTT:
792 return odtt_New();
793 case GF_ISOM_BOX_TYPE_ODRB:
794 return odrb_New();
795 case GF_ISOM_BOX_TYPE_ODKM:
796 return odkm_New();
797 case GF_ISOM_BOX_TYPE_ODAF:
798 a = iSFM_New();
799 a->type = GF_ISOM_BOX_TYPE_ODAF;
800 return a;
801
802 case GF_ISOM_BOX_TYPE_PASP:
803 return pasp_New();
804 case GF_ISOM_BOX_TYPE_TSEL:
805 return tsel_New();
806
807 case GF_ISOM_BOX_TYPE_DIMS:
808 return dims_New();
809 case GF_ISOM_BOX_TYPE_DIMC:
810 return dimC_New();
811 case GF_ISOM_BOX_TYPE_DIST:
812 return diST_New();
813
814 case GF_ISOM_BOX_TYPE_METX:
815 case GF_ISOM_BOX_TYPE_METT:
816 return metx_New(boxType);
817
818 case GF_ISOM_BOX_TYPE_AC3:
819 case GF_ISOM_BOX_TYPE_EC3:
820 return ac3_New(boxType);
821 case GF_ISOM_BOX_TYPE_DAC3:
822 case GF_ISOM_BOX_TYPE_DEC3:
823 return dac3_New(boxType);
824
825 case GF_ISOM_BOX_TYPE_LSRC:
826 return lsrc_New();
827 case GF_ISOM_BOX_TYPE_LSR1:
828 return lsr1_New();
829
830 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
831 case GF_ISOM_BOX_TYPE_SIDX:
832 return sidx_New();
833 case GF_ISOM_BOX_TYPE_SUBS:
834 return subs_New();
835 case GF_ISOM_BOX_TYPE_TFDT:
836 return tfdt_New();
837 case GF_ISOM_BOX_TYPE_PCRB:
838 return pcrb_New();
839 #endif
840 case GF_ISOM_BOX_TYPE_RVCC:
841 return rvcc_New();
842
843 case GF_ISOM_BOX_TYPE_PRFT:
844 return prft_New();
845 case GF_ISOM_BOX_TYPE_TRGR:
846 return trgr_New();
847 case GF_ISOM_BOX_TYPE_TRGT:
848 case GF_ISOM_BOX_TYPE_MSRC:
849 case GF_ISOM_BOX_TYPE_CSTG:
850 case GF_ISOM_BOX_TYPE_STER:
851 return trgt_New(boxType);
852
853 #ifndef GPAC_DISABLE_TTXT
854 case GF_ISOM_BOX_TYPE_STXT:
855 return metx_New(GF_ISOM_BOX_TYPE_STXT);
856 case GF_ISOM_BOX_TYPE_TXTC:
857 return txtc_New();
858
859
860
861 case GF_ISOM_BOX_TYPE_STPP:
862 return metx_New(GF_ISOM_BOX_TYPE_STPP);
863 case GF_ISOM_BOX_TYPE_SBTT:
864 return metx_New(GF_ISOM_BOX_TYPE_SBTT);
865 #endif //GPAC_DISABLE_TTXT
866
867 case GF_ISOM_BOX_TYPE_ADKM:
868 return adkm_New();
869 case GF_ISOM_BOX_TYPE_AHDR:
870 return ahdr_New();
871 case GF_ISOM_BOX_TYPE_APRM:
872 return aprm_New();
873 case GF_ISOM_BOX_TYPE_AEIB:
874 return aeib_New();
875 case GF_ISOM_BOX_TYPE_AKEY:
876 return akey_New();
877 case GF_ISOM_BOX_TYPE_FLXS:
878 return flxs_New();
879 case GF_ISOM_BOX_TYPE_ADAF:
880 return adaf_New();
881 default:
882 a = defa_New();
883 if (a) a->type = boxType;
884 return a;
885 }
886 }
887
888 GF_EXPORT
gf_isom_box_add_default(GF_Box * a,GF_Box * subbox)889 GF_Err gf_isom_box_add_default(GF_Box *a, GF_Box *subbox)
890 {
891 if (!a->other_boxes) {
892 a->other_boxes = gf_list_new();
893 if (!a->other_boxes) return GF_OUT_OF_MEM;
894 }
895 return gf_list_add(a->other_boxes, subbox);
896 }
897
898 GF_EXPORT
gf_isom_box_del(GF_Box * a)899 void gf_isom_box_del(GF_Box *a)
900 {
901 if (!a) return;
902 if (a->other_boxes) {
903 gf_isom_box_array_del(a->other_boxes);
904 a->other_boxes = NULL;
905 }
906 switch (a->type) {
907 case GF_ISOM_BOX_TYPE_REFT:
908 reftype_del(a);
909 return;
910 case GF_ISOM_BOX_TYPE_REFI:
911 ireftype_del(a);
912 return;
913 case GF_ISOM_BOX_TYPE_FREE:
914 case GF_ISOM_BOX_TYPE_SKIP:
915 free_del(a);
916 return;
917 case GF_ISOM_BOX_TYPE_MDAT:
918 mdat_del(a);
919 return;
920 case GF_ISOM_BOX_TYPE_MOOV:
921 moov_del(a);
922 return;
923 case GF_ISOM_BOX_TYPE_MVHD:
924 mvhd_del(a);
925 return;
926 case GF_ISOM_BOX_TYPE_MDHD:
927 mdhd_del(a);
928 return;
929 case GF_ISOM_BOX_TYPE_VMHD:
930 vmhd_del(a);
931 return;
932 case GF_ISOM_BOX_TYPE_SMHD:
933 smhd_del(a);
934 return;
935 case GF_ISOM_BOX_TYPE_HMHD:
936 hmhd_del(a);
937 return;
938 case GF_ISOM_BOX_TYPE_ODHD:
939 case GF_ISOM_BOX_TYPE_CRHD:
940 case GF_ISOM_BOX_TYPE_SDHD:
941 case GF_ISOM_BOX_TYPE_NMHD:
942 nmhd_del(a);
943 return;
944 case GF_ISOM_BOX_TYPE_STBL:
945 stbl_del(a);
946 return;
947 case GF_ISOM_BOX_TYPE_DINF:
948 dinf_del(a);
949 return;
950 case GF_ISOM_BOX_TYPE_URL:
951 url_del(a);
952 return;
953 case GF_ISOM_BOX_TYPE_URN:
954 urn_del(a);
955 return;
956 case GF_ISOM_BOX_TYPE_CHPL:
957 chpl_del(a);
958 return;
959 case GF_ISOM_BOX_TYPE_CPRT:
960 cprt_del(a);
961 return;
962 case GF_ISOM_BOX_TYPE_KIND:
963 kind_del(a);
964 return;
965 case GF_ISOM_BOX_TYPE_HDLR:
966 hdlr_del(a);
967 return;
968 case GF_ISOM_BOX_TYPE_IODS:
969 iods_del(a);
970 return;
971 case GF_ISOM_BOX_TYPE_TRAK:
972 trak_del(a);
973 return;
974 case GF_ISOM_BOX_TYPE_MP4S:
975 mp4s_del(a);
976 return;
977 case GF_4CC('2', '6', '4', 'b'):
978 case GF_ISOM_BOX_TYPE_MP4V:
979 mp4v_del(a);
980 return;
981 case GF_ISOM_BOX_TYPE_MP4A:
982 mp4a_del(a);
983 return;
984 case GF_ISOM_BOX_TYPE_GNRM:
985 gnrm_del(a);
986 return;
987 case GF_ISOM_BOX_TYPE_GNRV:
988 gnrv_del(a);
989 return;
990 case GF_ISOM_BOX_TYPE_GNRA:
991 gnra_del(a);
992 return;
993 case GF_ISOM_BOX_TYPE_EDTS:
994 edts_del(a);
995 return;
996 case GF_ISOM_BOX_TYPE_UDTA:
997 udta_del(a);
998 return;
999 case GF_ISOM_BOX_TYPE_DREF:
1000 dref_del(a);
1001 return;
1002 case GF_ISOM_BOX_TYPE_STSD:
1003 stsd_del(a);
1004 return;
1005 case GF_ISOM_BOX_TYPE_STTS:
1006 stts_del(a);
1007 return;
1008 case GF_ISOM_BOX_TYPE_CTTS:
1009 ctts_del(a);
1010 return;
1011 case GF_ISOM_BOX_TYPE_CSLG:
1012 cslg_del(a);
1013 return;
1014 case GF_ISOM_BOX_TYPE_STSH:
1015 stsh_del(a);
1016 return;
1017 case GF_ISOM_BOX_TYPE_ELST:
1018 elst_del(a);
1019 return;
1020 case GF_ISOM_BOX_TYPE_STSC:
1021 stsc_del(a);
1022 return;
1023 case GF_ISOM_BOX_TYPE_STZ2:
1024 case GF_ISOM_BOX_TYPE_STSZ:
1025 stsz_del(a);
1026 return;
1027 case GF_ISOM_BOX_TYPE_STCO:
1028 stco_del(a);
1029 return;
1030 case GF_ISOM_BOX_TYPE_STSS:
1031 stss_del(a);
1032 return;
1033 case GF_ISOM_BOX_TYPE_STDP:
1034 stdp_del(a);
1035 return;
1036 case GF_ISOM_BOX_TYPE_SDTP:
1037 sdtp_del(a);
1038 return;
1039 case GF_ISOM_BOX_TYPE_CO64:
1040 co64_del(a);
1041 return;
1042 case GF_ISOM_BOX_TYPE_ESDS:
1043 esds_del(a);
1044 return;
1045 case GF_ISOM_BOX_TYPE_MINF:
1046 minf_del(a);
1047 return;
1048 case GF_ISOM_BOX_TYPE_TKHD:
1049 tkhd_del(a);
1050 return;
1051 case GF_ISOM_BOX_TYPE_TREF:
1052 tref_del(a);
1053 return;
1054 case GF_ISOM_BOX_TYPE_MDIA:
1055 mdia_del(a);
1056 return;
1057 case GF_ISOM_BOX_TYPE_MFRA:
1058 mfra_del(a);
1059 return;
1060 case GF_ISOM_BOX_TYPE_TFRA:
1061 tfra_del(a);
1062 return;
1063
1064 case GF_ISOM_BOX_TYPE_ELNG:
1065 elng_del(a);
1066 return;
1067 case GF_ISOM_BOX_TYPE_FTYP:
1068 case GF_ISOM_BOX_TYPE_STYP:
1069 ftyp_del(a);
1070 return;
1071 case GF_ISOM_BOX_TYPE_PADB:
1072 padb_del(a);
1073 return;
1074 case GF_ISOM_BOX_TYPE_VOID:
1075 void_del(a);
1076 return;
1077 case GF_ISOM_BOX_TYPE_STSF:
1078 stsf_del(a);
1079 return;
1080 case GF_ISOM_BOX_TYPE_PDIN:
1081 pdin_del(a);
1082 return;
1083 case GF_ISOM_BOX_TYPE_SBGP:
1084 sbgp_del(a);
1085 return;
1086 case GF_ISOM_BOX_TYPE_SGPD:
1087 sgpd_del(a);
1088 return;
1089 case GF_ISOM_BOX_TYPE_SAIZ:
1090 saiz_del(a);
1091 return;
1092 case GF_ISOM_BOX_TYPE_SAIO:
1093 saio_del(a);
1094 return;
1095 case GF_ISOM_BOX_TYPE_PSSH:
1096 pssh_del(a);
1097 return;
1098 case GF_ISOM_BOX_TYPE_TENC:
1099 tenc_del(a);
1100 return;
1101
1102
1103 #ifndef GPAC_DISABLE_ISOM_HINTING
1104 case GF_ISOM_BOX_TYPE_RTP_STSD:
1105 ghnt_del(a);
1106 return;
1107 case GF_ISOM_BOX_TYPE_RTPO:
1108 rtpo_del(a);
1109 return;
1110 case GF_ISOM_BOX_TYPE_HNTI:
1111 hnti_del(a);
1112 return;
1113 case GF_ISOM_BOX_TYPE_SDP:
1114 sdp_del(a);
1115 return;
1116 case GF_ISOM_BOX_TYPE_HINF:
1117 hinf_del(a);
1118 return;
1119 case GF_ISOM_BOX_TYPE_RELY:
1120 rely_del(a);
1121 return;
1122 case GF_ISOM_BOX_TYPE_TIMS:
1123 tims_del(a);
1124 return;
1125 case GF_ISOM_BOX_TYPE_TSRO:
1126 tsro_del(a);
1127 return;
1128 case GF_ISOM_BOX_TYPE_SNRO:
1129 snro_del(a);
1130 return;
1131 case GF_ISOM_BOX_TYPE_TRPY:
1132 trpy_del(a);
1133 return;
1134 case GF_ISOM_BOX_TYPE_NUMP:
1135 nump_del(a);
1136 return;
1137 case GF_ISOM_BOX_TYPE_TOTL:
1138 totl_del(a);
1139 return;
1140 case GF_ISOM_BOX_TYPE_NPCK:
1141 npck_del(a);
1142 return;
1143 case GF_ISOM_BOX_TYPE_TPYL:
1144 tpyl_del(a);
1145 return;
1146 case GF_ISOM_BOX_TYPE_TPAY:
1147 tpay_del(a);
1148 return;
1149 case GF_ISOM_BOX_TYPE_MAXR:
1150 maxr_del(a);
1151 return;
1152 case GF_ISOM_BOX_TYPE_DMED:
1153 dmed_del(a);
1154 return;
1155 case GF_ISOM_BOX_TYPE_DIMM:
1156 dimm_del(a);
1157 return;
1158 case GF_ISOM_BOX_TYPE_DREP:
1159 drep_del(a);
1160 return;
1161 case GF_ISOM_BOX_TYPE_TMIN:
1162 tmin_del(a);
1163 return;
1164 case GF_ISOM_BOX_TYPE_TMAX:
1165 tmax_del(a);
1166 return;
1167 case GF_ISOM_BOX_TYPE_PMAX:
1168 pmax_del(a);
1169 return;
1170 case GF_ISOM_BOX_TYPE_DMAX:
1171 dmax_del(a);
1172 return;
1173 case GF_ISOM_BOX_TYPE_PAYT:
1174 payt_del(a);
1175 return;
1176 case GF_ISOM_BOX_TYPE_NAME:
1177 name_del(a);
1178 return;
1179 #endif /*GPAC_DISABLE_ISOM_HINTING*/
1180
1181 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
1182 case GF_ISOM_BOX_TYPE_MVEX:
1183 mvex_del(a);
1184 return;
1185 case GF_ISOM_BOX_TYPE_MEHD:
1186 mehd_del(a);
1187 return;
1188 case GF_ISOM_BOX_TYPE_TREX:
1189 trex_del(a);
1190 return;
1191 case GF_ISOM_BOX_TYPE_TREP:
1192 trep_del(a);
1193 return;
1194 case GF_ISOM_BOX_TYPE_MOOF:
1195 moof_del(a);
1196 return;
1197 case GF_ISOM_BOX_TYPE_MFHD:
1198 mfhd_del(a);
1199 return;
1200 case GF_ISOM_BOX_TYPE_TRAF:
1201 traf_del(a);
1202 return;
1203 case GF_ISOM_BOX_TYPE_TFHD:
1204 tfhd_del(a);
1205 return;
1206 case GF_ISOM_BOX_TYPE_TFDT:
1207 tfdt_del(a);
1208 return;
1209 case GF_ISOM_BOX_TYPE_TRUN:
1210 trun_del(a);
1211 return;
1212 #endif
1213
1214 case GF_ISOM_SUBTYPE_3GP_AMR:
1215 case GF_ISOM_SUBTYPE_3GP_AMR_WB:
1216 case GF_ISOM_SUBTYPE_3GP_EVRC:
1217 case GF_ISOM_SUBTYPE_3GP_QCELP:
1218 case GF_ISOM_SUBTYPE_3GP_SMV:
1219 gppa_del(a);
1220 return;
1221 case GF_ISOM_SUBTYPE_3GP_H263:
1222 gppv_del(a);
1223 return;
1224 case GF_ISOM_BOX_TYPE_DAMR:
1225 case GF_ISOM_BOX_TYPE_DEVC:
1226 case GF_ISOM_BOX_TYPE_DQCP:
1227 case GF_ISOM_BOX_TYPE_DSMV:
1228 case GF_ISOM_BOX_TYPE_D263:
1229 gppc_del(a);
1230 return;
1231
1232 /*AVC boxes*/
1233 case GF_ISOM_BOX_TYPE_AVCC:
1234 case GF_ISOM_BOX_TYPE_SVCC:
1235 avcc_del(a);
1236 return;
1237 case GF_ISOM_BOX_TYPE_BTRT:
1238 btrt_del(a);
1239 return;
1240 case GF_ISOM_BOX_TYPE_M4DS:
1241 m4ds_del(a);
1242 return;
1243 case GF_ISOM_BOX_TYPE_AVC1:
1244 case GF_ISOM_BOX_TYPE_AVC2:
1245 case GF_ISOM_BOX_TYPE_AVC3:
1246 case GF_ISOM_BOX_TYPE_AVC4:
1247 case GF_ISOM_BOX_TYPE_SVC1:
1248 case GF_ISOM_BOX_TYPE_HVC1:
1249 case GF_ISOM_BOX_TYPE_HEV1:
1250 case GF_ISOM_BOX_TYPE_HVC2:
1251 case GF_ISOM_BOX_TYPE_HEV2:
1252 case GF_ISOM_BOX_TYPE_LHV1:
1253 case GF_ISOM_BOX_TYPE_LHE1:
1254 case GF_ISOM_BOX_TYPE_HVT1:
1255 mp4v_del(a);
1256 return;
1257 case GF_ISOM_BOX_TYPE_HVCC:
1258 case GF_ISOM_BOX_TYPE_LHVC:
1259 hvcc_del(a);
1260 return;
1261
1262 /*3GPP streaming text*/
1263 case GF_ISOM_BOX_TYPE_FTAB:
1264 ftab_del(a);
1265 return;
1266 case GF_ISOM_BOX_TYPE_TX3G:
1267 tx3g_del(a);
1268 return;
1269 case GF_ISOM_BOX_TYPE_TEXT:
1270 text_del(a);
1271 return;
1272 case GF_ISOM_BOX_TYPE_STYL:
1273 styl_del(a);
1274 return;
1275 case GF_ISOM_BOX_TYPE_HLIT:
1276 hlit_del(a);
1277 return;
1278 case GF_ISOM_BOX_TYPE_HCLR:
1279 hclr_del(a);
1280 return;
1281 case GF_ISOM_BOX_TYPE_KROK:
1282 krok_del(a);
1283 return;
1284 case GF_ISOM_BOX_TYPE_DLAY:
1285 dlay_del(a);
1286 return;
1287 case GF_ISOM_BOX_TYPE_HREF:
1288 href_del(a);
1289 return;
1290 case GF_ISOM_BOX_TYPE_TBOX:
1291 tbox_del(a);
1292 return;
1293 case GF_ISOM_BOX_TYPE_BLNK:
1294 blnk_del(a);
1295 return;
1296 case GF_ISOM_BOX_TYPE_TWRP:
1297 twrp_del(a);
1298 return;
1299
1300 /* ISMA 1.0 Encryption and Authentication V 1.0 */
1301 case GF_ISOM_BOX_TYPE_IKMS:
1302 iKMS_del(a);
1303 return;
1304 case GF_ISOM_BOX_TYPE_ISFM:
1305 iSFM_del(a);
1306 return;
1307
1308 /* ISO FF extensions for MPEG-21 */
1309 case GF_ISOM_BOX_TYPE_META:
1310 meta_del(a);
1311 return;
1312 case GF_ISOM_BOX_TYPE_XML:
1313 xml_del(a);
1314 return;
1315 case GF_ISOM_BOX_TYPE_BXML:
1316 bxml_del(a);
1317 return;
1318 case GF_ISOM_BOX_TYPE_ILOC:
1319 iloc_del(a);
1320 return;
1321 case GF_ISOM_BOX_TYPE_PITM:
1322 pitm_del(a);
1323 return;
1324 case GF_ISOM_BOX_TYPE_IPRO:
1325 ipro_del(a);
1326 return;
1327 case GF_ISOM_BOX_TYPE_INFE:
1328 infe_del(a);
1329 return;
1330 case GF_ISOM_BOX_TYPE_IINF:
1331 iinf_del(a);
1332 return;
1333 case GF_ISOM_BOX_TYPE_IREF:
1334 iref_del(a);
1335 return;
1336 case GF_ISOM_BOX_TYPE_SINF:
1337 sinf_del(a);
1338 return;
1339 case GF_ISOM_BOX_TYPE_FRMA:
1340 frma_del(a);
1341 return;
1342 case GF_ISOM_BOX_TYPE_SCHM:
1343 schm_del(a);
1344 return;
1345 case GF_ISOM_BOX_TYPE_SCHI:
1346 schi_del(a);
1347 return;
1348
1349 case GF_ISOM_BOX_TYPE_ENCA:
1350 case GF_ISOM_BOX_TYPE_ENCV:
1351 case GF_ISOM_BOX_TYPE_ENCS:
1352 {
1353 GF_ProtectionInfoBox *sinf = gf_list_get(((GF_SampleEntryBox *)a)->protections, 0);
1354 a->type = sinf->original_format->data_format;
1355 gf_isom_box_del(a);
1356 }
1357 return;
1358 case GF_ISOM_BOX_TYPE_SENC:
1359 senc_del(a);
1360 return;
1361 case GF_ISOM_BOX_TYPE_UUID:
1362 switch (((GF_UnknownUUIDBox *)a)->internal_4cc) {
1363 case GF_ISOM_BOX_UUID_TENC:
1364 piff_tenc_del(a);
1365 return;
1366 case GF_ISOM_BOX_UUID_PSEC:
1367 piff_psec_del(a);
1368 return;
1369 case GF_ISOM_BOX_UUID_PSSH:
1370 piff_pssh_del(a);
1371 return;
1372 case GF_ISOM_BOX_UUID_TFXD:
1373 tfxd_del(a);
1374 return;
1375 case GF_ISOM_BOX_UUID_MSSM:
1376 case GF_ISOM_BOX_UUID_TFRF:
1377 default:
1378 uuid_del(a);
1379 return;
1380 }
1381 return;
1382
1383 #ifndef GPAC_DISABLE_ISOM_ADOBE
1384 /* Adobe extensions */
1385 case GF_ISOM_BOX_TYPE_ABST:
1386 abst_del(a);
1387 return;
1388 case GF_ISOM_BOX_TYPE_AFRA:
1389 afra_del(a);
1390 return;
1391 case GF_ISOM_BOX_TYPE_ASRT:
1392 asrt_del(a);
1393 return;
1394 case GF_ISOM_BOX_TYPE_AFRT:
1395 afrt_del(a);
1396 return;
1397 #endif
1398
1399 /* Apple extensions */
1400 case GF_ISOM_BOX_TYPE_ILST:
1401 ilst_del(a);
1402 return;
1403
1404 case GF_ISOM_BOX_TYPE_0xA9NAM:
1405 case GF_ISOM_BOX_TYPE_0xA9CMT:
1406 case GF_ISOM_BOX_TYPE_0xA9DAY:
1407 case GF_ISOM_BOX_TYPE_0xA9ART:
1408 case GF_ISOM_BOX_TYPE_0xA9TRK:
1409 case GF_ISOM_BOX_TYPE_0xA9ALB:
1410 case GF_ISOM_BOX_TYPE_0xA9COM:
1411 case GF_ISOM_BOX_TYPE_0xA9WRT:
1412 case GF_ISOM_BOX_TYPE_0xA9TOO:
1413 case GF_ISOM_BOX_TYPE_0xA9CPY:
1414 case GF_ISOM_BOX_TYPE_0xA9DES:
1415 case GF_ISOM_BOX_TYPE_0xA9GEN:
1416 case GF_ISOM_BOX_TYPE_0xA9GRP:
1417 case GF_ISOM_BOX_TYPE_0xA9ENC:
1418 case GF_ISOM_BOX_TYPE_aART:
1419 case GF_ISOM_BOX_TYPE_GNRE:
1420 case GF_ISOM_BOX_TYPE_DISK:
1421 case GF_ISOM_BOX_TYPE_TRKN:
1422 case GF_ISOM_BOX_TYPE_TMPO:
1423 case GF_ISOM_BOX_TYPE_CPIL:
1424 case GF_ISOM_BOX_TYPE_PGAP:
1425 case GF_ISOM_BOX_TYPE_COVR:
1426 ListItem_del(a);
1427 return;
1428
1429 case GF_ISOM_BOX_TYPE_DATA:
1430 data_del(a);
1431 return;
1432
1433 case GF_ISOM_BOX_TYPE_OHDR:
1434 ohdr_del(a);
1435 return;
1436 case GF_ISOM_BOX_TYPE_GRPI:
1437 grpi_del(a);
1438 return;
1439 case GF_ISOM_BOX_TYPE_MDRI:
1440 mdri_del(a);
1441 return;
1442 case GF_ISOM_BOX_TYPE_ODTT:
1443 odtt_del(a);
1444 return;
1445 case GF_ISOM_BOX_TYPE_ODRB:
1446 odrb_del(a);
1447 return;
1448 case GF_ISOM_BOX_TYPE_ODKM:
1449 odkm_del(a);
1450 return;
1451 case GF_ISOM_BOX_TYPE_ODAF:
1452 iSFM_del(a);
1453 return;
1454
1455 case GF_ISOM_BOX_TYPE_PASP:
1456 pasp_del(a);
1457 return;
1458 case GF_ISOM_BOX_TYPE_TSEL:
1459 tsel_del(a);
1460 return;
1461
1462 case GF_ISOM_BOX_TYPE_METX:
1463 case GF_ISOM_BOX_TYPE_METT:
1464 metx_del(a);
1465 return;
1466
1467 case GF_ISOM_BOX_TYPE_DIMS:
1468 dims_del(a);
1469 return;
1470 case GF_ISOM_BOX_TYPE_DIMC:
1471 dimC_del(a);
1472 return;
1473 case GF_ISOM_BOX_TYPE_DIST:
1474 diST_del(a);
1475 return;
1476
1477 case GF_ISOM_BOX_TYPE_AC3:
1478 ac3_del(a);
1479 return;
1480 case GF_ISOM_BOX_TYPE_DAC3:
1481 dac3_del(a);
1482 return;
1483
1484 case GF_ISOM_BOX_TYPE_LSRC:
1485 lsrc_del(a);
1486 return;
1487 case GF_ISOM_BOX_TYPE_LSR1:
1488 lsr1_del(a);
1489 return;
1490
1491 case GF_ISOM_BOX_TYPE_SIDX:
1492 sidx_del(a);
1493 return;
1494 case GF_ISOM_BOX_TYPE_PCRB:
1495 pcrb_del(a);
1496 return;
1497 case GF_ISOM_BOX_TYPE_SUBS:
1498 subs_del(a);
1499 return;
1500 case GF_ISOM_BOX_TYPE_RVCC:
1501 rvcc_del(a);
1502 return;
1503
1504 case GF_ISOM_BOX_TYPE_PRFT:
1505 prft_del(a);
1506 return;
1507
1508 case GF_ISOM_BOX_TYPE_TRGR:
1509 trgr_del(a);
1510 return;
1511 case GF_ISOM_BOX_TYPE_TRGT:
1512 trgt_del(a);
1513 return;
1514
1515 #ifndef GPAC_DISABLE_TTXT
1516 case GF_ISOM_BOX_TYPE_STXT:
1517 metx_del(a);
1518 return;
1519 case GF_ISOM_BOX_TYPE_TXTC:
1520 txtc_del(a);
1521 return;
1522
1523
1524 case GF_ISOM_BOX_TYPE_STPP:
1525 metx_del(a);
1526 return;
1527 case GF_ISOM_BOX_TYPE_SBTT:
1528 metx_del(a);
1529 return;
1530
1531 #endif // GPAC_DISABLE_TTXT
1532
1533 case GF_ISOM_BOX_TYPE_ADKM:
1534 adkm_del(a);
1535 return;
1536 case GF_ISOM_BOX_TYPE_AHDR:
1537 ahdr_del(a);
1538 return;
1539 case GF_ISOM_BOX_TYPE_APRM:
1540 aprm_del(a);
1541 return;
1542 case GF_ISOM_BOX_TYPE_AEIB:
1543 aeib_del(a);
1544 return;
1545 case GF_ISOM_BOX_TYPE_AKEY:
1546 akey_del(a);
1547 return;
1548 case GF_ISOM_BOX_TYPE_FLXS:
1549 flxs_del(a);
1550 return;
1551 case GF_ISOM_BOX_TYPE_ADAF:
1552 adaf_del(a);
1553 return;
1554
1555
1556 default:
1557 defa_del(a);
1558 return;
1559 }
1560 }
1561
1562
gf_isom_box_read(GF_Box * a,GF_BitStream * bs)1563 GF_Err gf_isom_box_read(GF_Box *a, GF_BitStream *bs)
1564 {
1565 switch (a->type) {
1566 case GF_ISOM_BOX_TYPE_REFT:
1567 return reftype_Read(a, bs);
1568 case GF_ISOM_BOX_TYPE_REFI:
1569 return ireftype_Read(a, bs);
1570 case GF_ISOM_BOX_TYPE_FREE:
1571 case GF_ISOM_BOX_TYPE_SKIP:
1572 return free_Read(a, bs);
1573 case GF_ISOM_BOX_TYPE_MDAT:
1574 return mdat_Read(a, bs);
1575 case GF_ISOM_BOX_TYPE_MOOV:
1576 return moov_Read(a, bs);
1577 case GF_ISOM_BOX_TYPE_MVHD:
1578 return mvhd_Read(a, bs);
1579 case GF_ISOM_BOX_TYPE_MDHD:
1580 return mdhd_Read(a, bs);
1581 case GF_ISOM_BOX_TYPE_VMHD:
1582 return vmhd_Read(a, bs);
1583 case GF_ISOM_BOX_TYPE_SMHD:
1584 return smhd_Read(a, bs);
1585 case GF_ISOM_BOX_TYPE_HMHD:
1586 return hmhd_Read(a, bs);
1587 case GF_ISOM_BOX_TYPE_ODHD:
1588 case GF_ISOM_BOX_TYPE_CRHD:
1589 case GF_ISOM_BOX_TYPE_SDHD:
1590 case GF_ISOM_BOX_TYPE_NMHD:
1591 case GF_ISOM_BOX_TYPE_STHD:
1592 return nmhd_Read(a, bs);
1593 case GF_ISOM_BOX_TYPE_STBL:
1594 return stbl_Read(a, bs);
1595 case GF_ISOM_BOX_TYPE_DINF:
1596 return dinf_Read(a, bs);
1597 case GF_ISOM_BOX_TYPE_URL:
1598 return url_Read(a, bs);
1599 case GF_ISOM_BOX_TYPE_URN:
1600 return urn_Read(a, bs);
1601 case GF_ISOM_BOX_TYPE_CPRT:
1602 return cprt_Read(a, bs);
1603 case GF_ISOM_BOX_TYPE_KIND:
1604 return kind_Read(a, bs);
1605 case GF_ISOM_BOX_TYPE_HDLR:
1606 return hdlr_Read(a, bs);
1607 case GF_ISOM_BOX_TYPE_IODS:
1608 return iods_Read(a, bs);
1609 case GF_ISOM_BOX_TYPE_TRAK:
1610 return trak_Read(a, bs);
1611 case GF_ISOM_BOX_TYPE_MP4S:
1612 return mp4s_Read(a, bs);
1613 case GF_ISOM_BOX_TYPE_MP4V:
1614 return mp4v_Read(a, bs);
1615 case GF_ISOM_BOX_TYPE_MP4A:
1616 return mp4a_Read(a, bs);
1617 case GF_ISOM_BOX_TYPE_EDTS:
1618 return edts_Read(a, bs);
1619 case GF_ISOM_BOX_TYPE_UDTA:
1620 return udta_Read(a, bs);
1621 case GF_ISOM_BOX_TYPE_DREF:
1622 return dref_Read(a, bs);
1623 case GF_ISOM_BOX_TYPE_STSD:
1624 return stsd_Read(a, bs);
1625 case GF_ISOM_BOX_TYPE_STTS:
1626 return stts_Read(a, bs);
1627 case GF_ISOM_BOX_TYPE_CTTS:
1628 return ctts_Read(a, bs);
1629 case GF_ISOM_BOX_TYPE_CSLG:
1630 return cslg_Read(a, bs);
1631 case GF_ISOM_BOX_TYPE_STSH:
1632 return stsh_Read(a, bs);
1633 case GF_ISOM_BOX_TYPE_ELST:
1634 return elst_Read(a, bs);
1635 case GF_ISOM_BOX_TYPE_STSC:
1636 return stsc_Read(a, bs);
1637 case GF_ISOM_BOX_TYPE_STZ2:
1638 case GF_ISOM_BOX_TYPE_STSZ:
1639 return stsz_Read(a, bs);
1640 case GF_ISOM_BOX_TYPE_STCO:
1641 return stco_Read(a, bs);
1642 case GF_ISOM_BOX_TYPE_STSS:
1643 return stss_Read(a, bs);
1644 case GF_ISOM_BOX_TYPE_STDP:
1645 return stdp_Read(a, bs);
1646 case GF_ISOM_BOX_TYPE_SDTP:
1647 return sdtp_Read(a, bs);
1648 case GF_ISOM_BOX_TYPE_CO64:
1649 return co64_Read(a, bs);
1650 case GF_ISOM_BOX_TYPE_ESDS:
1651 return esds_Read(a, bs);
1652 case GF_ISOM_BOX_TYPE_MINF:
1653 return minf_Read(a, bs);
1654 case GF_ISOM_BOX_TYPE_TKHD:
1655 return tkhd_Read(a, bs);
1656 case GF_ISOM_BOX_TYPE_TREF:
1657 return tref_Read(a, bs);
1658 case GF_ISOM_BOX_TYPE_MDIA:
1659 return mdia_Read(a, bs);
1660 case GF_ISOM_BOX_TYPE_MFRA:
1661 return mfra_Read(a, bs);
1662 case GF_ISOM_BOX_TYPE_TFRA:
1663 return tfra_Read(a, bs);
1664 case GF_ISOM_BOX_TYPE_ELNG:
1665 return elng_Read(a, bs);
1666 case GF_ISOM_BOX_TYPE_CHPL:
1667 return chpl_Read(a, bs);
1668 case GF_ISOM_BOX_TYPE_FTYP:
1669 case GF_ISOM_BOX_TYPE_STYP:
1670 return ftyp_Read(a, bs);
1671 case GF_ISOM_BOX_TYPE_PADB:
1672 return padb_Read(a, bs);
1673 case GF_ISOM_BOX_TYPE_VOID:
1674 return void_Read(a, bs);
1675 case GF_ISOM_BOX_TYPE_STSF:
1676 return stsf_Read(a, bs);
1677 case GF_ISOM_BOX_TYPE_PDIN:
1678 return pdin_Read(a, bs);
1679 case GF_ISOM_BOX_TYPE_SBGP:
1680 return sbgp_Read(a, bs);
1681 case GF_ISOM_BOX_TYPE_SGPD:
1682 return sgpd_Read(a, bs);
1683 case GF_ISOM_BOX_TYPE_SAIZ:
1684 return saiz_Read(a, bs);
1685 case GF_ISOM_BOX_TYPE_SAIO:
1686 return saio_Read(a, bs);
1687 case GF_ISOM_BOX_TYPE_PSSH:
1688 return pssh_Read(a, bs);
1689 case GF_ISOM_BOX_TYPE_TENC:
1690 return tenc_Read(a, bs);
1691
1692 #ifndef GPAC_DISABLE_ISOM_HINTING
1693 case GF_ISOM_BOX_TYPE_RTP_STSD:
1694 return ghnt_Read(a, bs);
1695 case GF_ISOM_BOX_TYPE_RTPO:
1696 return rtpo_Read(a, bs);
1697 case GF_ISOM_BOX_TYPE_HNTI:
1698 return hnti_Read(a, bs);
1699 case GF_ISOM_BOX_TYPE_SDP:
1700 return sdp_Read(a, bs);
1701 case GF_ISOM_BOX_TYPE_HINF:
1702 return hinf_Read(a, bs);
1703 case GF_ISOM_BOX_TYPE_RELY:
1704 return rely_Read(a, bs);
1705 case GF_ISOM_BOX_TYPE_TIMS:
1706 return tims_Read(a, bs);
1707 case GF_ISOM_BOX_TYPE_TSRO:
1708 return tsro_Read(a, bs);
1709 case GF_ISOM_BOX_TYPE_SNRO:
1710 return snro_Read(a, bs);
1711 case GF_ISOM_BOX_TYPE_TRPY:
1712 return trpy_Read(a, bs);
1713 case GF_ISOM_BOX_TYPE_NUMP:
1714 return nump_Read(a, bs);
1715 case GF_ISOM_BOX_TYPE_TOTL:
1716 return totl_Read(a, bs);
1717 case GF_ISOM_BOX_TYPE_NPCK:
1718 return npck_Read(a, bs);
1719 case GF_ISOM_BOX_TYPE_TPYL:
1720 return tpyl_Read(a, bs);
1721 case GF_ISOM_BOX_TYPE_TPAY:
1722 return tpay_Read(a, bs);
1723 case GF_ISOM_BOX_TYPE_MAXR:
1724 return maxr_Read(a, bs);
1725 case GF_ISOM_BOX_TYPE_DMED:
1726 return dmed_Read(a, bs);
1727 case GF_ISOM_BOX_TYPE_DIMM:
1728 return dimm_Read(a, bs);
1729 case GF_ISOM_BOX_TYPE_DREP:
1730 return drep_Read(a, bs);
1731 case GF_ISOM_BOX_TYPE_TMIN:
1732 return tmin_Read(a, bs);
1733 case GF_ISOM_BOX_TYPE_TMAX:
1734 return tmax_Read(a, bs);
1735 case GF_ISOM_BOX_TYPE_PMAX:
1736 return pmax_Read(a, bs);
1737 case GF_ISOM_BOX_TYPE_DMAX:
1738 return dmax_Read(a, bs);
1739 case GF_ISOM_BOX_TYPE_PAYT:
1740 return payt_Read(a, bs);
1741 case GF_ISOM_BOX_TYPE_NAME:
1742 return name_Read(a, bs);
1743 #endif /*GPAC_DISABLE_ISOM_HINTING*/
1744
1745 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
1746 case GF_ISOM_BOX_TYPE_MVEX:
1747 return mvex_Read(a, bs);
1748 case GF_ISOM_BOX_TYPE_MEHD:
1749 return mehd_Read(a, bs);
1750 case GF_ISOM_BOX_TYPE_TREX:
1751 return trex_Read(a, bs);
1752 case GF_ISOM_BOX_TYPE_TREP:
1753 return trep_Read(a, bs);
1754 case GF_ISOM_BOX_TYPE_MOOF:
1755 return moof_Read(a, bs);
1756 case GF_ISOM_BOX_TYPE_MFHD:
1757 return mfhd_Read(a, bs);
1758 case GF_ISOM_BOX_TYPE_TRAF:
1759 return traf_Read(a, bs);
1760 case GF_ISOM_BOX_TYPE_TFHD:
1761 return tfhd_Read(a, bs);
1762 case GF_ISOM_BOX_TYPE_TFDT:
1763 return tfdt_Read(a, bs);
1764 case GF_ISOM_BOX_TYPE_TRUN:
1765 return trun_Read(a, bs);
1766 #endif
1767
1768
1769 /*3GPP boxes*/
1770 case GF_ISOM_SUBTYPE_3GP_AMR:
1771 case GF_ISOM_SUBTYPE_3GP_AMR_WB:
1772 case GF_ISOM_SUBTYPE_3GP_EVRC:
1773 case GF_ISOM_SUBTYPE_3GP_QCELP:
1774 case GF_ISOM_SUBTYPE_3GP_SMV:
1775 return gppa_Read(a, bs);
1776 case GF_ISOM_SUBTYPE_3GP_H263:
1777 return gppv_Read(a, bs);
1778 case GF_ISOM_BOX_TYPE_DAMR:
1779 case GF_ISOM_BOX_TYPE_DEVC:
1780 case GF_ISOM_BOX_TYPE_DQCP:
1781 case GF_ISOM_BOX_TYPE_DSMV:
1782 case GF_ISOM_BOX_TYPE_D263:
1783 return gppc_Read(a, bs);
1784
1785 case GF_ISOM_BOX_TYPE_AVCC:
1786 case GF_ISOM_BOX_TYPE_SVCC:
1787 return avcc_Read(a, bs);
1788 case GF_ISOM_BOX_TYPE_BTRT:
1789 return btrt_Read(a, bs);
1790 case GF_ISOM_BOX_TYPE_M4DS:
1791 return m4ds_Read(a, bs);
1792 case GF_ISOM_BOX_TYPE_AVC1:
1793 case GF_ISOM_BOX_TYPE_AVC2:
1794 case GF_ISOM_BOX_TYPE_AVC3:
1795 case GF_ISOM_BOX_TYPE_AVC4:
1796 case GF_ISOM_BOX_TYPE_SVC1:
1797 case GF_ISOM_BOX_TYPE_HVC1:
1798 case GF_ISOM_BOX_TYPE_HEV1:
1799 case GF_ISOM_BOX_TYPE_HVC2:
1800 case GF_ISOM_BOX_TYPE_HEV2:
1801 case GF_ISOM_BOX_TYPE_LHV1:
1802 case GF_ISOM_BOX_TYPE_LHE1:
1803 case GF_ISOM_BOX_TYPE_HVT1:
1804 return mp4v_Read(a, bs);
1805 case GF_ISOM_BOX_TYPE_HVCC:
1806 case GF_ISOM_BOX_TYPE_LHVC:
1807 return hvcc_Read(a, bs);
1808
1809 /*3GPP streaming text*/
1810 case GF_ISOM_BOX_TYPE_FTAB:
1811 return ftab_Read(a, bs);
1812 case GF_ISOM_BOX_TYPE_TEXT:
1813 return text_Read(a, bs);
1814 case GF_ISOM_BOX_TYPE_TX3G:
1815 return tx3g_Read(a, bs);
1816 case GF_ISOM_BOX_TYPE_STYL:
1817 return styl_Read(a, bs);
1818 case GF_ISOM_BOX_TYPE_HLIT:
1819 return hlit_Read(a, bs);
1820 case GF_ISOM_BOX_TYPE_HCLR:
1821 return hclr_Read(a, bs);
1822 case GF_ISOM_BOX_TYPE_KROK:
1823 return krok_Read(a, bs);
1824 case GF_ISOM_BOX_TYPE_DLAY:
1825 return dlay_Read(a, bs);
1826 case GF_ISOM_BOX_TYPE_HREF:
1827 return href_Read(a, bs);
1828 case GF_ISOM_BOX_TYPE_TBOX:
1829 return tbox_Read(a, bs);
1830 case GF_ISOM_BOX_TYPE_BLNK:
1831 return blnk_Read(a, bs);
1832 case GF_ISOM_BOX_TYPE_TWRP:
1833 return twrp_Read(a, bs);
1834
1835 /* ISMA 1.0 Encryption and Authentication V 1.0 */
1836 case GF_ISOM_BOX_TYPE_IKMS:
1837 return iKMS_Read(a, bs);
1838 case GF_ISOM_BOX_TYPE_ISFM:
1839 return iSFM_Read(a, bs);
1840
1841 /* ISO FF extensions for MPEG-21 */
1842 case GF_ISOM_BOX_TYPE_META:
1843 return meta_Read(a, bs);
1844 case GF_ISOM_BOX_TYPE_XML:
1845 return xml_Read(a, bs);
1846 case GF_ISOM_BOX_TYPE_BXML:
1847 return bxml_Read(a, bs);
1848 case GF_ISOM_BOX_TYPE_ILOC:
1849 return iloc_Read(a, bs);
1850 case GF_ISOM_BOX_TYPE_PITM:
1851 return pitm_Read(a, bs);
1852 case GF_ISOM_BOX_TYPE_IPRO:
1853 return ipro_Read(a, bs);
1854 case GF_ISOM_BOX_TYPE_INFE:
1855 return infe_Read(a, bs);
1856 case GF_ISOM_BOX_TYPE_IINF:
1857 return iinf_Read(a, bs);
1858 case GF_ISOM_BOX_TYPE_IREF:
1859 return iref_Read(a, bs);
1860 case GF_ISOM_BOX_TYPE_SINF:
1861 return sinf_Read(a, bs);
1862 case GF_ISOM_BOX_TYPE_FRMA:
1863 return frma_Read(a, bs);
1864 case GF_ISOM_BOX_TYPE_SCHM:
1865 return schm_Read(a, bs);
1866 case GF_ISOM_BOX_TYPE_SCHI:
1867 return schi_Read(a, bs);
1868 case GF_ISOM_BOX_TYPE_ENCA:
1869 return mp4a_Read(a, bs);
1870 case GF_ISOM_BOX_TYPE_ENCV:
1871 return mp4v_Read(a, bs);
1872 case GF_ISOM_BOX_TYPE_ENCS:
1873 return mp4s_Read(a, bs);
1874 case GF_ISOM_BOX_TYPE_SENC:
1875 return senc_Read(a, bs);
1876 case GF_ISOM_BOX_TYPE_UUID:
1877 switch (((GF_UnknownUUIDBox *)a)->internal_4cc) {
1878 case GF_ISOM_BOX_UUID_TENC:
1879 return piff_tenc_Read(a, bs);
1880 case GF_ISOM_BOX_UUID_PSEC:
1881 return piff_psec_Read(a, bs);
1882 case GF_ISOM_BOX_UUID_PSSH:
1883 return piff_pssh_Read(a, bs);
1884 case GF_ISOM_BOX_UUID_TFXD:
1885 return tfxd_Read(a, bs);
1886 case GF_ISOM_BOX_UUID_MSSM:
1887 case GF_ISOM_BOX_UUID_TFRF:
1888 default:
1889 return uuid_Read(a, bs);
1890 }
1891
1892 #ifndef GPAC_DISABLE_ISOM_ADOBE
1893 /* Adobe extensions */
1894 case GF_ISOM_BOX_TYPE_ABST:
1895 return abst_Read(a, bs);
1896 case GF_ISOM_BOX_TYPE_AFRA:
1897 return afra_Read(a, bs);
1898 case GF_ISOM_BOX_TYPE_ASRT:
1899 return asrt_Read(a, bs);
1900 case GF_ISOM_BOX_TYPE_AFRT:
1901 return afrt_Read(a, bs);
1902 #endif
1903
1904 /* Apple extensions */
1905 case GF_ISOM_BOX_TYPE_ILST:
1906 return ilst_Read(a, bs);
1907
1908 case GF_ISOM_BOX_TYPE_0xA9NAM:
1909 case GF_ISOM_BOX_TYPE_0xA9CMT:
1910 case GF_ISOM_BOX_TYPE_0xA9DAY:
1911 case GF_ISOM_BOX_TYPE_0xA9ART:
1912 case GF_ISOM_BOX_TYPE_0xA9TRK:
1913 case GF_ISOM_BOX_TYPE_0xA9ALB:
1914 case GF_ISOM_BOX_TYPE_0xA9COM:
1915 case GF_ISOM_BOX_TYPE_0xA9WRT:
1916 case GF_ISOM_BOX_TYPE_0xA9TOO:
1917 case GF_ISOM_BOX_TYPE_0xA9CPY:
1918 case GF_ISOM_BOX_TYPE_0xA9DES:
1919 case GF_ISOM_BOX_TYPE_0xA9GEN:
1920 case GF_ISOM_BOX_TYPE_0xA9GRP:
1921 case GF_ISOM_BOX_TYPE_0xA9ENC:
1922 case GF_ISOM_BOX_TYPE_aART:
1923 case GF_ISOM_BOX_TYPE_GNRE:
1924 case GF_ISOM_BOX_TYPE_DISK:
1925 case GF_ISOM_BOX_TYPE_TRKN:
1926 case GF_ISOM_BOX_TYPE_TMPO:
1927 case GF_ISOM_BOX_TYPE_CPIL:
1928 case GF_ISOM_BOX_TYPE_PGAP:
1929 case GF_ISOM_BOX_TYPE_COVR:
1930 return ListItem_Read(a, bs);
1931
1932 case GF_ISOM_BOX_TYPE_DATA:
1933 return data_Read(a, bs);
1934
1935 case GF_ISOM_BOX_TYPE_OHDR:
1936 return ohdr_Read(a, bs);
1937 case GF_ISOM_BOX_TYPE_GRPI:
1938 return grpi_Read(a, bs);
1939 case GF_ISOM_BOX_TYPE_MDRI:
1940 return mdri_Read(a, bs);
1941 case GF_ISOM_BOX_TYPE_ODTT:
1942 return odtt_Read(a, bs);
1943 case GF_ISOM_BOX_TYPE_ODRB:
1944 return odrb_Read(a, bs);
1945 case GF_ISOM_BOX_TYPE_ODKM:
1946 return odkm_Read(a, bs);
1947 case GF_ISOM_BOX_TYPE_ODAF:
1948 return iSFM_Read(a, bs);
1949
1950 case GF_ISOM_BOX_TYPE_PASP:
1951 return pasp_Read(a, bs);
1952 case GF_ISOM_BOX_TYPE_TSEL:
1953 return tsel_Read(a, bs);
1954
1955 case GF_ISOM_BOX_TYPE_METX:
1956 case GF_ISOM_BOX_TYPE_METT:
1957 return metx_Read(a, bs);
1958
1959 case GF_ISOM_BOX_TYPE_DIMS:
1960 return dims_Read(a, bs);
1961 case GF_ISOM_BOX_TYPE_DIMC:
1962 return dimC_Read(a, bs);
1963 case GF_ISOM_BOX_TYPE_DIST:
1964 return diST_Read(a, bs);
1965
1966 case GF_ISOM_BOX_TYPE_AC3:
1967 return ac3_Read(a, bs);
1968 case GF_ISOM_BOX_TYPE_DAC3:
1969 return dac3_Read(a, bs);
1970
1971 case GF_ISOM_BOX_TYPE_LSRC:
1972 return lsrc_Read(a, bs);
1973 case GF_ISOM_BOX_TYPE_LSR1:
1974 return lsr1_Read(a, bs);
1975
1976 case GF_ISOM_BOX_TYPE_SIDX:
1977 return sidx_Read(a, bs);
1978 case GF_ISOM_BOX_TYPE_SUBS:
1979 return subs_Read(a, bs);
1980 case GF_ISOM_BOX_TYPE_RVCC:
1981 return rvcc_Read(a, bs);
1982 case GF_ISOM_BOX_TYPE_PCRB:
1983 return pcrb_Read(a, bs);
1984 case GF_ISOM_BOX_TYPE_PRFT:
1985 return prft_Read(a, bs);
1986
1987 case GF_ISOM_BOX_TYPE_TRGR:
1988 return trgr_Read(a, bs);
1989 case GF_ISOM_BOX_TYPE_TRGT:
1990 return trgt_Read(a, bs);
1991
1992 #ifndef GPAC_DISABLE_TTXT
1993 case GF_ISOM_BOX_TYPE_STXT:
1994 return metx_Read(a, bs);
1995 case GF_ISOM_BOX_TYPE_TXTC:
1996 return txtc_Read(a, bs);
1997
1998
1999
2000 case GF_ISOM_BOX_TYPE_STPP:
2001 return metx_Read(a, bs);
2002 case GF_ISOM_BOX_TYPE_SBTT:
2003 return metx_Read(a, bs);
2004
2005 #endif // GPAC_DISABLE_TTXT
2006
2007 case GF_ISOM_BOX_TYPE_ADKM:
2008 return adkm_Read(a, bs);
2009 case GF_ISOM_BOX_TYPE_AHDR:
2010 return ahdr_Read(a, bs);
2011 case GF_ISOM_BOX_TYPE_APRM:
2012 return aprm_Read(a, bs);
2013 case GF_ISOM_BOX_TYPE_AEIB:
2014 return aeib_Read(a, bs);
2015 case GF_ISOM_BOX_TYPE_AKEY:
2016 return akey_Read(a, bs);
2017 case GF_ISOM_BOX_TYPE_FLXS:
2018 return flxs_Read(a, bs);
2019 case GF_ISOM_BOX_TYPE_ADAF:
2020 return adaf_Read(a, bs);
2021
2022
2023 default:
2024 return defa_Read(a, bs);
2025 }
2026 }
2027
2028 #ifndef GPAC_DISABLE_ISOM_WRITE
2029
gf_isom_box_write_listing(GF_Box * a,GF_BitStream * bs)2030 GF_Err gf_isom_box_write_listing(GF_Box *a, GF_BitStream *bs)
2031 {
2032 switch (a->type) {
2033 case GF_ISOM_BOX_TYPE_REFT:
2034 return reftype_Write(a, bs);
2035 case GF_ISOM_BOX_TYPE_REFI:
2036 return ireftype_Write(a, bs);
2037 case GF_ISOM_BOX_TYPE_FREE:
2038 case GF_ISOM_BOX_TYPE_SKIP:
2039 return free_Write(a, bs);
2040 case GF_ISOM_BOX_TYPE_MDAT:
2041 return mdat_Write(a, bs);
2042 case GF_ISOM_BOX_TYPE_MOOV:
2043 return moov_Write(a, bs);
2044 case GF_ISOM_BOX_TYPE_MVHD:
2045 return mvhd_Write(a, bs);
2046 case GF_ISOM_BOX_TYPE_MDHD:
2047 return mdhd_Write(a, bs);
2048 case GF_ISOM_BOX_TYPE_VMHD:
2049 return vmhd_Write(a, bs);
2050 case GF_ISOM_BOX_TYPE_SMHD:
2051 return smhd_Write(a, bs);
2052 case GF_ISOM_BOX_TYPE_HMHD:
2053 return hmhd_Write(a, bs);
2054 case GF_ISOM_BOX_TYPE_ODHD:
2055 case GF_ISOM_BOX_TYPE_CRHD:
2056 case GF_ISOM_BOX_TYPE_SDHD:
2057 case GF_ISOM_BOX_TYPE_NMHD:
2058 case GF_ISOM_BOX_TYPE_STHD:
2059 return nmhd_Write(a, bs);
2060 case GF_ISOM_BOX_TYPE_STBL:
2061 return stbl_Write(a, bs);
2062 case GF_ISOM_BOX_TYPE_DINF:
2063 return dinf_Write(a, bs);
2064 case GF_ISOM_BOX_TYPE_URL:
2065 return url_Write(a, bs);
2066 case GF_ISOM_BOX_TYPE_URN:
2067 return urn_Write(a, bs);
2068 case GF_ISOM_BOX_TYPE_CHPL:
2069 return chpl_Write(a, bs);
2070 case GF_ISOM_BOX_TYPE_CPRT:
2071 return cprt_Write(a, bs);
2072 case GF_ISOM_BOX_TYPE_KIND:
2073 return kind_Write(a, bs);
2074 case GF_ISOM_BOX_TYPE_HDLR:
2075 return hdlr_Write(a, bs);
2076 case GF_ISOM_BOX_TYPE_IODS:
2077 return iods_Write(a, bs);
2078 case GF_ISOM_BOX_TYPE_TRAK:
2079 return trak_Write(a, bs);
2080 case GF_ISOM_BOX_TYPE_MP4S:
2081 return mp4s_Write(a, bs);
2082 case GF_ISOM_BOX_TYPE_MP4V:
2083 return mp4v_Write(a, bs);
2084 case GF_ISOM_BOX_TYPE_MP4A:
2085 return mp4a_Write(a, bs);
2086 case GF_ISOM_BOX_TYPE_GNRM:
2087 return gnrm_Write(a, bs);
2088 case GF_ISOM_BOX_TYPE_GNRV:
2089 return gnrv_Write(a, bs);
2090 case GF_ISOM_BOX_TYPE_GNRA:
2091 return gnra_Write(a, bs);
2092 case GF_ISOM_BOX_TYPE_EDTS:
2093 return edts_Write(a, bs);
2094 case GF_ISOM_BOX_TYPE_UDTA:
2095 return udta_Write(a, bs);
2096 case GF_ISOM_BOX_TYPE_DREF:
2097 return dref_Write(a, bs);
2098 case GF_ISOM_BOX_TYPE_STSD:
2099 return stsd_Write(a, bs);
2100 case GF_ISOM_BOX_TYPE_STTS:
2101 return stts_Write(a, bs);
2102 case GF_ISOM_BOX_TYPE_CTTS:
2103 return ctts_Write(a, bs);
2104 case GF_ISOM_BOX_TYPE_CSLG:
2105 return cslg_Write(a, bs);
2106 case GF_ISOM_BOX_TYPE_STSH:
2107 return stsh_Write(a, bs);
2108 case GF_ISOM_BOX_TYPE_ELST:
2109 return elst_Write(a, bs);
2110 case GF_ISOM_BOX_TYPE_STSC:
2111 return stsc_Write(a, bs);
2112 case GF_ISOM_BOX_TYPE_STZ2:
2113 case GF_ISOM_BOX_TYPE_STSZ:
2114 return stsz_Write(a, bs);
2115 case GF_ISOM_BOX_TYPE_STCO:
2116 return stco_Write(a, bs);
2117 case GF_ISOM_BOX_TYPE_STSS:
2118 return stss_Write(a, bs);
2119 case GF_ISOM_BOX_TYPE_STDP:
2120 return stdp_Write(a, bs);
2121 case GF_ISOM_BOX_TYPE_SDTP:
2122 return sdtp_Write(a, bs);
2123 case GF_ISOM_BOX_TYPE_CO64:
2124 return co64_Write(a, bs);
2125 case GF_ISOM_BOX_TYPE_ESDS:
2126 return esds_Write(a, bs);
2127 case GF_ISOM_BOX_TYPE_MINF:
2128 return minf_Write(a, bs);
2129 case GF_ISOM_BOX_TYPE_TKHD:
2130 return tkhd_Write(a, bs);
2131 case GF_ISOM_BOX_TYPE_TREF:
2132 return tref_Write(a, bs);
2133 case GF_ISOM_BOX_TYPE_MDIA:
2134 return mdia_Write(a, bs);
2135 case GF_ISOM_BOX_TYPE_ELNG:
2136 return elng_Write(a, bs);
2137 case GF_ISOM_BOX_TYPE_FTYP:
2138 case GF_ISOM_BOX_TYPE_STYP:
2139 return ftyp_Write(a, bs);
2140 case GF_ISOM_BOX_TYPE_PADB:
2141 return padb_Write(a, bs);
2142 case GF_ISOM_BOX_TYPE_VOID:
2143 return void_Write(a, bs);
2144 case GF_ISOM_BOX_TYPE_STSF:
2145 return stsf_Write(a, bs);
2146 case GF_ISOM_BOX_TYPE_PDIN:
2147 return pdin_Write(a, bs);
2148 case GF_ISOM_BOX_TYPE_SBGP:
2149 return sbgp_Write(a, bs);
2150 case GF_ISOM_BOX_TYPE_SGPD:
2151 return sgpd_Write(a, bs);
2152 case GF_ISOM_BOX_TYPE_SAIZ:
2153 return saiz_Write(a, bs);
2154 case GF_ISOM_BOX_TYPE_SAIO:
2155 return saio_Write(a, bs);
2156 case GF_ISOM_BOX_TYPE_PSSH:
2157 return pssh_Write(a, bs);
2158 case GF_ISOM_BOX_TYPE_TENC:
2159 return tenc_Write(a, bs);
2160
2161 #ifndef GPAC_DISABLE_ISOM_HINTING
2162 case GF_ISOM_BOX_TYPE_RTP_STSD:
2163 return ghnt_Write(a, bs);
2164 case GF_ISOM_BOX_TYPE_RTPO:
2165 return rtpo_Write(a, bs);
2166 case GF_ISOM_BOX_TYPE_HNTI:
2167 return hnti_Write(a, bs);
2168 case GF_ISOM_BOX_TYPE_SDP:
2169 return sdp_Write(a, bs);
2170 case GF_ISOM_BOX_TYPE_HINF:
2171 return hinf_Write(a, bs);
2172 case GF_ISOM_BOX_TYPE_RELY:
2173 return rely_Write(a, bs);
2174 case GF_ISOM_BOX_TYPE_TIMS:
2175 return tims_Write(a, bs);
2176 case GF_ISOM_BOX_TYPE_TSRO:
2177 return tsro_Write(a, bs);
2178 case GF_ISOM_BOX_TYPE_SNRO:
2179 return snro_Write(a, bs);
2180 case GF_ISOM_BOX_TYPE_TRPY:
2181 return trpy_Write(a, bs);
2182 case GF_ISOM_BOX_TYPE_NUMP:
2183 return nump_Write(a, bs);
2184 case GF_ISOM_BOX_TYPE_TOTL:
2185 return totl_Write(a, bs);
2186 case GF_ISOM_BOX_TYPE_NPCK:
2187 return npck_Write(a, bs);
2188 case GF_ISOM_BOX_TYPE_TPYL:
2189 return tpyl_Write(a, bs);
2190 case GF_ISOM_BOX_TYPE_TPAY:
2191 return tpay_Write(a, bs);
2192 case GF_ISOM_BOX_TYPE_MAXR:
2193 return maxr_Write(a, bs);
2194 case GF_ISOM_BOX_TYPE_DMED:
2195 return dmed_Write(a, bs);
2196 case GF_ISOM_BOX_TYPE_DIMM:
2197 return dimm_Write(a, bs);
2198 case GF_ISOM_BOX_TYPE_DREP:
2199 return drep_Write(a, bs);
2200 case GF_ISOM_BOX_TYPE_TMIN:
2201 return tmin_Write(a, bs);
2202 case GF_ISOM_BOX_TYPE_TMAX:
2203 return tmax_Write(a, bs);
2204 case GF_ISOM_BOX_TYPE_PMAX:
2205 return pmax_Write(a, bs);
2206 case GF_ISOM_BOX_TYPE_DMAX:
2207 return dmax_Write(a, bs);
2208 case GF_ISOM_BOX_TYPE_PAYT:
2209 return payt_Write(a, bs);
2210 case GF_ISOM_BOX_TYPE_NAME:
2211 return name_Write(a, bs);
2212 #endif /*GPAC_DISABLE_ISOM_HINTING*/
2213
2214 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
2215 case GF_ISOM_BOX_TYPE_MVEX:
2216 return mvex_Write(a, bs);
2217 case GF_ISOM_BOX_TYPE_MEHD:
2218 return mehd_Write(a, bs);
2219 case GF_ISOM_BOX_TYPE_TREX:
2220 return trex_Write(a, bs);
2221 case GF_ISOM_BOX_TYPE_TREP:
2222 return trep_Write(a, bs);
2223 case GF_ISOM_BOX_TYPE_MOOF:
2224 return moof_Write(a, bs);
2225 case GF_ISOM_BOX_TYPE_MFHD:
2226 return mfhd_Write(a, bs);
2227 case GF_ISOM_BOX_TYPE_TRAF:
2228 return traf_Write(a, bs);
2229 case GF_ISOM_BOX_TYPE_TFHD:
2230 return tfhd_Write(a, bs);
2231 case GF_ISOM_BOX_TYPE_TFDT:
2232 return tfdt_Write(a, bs);
2233 case GF_ISOM_BOX_TYPE_TRUN:
2234 return trun_Write(a, bs);
2235 #endif
2236
2237 /*3GPP boxes*/
2238 case GF_ISOM_SUBTYPE_3GP_AMR:
2239 case GF_ISOM_SUBTYPE_3GP_AMR_WB:
2240 case GF_ISOM_SUBTYPE_3GP_EVRC:
2241 case GF_ISOM_SUBTYPE_3GP_QCELP:
2242 case GF_ISOM_SUBTYPE_3GP_SMV:
2243 return gppa_Write(a, bs);
2244 case GF_ISOM_SUBTYPE_3GP_H263:
2245 return gppv_Write(a, bs);
2246 case GF_ISOM_BOX_TYPE_DAMR:
2247 case GF_ISOM_BOX_TYPE_DEVC:
2248 case GF_ISOM_BOX_TYPE_DQCP:
2249 case GF_ISOM_BOX_TYPE_DSMV:
2250 case GF_ISOM_BOX_TYPE_D263:
2251 return gppc_Write(a, bs);
2252
2253 case GF_ISOM_BOX_TYPE_AVCC:
2254 case GF_ISOM_BOX_TYPE_SVCC:
2255 return avcc_Write(a, bs);
2256 case GF_ISOM_BOX_TYPE_HVCC:
2257 case GF_ISOM_BOX_TYPE_LHVC:
2258 return hvcc_Write(a, bs);
2259 case GF_ISOM_BOX_TYPE_BTRT:
2260 return btrt_Write(a, bs);
2261 case GF_ISOM_BOX_TYPE_M4DS:
2262 return m4ds_Write(a, bs);
2263 case GF_ISOM_BOX_TYPE_AVC1:
2264 case GF_ISOM_BOX_TYPE_AVC2:
2265 case GF_ISOM_BOX_TYPE_AVC3:
2266 case GF_ISOM_BOX_TYPE_AVC4:
2267 case GF_ISOM_BOX_TYPE_SVC1:
2268 case GF_ISOM_BOX_TYPE_HVC1:
2269 case GF_ISOM_BOX_TYPE_HEV1:
2270 case GF_ISOM_BOX_TYPE_HVC2:
2271 case GF_ISOM_BOX_TYPE_HEV2:
2272 case GF_ISOM_BOX_TYPE_LHV1:
2273 case GF_ISOM_BOX_TYPE_LHE1:
2274 case GF_ISOM_BOX_TYPE_HVT1:
2275 return mp4v_Write(a, bs);
2276
2277 /*3GPP streaming text*/
2278 case GF_ISOM_BOX_TYPE_FTAB:
2279 return ftab_Write(a, bs);
2280 case GF_ISOM_BOX_TYPE_TX3G:
2281 return tx3g_Write(a, bs);
2282 case GF_ISOM_BOX_TYPE_TEXT:
2283 return text_Write(a, bs);
2284 case GF_ISOM_BOX_TYPE_STYL:
2285 return styl_Write(a, bs);
2286 case GF_ISOM_BOX_TYPE_HLIT:
2287 return hlit_Write(a, bs);
2288 case GF_ISOM_BOX_TYPE_HCLR:
2289 return hclr_Write(a, bs);
2290 case GF_ISOM_BOX_TYPE_KROK:
2291 return krok_Write(a, bs);
2292 case GF_ISOM_BOX_TYPE_DLAY:
2293 return dlay_Write(a, bs);
2294 case GF_ISOM_BOX_TYPE_HREF:
2295 return href_Write(a, bs);
2296 case GF_ISOM_BOX_TYPE_TBOX:
2297 return tbox_Write(a, bs);
2298 case GF_ISOM_BOX_TYPE_BLNK:
2299 return blnk_Write(a, bs);
2300 case GF_ISOM_BOX_TYPE_TWRP:
2301 return twrp_Write(a, bs);
2302
2303 /* ISMA 1.0 Encryption and Authentication V 1.0 */
2304 case GF_ISOM_BOX_TYPE_IKMS:
2305 return iKMS_Write(a, bs);
2306 case GF_ISOM_BOX_TYPE_ISFM:
2307 return iSFM_Write(a, bs);
2308
2309 /* ISO FF extensions for MPEG-21 */
2310 case GF_ISOM_BOX_TYPE_META:
2311 return meta_Write(a, bs);
2312 case GF_ISOM_BOX_TYPE_XML:
2313 return xml_Write(a, bs);
2314 case GF_ISOM_BOX_TYPE_BXML:
2315 return bxml_Write(a, bs);
2316 case GF_ISOM_BOX_TYPE_ILOC:
2317 return iloc_Write(a, bs);
2318 case GF_ISOM_BOX_TYPE_PITM:
2319 return pitm_Write(a, bs);
2320 case GF_ISOM_BOX_TYPE_IPRO:
2321 return ipro_Write(a, bs);
2322 case GF_ISOM_BOX_TYPE_INFE:
2323 return infe_Write(a, bs);
2324 case GF_ISOM_BOX_TYPE_IINF:
2325 return iinf_Write(a, bs);
2326 case GF_ISOM_BOX_TYPE_IREF:
2327 return iref_Write(a, bs);
2328 case GF_ISOM_BOX_TYPE_SINF:
2329 return sinf_Write(a, bs);
2330 case GF_ISOM_BOX_TYPE_FRMA:
2331 return frma_Write(a, bs);
2332 case GF_ISOM_BOX_TYPE_SCHM:
2333 return schm_Write(a, bs);
2334 case GF_ISOM_BOX_TYPE_SCHI:
2335 return schi_Write(a, bs);
2336 case GF_ISOM_BOX_TYPE_ENCA:
2337 return mp4a_Write(a, bs);
2338 case GF_ISOM_BOX_TYPE_ENCV:
2339 return mp4v_Write(a, bs);
2340 case GF_ISOM_BOX_TYPE_ENCS:
2341 return mp4s_Write(a, bs);
2342
2343 case GF_ISOM_BOX_TYPE_SENC:
2344 return senc_Write(a, bs);
2345
2346 case GF_ISOM_BOX_TYPE_UUID:
2347 switch (((GF_UnknownUUIDBox *)a)->internal_4cc) {
2348 case GF_ISOM_BOX_UUID_TENC:
2349 return piff_tenc_Write(a, bs);
2350 case GF_ISOM_BOX_UUID_PSEC:
2351 return piff_psec_Write(a, bs);
2352 case GF_ISOM_BOX_UUID_PSSH:
2353 return piff_pssh_Write(a, bs);
2354 case GF_ISOM_BOX_UUID_TFXD:
2355 return tfxd_Write(a, bs);
2356 case GF_ISOM_BOX_UUID_MSSM:
2357 case GF_ISOM_BOX_UUID_TFRF:
2358 default:
2359 return uuid_Write(a, bs);
2360 }
2361
2362 #ifndef GPAC_DISABLE_ISOM_ADOBE
2363 /* Adobe extensions */
2364 case GF_ISOM_BOX_TYPE_ABST:
2365 return abst_Write(a, bs);
2366 case GF_ISOM_BOX_TYPE_AFRA:
2367 return afra_Write(a, bs);
2368 case GF_ISOM_BOX_TYPE_ASRT:
2369 return asrt_Write(a, bs);
2370 case GF_ISOM_BOX_TYPE_AFRT:
2371 return afrt_Write(a, bs);
2372 #endif
2373
2374 /* Apple extensions */
2375 case GF_ISOM_BOX_TYPE_ILST:
2376 return ilst_Write(a, bs);
2377
2378 case GF_ISOM_BOX_TYPE_0xA9NAM:
2379 case GF_ISOM_BOX_TYPE_0xA9CMT:
2380 case GF_ISOM_BOX_TYPE_0xA9DAY:
2381 case GF_ISOM_BOX_TYPE_0xA9ART:
2382 case GF_ISOM_BOX_TYPE_0xA9TRK:
2383 case GF_ISOM_BOX_TYPE_0xA9ALB:
2384 case GF_ISOM_BOX_TYPE_0xA9COM:
2385 case GF_ISOM_BOX_TYPE_0xA9WRT:
2386 case GF_ISOM_BOX_TYPE_0xA9TOO:
2387 case GF_ISOM_BOX_TYPE_0xA9CPY:
2388 case GF_ISOM_BOX_TYPE_0xA9DES:
2389 case GF_ISOM_BOX_TYPE_0xA9GEN:
2390 case GF_ISOM_BOX_TYPE_0xA9GRP:
2391 case GF_ISOM_BOX_TYPE_0xA9ENC:
2392 case GF_ISOM_BOX_TYPE_aART:
2393 case GF_ISOM_BOX_TYPE_GNRE:
2394 case GF_ISOM_BOX_TYPE_DISK:
2395 case GF_ISOM_BOX_TYPE_TRKN:
2396 case GF_ISOM_BOX_TYPE_TMPO:
2397 case GF_ISOM_BOX_TYPE_CPIL:
2398 case GF_ISOM_BOX_TYPE_PGAP:
2399 case GF_ISOM_BOX_TYPE_COVR:
2400 return ListItem_Write(a, bs);
2401
2402 case GF_ISOM_BOX_TYPE_DATA:
2403 return data_Write(a, bs);
2404
2405 case GF_ISOM_BOX_TYPE_OHDR:
2406 return ohdr_Write(a, bs);
2407 case GF_ISOM_BOX_TYPE_GRPI:
2408 return grpi_Write(a, bs);
2409 case GF_ISOM_BOX_TYPE_MDRI:
2410 return mdri_Write(a, bs);
2411 case GF_ISOM_BOX_TYPE_ODTT:
2412 return odtt_Write(a, bs);
2413 case GF_ISOM_BOX_TYPE_ODRB:
2414 return odrb_Write(a, bs);
2415 case GF_ISOM_BOX_TYPE_ODKM:
2416 return odkm_Write(a, bs);
2417 case GF_ISOM_BOX_TYPE_ODAF:
2418 return iSFM_Write(a, bs);
2419
2420 case GF_ISOM_BOX_TYPE_PASP:
2421 return pasp_Write(a, bs);
2422 case GF_ISOM_BOX_TYPE_TSEL:
2423 return tsel_Write(a, bs);
2424
2425 case GF_ISOM_BOX_TYPE_METX:
2426 case GF_ISOM_BOX_TYPE_METT:
2427 return metx_Write(a, bs);
2428
2429 case GF_ISOM_BOX_TYPE_DIMS:
2430 return dims_Write(a, bs);
2431 case GF_ISOM_BOX_TYPE_DIMC:
2432 return dimC_Write(a, bs);
2433 case GF_ISOM_BOX_TYPE_DIST:
2434 return diST_Write(a, bs);
2435
2436 case GF_ISOM_BOX_TYPE_AC3:
2437 return ac3_Write(a, bs);
2438 case GF_ISOM_BOX_TYPE_DAC3:
2439 return dac3_Write(a, bs);
2440
2441 case GF_ISOM_BOX_TYPE_LSRC:
2442 return lsrc_Write(a, bs);
2443 case GF_ISOM_BOX_TYPE_LSR1:
2444 return lsr1_Write(a, bs);
2445
2446 case GF_ISOM_BOX_TYPE_SIDX:
2447 return sidx_Write(a, bs);
2448 case GF_ISOM_BOX_TYPE_PCRB:
2449 return pcrb_Write(a, bs);
2450 case GF_ISOM_BOX_TYPE_SUBS:
2451 return subs_Write(a, bs);
2452 case GF_ISOM_BOX_TYPE_RVCC:
2453 return rvcc_Write(a, bs);
2454
2455 case GF_ISOM_BOX_TYPE_TRGR:
2456 return trgr_Write(a, bs);
2457 case GF_ISOM_BOX_TYPE_TRGT:
2458 return trgt_Write(a, bs);
2459
2460 #ifndef GPAC_DISABLE_TTXT
2461 case GF_ISOM_BOX_TYPE_STXT:
2462 return metx_Write(a, bs);
2463 case GF_ISOM_BOX_TYPE_TXTC:
2464 return txtc_Write(a, bs);
2465
2466 case GF_ISOM_BOX_TYPE_STPP:
2467 return metx_Write(a, bs);
2468 case GF_ISOM_BOX_TYPE_SBTT:
2469 return metx_Write(a, bs);
2470 #endif//GPAC_DISABLE_TTXT
2471
2472 case GF_ISOM_BOX_TYPE_ADKM:
2473 return adkm_Write(a, bs);
2474 case GF_ISOM_BOX_TYPE_AHDR:
2475 return ahdr_Write(a, bs);
2476 case GF_ISOM_BOX_TYPE_APRM:
2477 return aprm_Write(a, bs);
2478 case GF_ISOM_BOX_TYPE_AEIB:
2479 return aeib_Write(a, bs);
2480 case GF_ISOM_BOX_TYPE_AKEY:
2481 return akey_Write(a, bs);
2482 case GF_ISOM_BOX_TYPE_FLXS:
2483 return flxs_Write(a, bs);
2484 case GF_ISOM_BOX_TYPE_ADAF:
2485 return adaf_Write(a, bs);
2486
2487
2488 default:
2489 return defa_Write(a, bs);
2490 }
2491 }
2492
2493 GF_EXPORT
gf_isom_box_write(GF_Box * a,GF_BitStream * bs)2494 GF_Err gf_isom_box_write(GF_Box *a, GF_BitStream *bs)
2495 {
2496 GF_Err e = gf_isom_box_write_listing(a, bs);
2497 if (e) return e;
2498 if (a->other_boxes) {
2499 return gf_isom_box_array_write(a, a->other_boxes, bs);
2500 }
2501 return GF_OK;
2502 }
2503
gf_isom_box_size_listing(GF_Box * a)2504 static GF_Err gf_isom_box_size_listing(GF_Box *a)
2505 {
2506 switch (a->type) {
2507 case GF_ISOM_BOX_TYPE_REFT:
2508 return reftype_Size(a);
2509 case GF_ISOM_BOX_TYPE_REFI:
2510 return ireftype_Size(a);
2511 case GF_ISOM_BOX_TYPE_FREE:
2512 case GF_ISOM_BOX_TYPE_SKIP:
2513 return free_Size(a);
2514 case GF_ISOM_BOX_TYPE_MDAT:
2515 return mdat_Size(a);
2516 case GF_ISOM_BOX_TYPE_MOOV:
2517 return moov_Size(a);
2518 case GF_ISOM_BOX_TYPE_MVHD:
2519 return mvhd_Size(a);
2520 case GF_ISOM_BOX_TYPE_MDHD:
2521 return mdhd_Size(a);
2522 case GF_ISOM_BOX_TYPE_VMHD:
2523 return vmhd_Size(a);
2524 case GF_ISOM_BOX_TYPE_SMHD:
2525 return smhd_Size(a);
2526 case GF_ISOM_BOX_TYPE_HMHD:
2527 return hmhd_Size(a);
2528 case GF_ISOM_BOX_TYPE_ODHD:
2529 case GF_ISOM_BOX_TYPE_CRHD:
2530 case GF_ISOM_BOX_TYPE_SDHD:
2531 case GF_ISOM_BOX_TYPE_NMHD:
2532 case GF_ISOM_BOX_TYPE_STHD:
2533 return nmhd_Size(a);
2534 case GF_ISOM_BOX_TYPE_STBL:
2535 return stbl_Size(a);
2536 case GF_ISOM_BOX_TYPE_DINF:
2537 return dinf_Size(a);
2538 case GF_ISOM_BOX_TYPE_URL:
2539 return url_Size(a);
2540 case GF_ISOM_BOX_TYPE_URN:
2541 return urn_Size(a);
2542 case GF_ISOM_BOX_TYPE_CHPL:
2543 return chpl_Size(a);
2544 case GF_ISOM_BOX_TYPE_CPRT:
2545 return cprt_Size(a);
2546 case GF_ISOM_BOX_TYPE_KIND:
2547 return kind_Size(a);
2548 case GF_ISOM_BOX_TYPE_HDLR:
2549 return hdlr_Size(a);
2550 case GF_ISOM_BOX_TYPE_IODS:
2551 return iods_Size(a);
2552 case GF_ISOM_BOX_TYPE_TRAK:
2553 return trak_Size(a);
2554 case GF_ISOM_BOX_TYPE_MP4S:
2555 return mp4s_Size(a);
2556 case GF_ISOM_BOX_TYPE_MP4V:
2557 return mp4v_Size(a);
2558 case GF_ISOM_BOX_TYPE_MP4A:
2559 return mp4a_Size(a);
2560 case GF_ISOM_BOX_TYPE_GNRM:
2561 return gnrm_Size(a);
2562 case GF_ISOM_BOX_TYPE_GNRV:
2563 return gnrv_Size(a);
2564 case GF_ISOM_BOX_TYPE_GNRA:
2565 return gnra_Size(a);
2566 case GF_ISOM_BOX_TYPE_EDTS:
2567 return edts_Size(a);
2568 case GF_ISOM_BOX_TYPE_UDTA:
2569 return udta_Size(a);
2570 case GF_ISOM_BOX_TYPE_DREF:
2571 return dref_Size(a);
2572 case GF_ISOM_BOX_TYPE_STSD:
2573 return stsd_Size(a);
2574 case GF_ISOM_BOX_TYPE_STTS:
2575 return stts_Size(a);
2576 case GF_ISOM_BOX_TYPE_CTTS:
2577 return ctts_Size(a);
2578 case GF_ISOM_BOX_TYPE_CSLG:
2579 return cslg_Size(a);
2580 case GF_ISOM_BOX_TYPE_STSH:
2581 return stsh_Size(a);
2582 case GF_ISOM_BOX_TYPE_ELST:
2583 return elst_Size(a);
2584 case GF_ISOM_BOX_TYPE_STSC:
2585 return stsc_Size(a);
2586 case GF_ISOM_BOX_TYPE_STZ2:
2587 case GF_ISOM_BOX_TYPE_STSZ:
2588 return stsz_Size(a);
2589 case GF_ISOM_BOX_TYPE_STCO:
2590 return stco_Size(a);
2591 case GF_ISOM_BOX_TYPE_STSS:
2592 return stss_Size(a);
2593 case GF_ISOM_BOX_TYPE_SDTP:
2594 return sdtp_Size(a);
2595 case GF_ISOM_BOX_TYPE_CO64:
2596 return co64_Size(a);
2597 case GF_ISOM_BOX_TYPE_ESDS:
2598 return esds_Size(a);
2599 case GF_ISOM_BOX_TYPE_MINF:
2600 return minf_Size(a);
2601 case GF_ISOM_BOX_TYPE_TKHD:
2602 return tkhd_Size(a);
2603 case GF_ISOM_BOX_TYPE_TREF:
2604 return tref_Size(a);
2605 case GF_ISOM_BOX_TYPE_MDIA:
2606 return mdia_Size(a);
2607 case GF_ISOM_BOX_TYPE_ELNG:
2608 return elng_Size(a);
2609 case GF_ISOM_BOX_TYPE_FTYP:
2610 case GF_ISOM_BOX_TYPE_STYP:
2611 return ftyp_Size(a);
2612 case GF_ISOM_BOX_TYPE_PADB:
2613 return padb_Size(a);
2614 case GF_ISOM_BOX_TYPE_VOID:
2615 return void_Size(a);
2616 case GF_ISOM_BOX_TYPE_STSF:
2617 return stsf_Size(a);
2618 case GF_ISOM_BOX_TYPE_PDIN:
2619 return pdin_Size(a);
2620 case GF_ISOM_BOX_TYPE_SBGP:
2621 return sbgp_Size(a);
2622 case GF_ISOM_BOX_TYPE_SGPD:
2623 return sgpd_Size(a);
2624 case GF_ISOM_BOX_TYPE_SAIZ:
2625 return saiz_Size(a);
2626 case GF_ISOM_BOX_TYPE_SAIO:
2627 return saio_Size(a);
2628 case GF_ISOM_BOX_TYPE_PSSH:
2629 return pssh_Size(a);
2630 case GF_ISOM_BOX_TYPE_TENC:
2631 return tenc_Size(a);
2632
2633 #ifndef GPAC_DISABLE_ISOM_HINTING
2634 case GF_ISOM_BOX_TYPE_RTP_STSD:
2635 return ghnt_Size(a);
2636 case GF_ISOM_BOX_TYPE_RTPO:
2637 return rtpo_Size(a);
2638 case GF_ISOM_BOX_TYPE_HNTI:
2639 return hnti_Size(a);
2640 case GF_ISOM_BOX_TYPE_SDP:
2641 return sdp_Size(a);
2642 case GF_ISOM_BOX_TYPE_HINF:
2643 return hinf_Size(a);
2644 case GF_ISOM_BOX_TYPE_RELY:
2645 return rely_Size(a);
2646 case GF_ISOM_BOX_TYPE_TIMS:
2647 return tims_Size(a);
2648 case GF_ISOM_BOX_TYPE_TSRO:
2649 return tsro_Size(a);
2650 case GF_ISOM_BOX_TYPE_SNRO:
2651 return snro_Size(a);
2652 case GF_ISOM_BOX_TYPE_TRPY:
2653 return trpy_Size(a);
2654 case GF_ISOM_BOX_TYPE_NUMP:
2655 return nump_Size(a);
2656 case GF_ISOM_BOX_TYPE_TOTL:
2657 return totl_Size(a);
2658 case GF_ISOM_BOX_TYPE_NPCK:
2659 return npck_Size(a);
2660 case GF_ISOM_BOX_TYPE_TPYL:
2661 return tpyl_Size(a);
2662 case GF_ISOM_BOX_TYPE_TPAY:
2663 return tpay_Size(a);
2664 case GF_ISOM_BOX_TYPE_MAXR:
2665 return maxr_Size(a);
2666 case GF_ISOM_BOX_TYPE_DMED:
2667 return dmed_Size(a);
2668 case GF_ISOM_BOX_TYPE_DIMM:
2669 return dimm_Size(a);
2670 case GF_ISOM_BOX_TYPE_DREP:
2671 return drep_Size(a);
2672 case GF_ISOM_BOX_TYPE_TMIN:
2673 return tmin_Size(a);
2674 case GF_ISOM_BOX_TYPE_TMAX:
2675 return tmax_Size(a);
2676 case GF_ISOM_BOX_TYPE_PMAX:
2677 return pmax_Size(a);
2678 case GF_ISOM_BOX_TYPE_DMAX:
2679 return dmax_Size(a);
2680 case GF_ISOM_BOX_TYPE_PAYT:
2681 return payt_Size(a);
2682 case GF_ISOM_BOX_TYPE_NAME:
2683 return name_Size(a);
2684 #endif /*GPAC_DISABLE_ISOM_HINTING*/
2685
2686
2687 #ifndef GPAC_DISABLE_ISOM_FRAGMENTS
2688 case GF_ISOM_BOX_TYPE_MVEX:
2689 return mvex_Size(a);
2690 case GF_ISOM_BOX_TYPE_MEHD:
2691 return mehd_Size(a);
2692 case GF_ISOM_BOX_TYPE_TREX:
2693 return trex_Size(a);
2694 case GF_ISOM_BOX_TYPE_TREP:
2695 return trep_Size(a);
2696 case GF_ISOM_BOX_TYPE_MOOF:
2697 return moof_Size(a);
2698 case GF_ISOM_BOX_TYPE_MFHD:
2699 return mfhd_Size(a);
2700 case GF_ISOM_BOX_TYPE_TRAF:
2701 return traf_Size(a);
2702 case GF_ISOM_BOX_TYPE_TFHD:
2703 return tfhd_Size(a);
2704 case GF_ISOM_BOX_TYPE_TFDT:
2705 return tfdt_Size(a);
2706 case GF_ISOM_BOX_TYPE_TRUN:
2707 return trun_Size(a);
2708 #endif
2709
2710 /*3GPP boxes*/
2711 case GF_ISOM_SUBTYPE_3GP_AMR:
2712 case GF_ISOM_SUBTYPE_3GP_AMR_WB:
2713 case GF_ISOM_SUBTYPE_3GP_EVRC:
2714 case GF_ISOM_SUBTYPE_3GP_QCELP:
2715 case GF_ISOM_SUBTYPE_3GP_SMV:
2716 return gppa_Size(a);
2717 case GF_ISOM_SUBTYPE_3GP_H263:
2718 return gppv_Size(a);
2719 case GF_ISOM_BOX_TYPE_DAMR:
2720 case GF_ISOM_BOX_TYPE_DEVC:
2721 case GF_ISOM_BOX_TYPE_DQCP:
2722 case GF_ISOM_BOX_TYPE_DSMV:
2723 case GF_ISOM_BOX_TYPE_D263:
2724 return gppc_Size(a);
2725
2726 case GF_ISOM_BOX_TYPE_AVCC:
2727 case GF_ISOM_BOX_TYPE_SVCC:
2728 return avcc_Size(a);
2729 case GF_ISOM_BOX_TYPE_HVCC:
2730 case GF_ISOM_BOX_TYPE_LHVC:
2731 return hvcc_Size(a);
2732 case GF_ISOM_BOX_TYPE_BTRT:
2733 return btrt_Size(a);
2734 case GF_ISOM_BOX_TYPE_M4DS:
2735 return m4ds_Size(a);
2736 case GF_ISOM_BOX_TYPE_AVC1:
2737 case GF_ISOM_BOX_TYPE_AVC2:
2738 case GF_ISOM_BOX_TYPE_AVC3:
2739 case GF_ISOM_BOX_TYPE_AVC4:
2740 case GF_ISOM_BOX_TYPE_SVC1:
2741 case GF_ISOM_BOX_TYPE_HVC1:
2742 case GF_ISOM_BOX_TYPE_HEV1:
2743 case GF_ISOM_BOX_TYPE_HVC2:
2744 case GF_ISOM_BOX_TYPE_HEV2:
2745 case GF_ISOM_BOX_TYPE_LHV1:
2746 case GF_ISOM_BOX_TYPE_LHE1:
2747 case GF_ISOM_BOX_TYPE_HVT1:
2748 return mp4v_Size(a);
2749
2750 /*3GPP streaming text*/
2751 case GF_ISOM_BOX_TYPE_FTAB:
2752 return ftab_Size(a);
2753 case GF_ISOM_BOX_TYPE_TX3G:
2754 return tx3g_Size(a);
2755 case GF_ISOM_BOX_TYPE_TEXT:
2756 return text_Size(a);
2757 case GF_ISOM_BOX_TYPE_STYL:
2758 return styl_Size(a);
2759 case GF_ISOM_BOX_TYPE_HLIT:
2760 return hlit_Size(a);
2761 case GF_ISOM_BOX_TYPE_HCLR:
2762 return hclr_Size(a);
2763 case GF_ISOM_BOX_TYPE_KROK:
2764 return krok_Size(a);
2765 case GF_ISOM_BOX_TYPE_DLAY:
2766 return dlay_Size(a);
2767 case GF_ISOM_BOX_TYPE_HREF:
2768 return href_Size(a);
2769 case GF_ISOM_BOX_TYPE_TBOX:
2770 return tbox_Size(a);
2771 case GF_ISOM_BOX_TYPE_BLNK:
2772 return blnk_Size(a);
2773 case GF_ISOM_BOX_TYPE_TWRP:
2774 return twrp_Size(a);
2775
2776 /* ISMA 1.0 Encryption and Authentication V 1.0 */
2777 case GF_ISOM_BOX_TYPE_IKMS:
2778 return iKMS_Size(a);
2779 case GF_ISOM_BOX_TYPE_ISFM:
2780 return iSFM_Size(a);
2781
2782 /* ISO FF extensions for MPEG-21 */
2783 case GF_ISOM_BOX_TYPE_META:
2784 return meta_Size(a);
2785 case GF_ISOM_BOX_TYPE_XML:
2786 return xml_Size(a);
2787 case GF_ISOM_BOX_TYPE_BXML:
2788 return bxml_Size(a);
2789 case GF_ISOM_BOX_TYPE_ILOC:
2790 return iloc_Size(a);
2791 case GF_ISOM_BOX_TYPE_PITM:
2792 return pitm_Size(a);
2793 case GF_ISOM_BOX_TYPE_IPRO:
2794 return ipro_Size(a);
2795 case GF_ISOM_BOX_TYPE_INFE:
2796 return infe_Size(a);
2797 case GF_ISOM_BOX_TYPE_IINF:
2798 return iinf_Size(a);
2799 case GF_ISOM_BOX_TYPE_IREF:
2800 return iref_Size(a);
2801 case GF_ISOM_BOX_TYPE_SINF:
2802 return sinf_Size(a);
2803 case GF_ISOM_BOX_TYPE_FRMA:
2804 return frma_Size(a);
2805 case GF_ISOM_BOX_TYPE_SCHM:
2806 return schm_Size(a);
2807 case GF_ISOM_BOX_TYPE_SCHI:
2808 return schi_Size(a);
2809 case GF_ISOM_BOX_TYPE_ENCA:
2810 return mp4a_Size(a);
2811 case GF_ISOM_BOX_TYPE_ENCV:
2812 return mp4v_Size(a);
2813 case GF_ISOM_BOX_TYPE_ENCS:
2814 return mp4s_Size(a);
2815 case GF_ISOM_BOX_TYPE_SENC:
2816 return senc_Size(a);
2817 case GF_ISOM_BOX_TYPE_UUID:
2818 switch (((GF_UnknownUUIDBox *)a)->internal_4cc) {
2819 case GF_ISOM_BOX_UUID_TENC:
2820 return piff_tenc_Size(a);
2821 case GF_ISOM_BOX_UUID_PSEC:
2822 return piff_psec_Size(a);
2823 case GF_ISOM_BOX_UUID_PSSH:
2824 return piff_pssh_Size(a);
2825 case GF_ISOM_BOX_UUID_TFXD:
2826 return tfxd_Size(a);
2827 case GF_ISOM_BOX_UUID_MSSM:
2828 case GF_ISOM_BOX_UUID_TFRF:
2829 default:
2830 return uuid_Size(a);
2831 }
2832
2833 #ifndef GPAC_DISABLE_ISOM_ADOBE
2834 /* Adobe extensions */
2835 case GF_ISOM_BOX_TYPE_ABST:
2836 return abst_Size(a);
2837 case GF_ISOM_BOX_TYPE_AFRA:
2838 return afra_Size(a);
2839 case GF_ISOM_BOX_TYPE_ASRT:
2840 return asrt_Size(a);
2841 case GF_ISOM_BOX_TYPE_AFRT:
2842 return afrt_Size(a);
2843 #endif
2844
2845 /* Apple extensions */
2846 case GF_ISOM_BOX_TYPE_ILST:
2847 return ilst_Size(a);
2848
2849 case GF_ISOM_BOX_TYPE_0xA9NAM:
2850 case GF_ISOM_BOX_TYPE_0xA9CMT:
2851 case GF_ISOM_BOX_TYPE_0xA9DAY:
2852 case GF_ISOM_BOX_TYPE_0xA9ART:
2853 case GF_ISOM_BOX_TYPE_0xA9TRK:
2854 case GF_ISOM_BOX_TYPE_0xA9ALB:
2855 case GF_ISOM_BOX_TYPE_0xA9COM:
2856 case GF_ISOM_BOX_TYPE_0xA9WRT:
2857 case GF_ISOM_BOX_TYPE_0xA9TOO:
2858 case GF_ISOM_BOX_TYPE_0xA9CPY:
2859 case GF_ISOM_BOX_TYPE_0xA9DES:
2860 case GF_ISOM_BOX_TYPE_0xA9GEN:
2861 case GF_ISOM_BOX_TYPE_0xA9GRP:
2862 case GF_ISOM_BOX_TYPE_0xA9ENC:
2863 case GF_ISOM_BOX_TYPE_aART:
2864 case GF_ISOM_BOX_TYPE_GNRE:
2865 case GF_ISOM_BOX_TYPE_DISK:
2866 case GF_ISOM_BOX_TYPE_TRKN:
2867 case GF_ISOM_BOX_TYPE_TMPO:
2868 case GF_ISOM_BOX_TYPE_CPIL:
2869 case GF_ISOM_BOX_TYPE_PGAP:
2870 case GF_ISOM_BOX_TYPE_COVR:
2871 return ListItem_Size(a);
2872
2873 case GF_ISOM_BOX_TYPE_DATA:
2874 return data_Size(a);
2875
2876 case GF_ISOM_BOX_TYPE_OHDR:
2877 return ohdr_Size(a);
2878 case GF_ISOM_BOX_TYPE_GRPI:
2879 return grpi_Size(a);
2880 case GF_ISOM_BOX_TYPE_MDRI:
2881 return mdri_Size(a);
2882 case GF_ISOM_BOX_TYPE_ODTT:
2883 return odtt_Size(a);
2884 case GF_ISOM_BOX_TYPE_ODRB:
2885 return odrb_Size(a);
2886 case GF_ISOM_BOX_TYPE_ODKM:
2887 return odkm_Size(a);
2888 case GF_ISOM_BOX_TYPE_ODAF:
2889 return iSFM_Size(a);
2890
2891 case GF_ISOM_BOX_TYPE_PASP:
2892 return pasp_Size(a);
2893 case GF_ISOM_BOX_TYPE_TSEL:
2894 return tsel_Size(a);
2895
2896 case GF_ISOM_BOX_TYPE_METX:
2897 case GF_ISOM_BOX_TYPE_METT:
2898 return metx_Size(a);
2899
2900 case GF_ISOM_BOX_TYPE_DIMS:
2901 return dims_Size(a);
2902 case GF_ISOM_BOX_TYPE_DIMC:
2903 return dimC_Size(a);
2904 case GF_ISOM_BOX_TYPE_DIST:
2905 return diST_Size(a);
2906
2907 case GF_ISOM_BOX_TYPE_AC3:
2908 return ac3_Size(a);
2909 case GF_ISOM_BOX_TYPE_DAC3:
2910 return dac3_Size(a);
2911
2912 case GF_ISOM_BOX_TYPE_LSRC:
2913 return lsrc_Size(a);
2914 case GF_ISOM_BOX_TYPE_LSR1:
2915 return lsr1_Size(a);
2916
2917 case GF_ISOM_BOX_TYPE_SIDX:
2918 return sidx_Size(a);
2919 case GF_ISOM_BOX_TYPE_PCRB:
2920 return pcrb_Size(a);
2921 case GF_ISOM_BOX_TYPE_SUBS:
2922 return subs_Size(a);
2923 case GF_ISOM_BOX_TYPE_RVCC:
2924 return rvcc_Size(a);
2925
2926 case GF_ISOM_BOX_TYPE_TRGR:
2927 return trgr_Size(a);
2928 case GF_ISOM_BOX_TYPE_TRGT:
2929 return trgt_Size(a);
2930
2931 #ifndef GPAC_DISABLE_TTXT
2932 case GF_ISOM_BOX_TYPE_STXT:
2933 return metx_Size(a);
2934 case GF_ISOM_BOX_TYPE_TXTC:
2935 return txtc_Size(a);
2936
2937 case GF_ISOM_BOX_TYPE_STPP:
2938 return metx_Size(a);
2939 case GF_ISOM_BOX_TYPE_SBTT:
2940 return metx_Size(a);
2941 #endif // GPAC_DISABLE_TTXT
2942
2943 case GF_ISOM_BOX_TYPE_ADKM:
2944 return adkm_Size(a);
2945 case GF_ISOM_BOX_TYPE_AHDR:
2946 return ahdr_Size(a);
2947 case GF_ISOM_BOX_TYPE_APRM:
2948 return aprm_Size(a);
2949 case GF_ISOM_BOX_TYPE_AEIB:
2950 return aeib_Size(a);
2951 case GF_ISOM_BOX_TYPE_AKEY:
2952 return akey_Size(a);
2953 case GF_ISOM_BOX_TYPE_FLXS:
2954 return flxs_Size(a);
2955 case GF_ISOM_BOX_TYPE_ADAF:
2956 return adaf_Size(a);
2957
2958 default:
2959 return defa_Size(a);
2960 }
2961 }
2962
2963 GF_EXPORT
gf_isom_box_size(GF_Box * a)2964 GF_Err gf_isom_box_size(GF_Box *a)
2965 {
2966 GF_Err e = gf_isom_box_size_listing(a);
2967 if (e) return e;
2968 if (a->other_boxes) {
2969 e = gf_isom_box_array_size(a, a->other_boxes);
2970 if (e) return e;
2971 }
2972 return GF_OK;
2973 }
2974
2975 #endif /*GPAC_DISABLE_ISOM_WRITE*/
2976
2977 #endif /*GPAC_DISABLE_ISOM*/
2978