--- /dev/null
+/*\r
+ * GPAC - Multimedia Framework C SDK\r
+ *\r
+ * Copyright (c) Jean Le Feuvre 2000-2005 \r
+ * All rights reserved\r
+ *\r
+ * This file is part of GPAC / ISO Media File Format sub-project\r
+ *\r
+ * GPAC is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU Lesser General Public License as published by\r
+ * the Free Software Foundation; either version 2, or (at your option)\r
+ * any later version.\r
+ * \r
+ * GPAC is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU Lesser General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; see the file COPYING. If not, write to\r
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_ISOMEDIA_DEV_H_\r
+#define _GF_ISOMEDIA_DEV_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/isomedia.h>\r
+\r
+\r
+//the default size is 64, cause we need to handle large boxes...\r
+#define GF_ISOM_BOX \\r
+ u32 type; \\r
+ u64 size; \\r
+\r
+#define GF_ISOM_FULL_BOX \\r
+ GF_ISOM_BOX \\r
+ u8 version; \\r
+ u32 flags; \\r
+\r
+#define GF_ISOM_UUID_BOX \\r
+ GF_ISOM_BOX \\r
+ u8 uuid[16]; \\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+} GF_Box;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+} GF_FullBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_UUID_BOX\r
+} GF_UUIDBox;\r
+\r
+/*constructor*/\r
+GF_Box *gf_isom_box_new(u32 boxType);\r
+\r
+GF_Err gf_isom_box_write(GF_Box *ptr, GF_BitStream *bs);\r
+GF_Err gf_isom_box_read(GF_Box *ptr, GF_BitStream *bs);\r
+void gf_isom_box_del(GF_Box *ptr);\r
+GF_Err gf_isom_box_size(GF_Box *ptr);\r
+\r
+GF_Err gf_isom_parse_box(GF_Box **outBox, GF_BitStream *bs);\r
+GF_Err gf_isom_read_box_list(GF_Box *s, GF_BitStream *bs, GF_Err (*add_box)(GF_Box *par, GF_Box *b));\r
+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
+\r
+GF_Err gf_isom_box_get_size(GF_Box *ptr);\r
+GF_Err gf_isom_full_box_get_size(GF_Box *ptr);\r
+GF_Err gf_isom_box_write_header(GF_Box *ptr, GF_BitStream *bs);\r
+GF_Err gf_isom_full_box_read(GF_Box *ptr, GF_BitStream *bs);\r
+GF_Err gf_isom_full_box_write(GF_Box *s, GF_BitStream *bs);\r
+void gf_isom_full_box_init(GF_Box *ptr);\r
+void gf_isom_box_array_del(GF_List *boxList);\r
+GF_Err gf_isom_box_array_write(GF_Box *parent, GF_List *list, GF_BitStream *bs);\r
+GF_Err gf_isom_box_array_size(GF_Box *parent, GF_List *list);\r
+\r
+\r
+enum\r
+{\r
+ GF_ISOM_BOX_TYPE_CO64 = GF_4CC( 'c', 'o', '6', '4' ),\r
+ GF_ISOM_BOX_TYPE_STCO = GF_4CC( 's', 't', 'c', 'o' ),\r
+ GF_ISOM_BOX_TYPE_CRHD = GF_4CC( 'c', 'r', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_CTTS = GF_4CC( 'c', 't', 't', 's' ),\r
+ GF_ISOM_BOX_TYPE_CPRT = GF_4CC( 'c', 'p', 'r', 't' ),\r
+ GF_ISOM_BOX_TYPE_CHPL = GF_4CC( 'c', 'h', 'p', 'l' ),\r
+ GF_ISOM_BOX_TYPE_URL = GF_4CC( 'u', 'r', 'l', ' ' ),\r
+ GF_ISOM_BOX_TYPE_URN = GF_4CC( 'u', 'r', 'n', ' ' ),\r
+ GF_ISOM_BOX_TYPE_DINF = GF_4CC( 'd', 'i', 'n', 'f' ),\r
+ GF_ISOM_BOX_TYPE_DREF = GF_4CC( 'd', 'r', 'e', 'f' ),\r
+ GF_ISOM_BOX_TYPE_STDP = GF_4CC( 's', 't', 'd', 'p' ),\r
+ GF_ISOM_BOX_TYPE_EDTS = GF_4CC( 'e', 'd', 't', 's' ),\r
+ GF_ISOM_BOX_TYPE_ELST = GF_4CC( 'e', 'l', 's', 't' ),\r
+ GF_ISOM_BOX_TYPE_UUID = GF_4CC( 'u', 'u', 'i', 'd' ),\r
+ GF_ISOM_BOX_TYPE_FREE = GF_4CC( 'f', 'r', 'e', 'e' ),\r
+ GF_ISOM_BOX_TYPE_HDLR = GF_4CC( 'h', 'd', 'l', 'r' ),\r
+ GF_ISOM_BOX_TYPE_GMHD = GF_4CC( 'g', 'm', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_HMHD = GF_4CC( 'h', 'm', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_HINT = GF_4CC( 'h', 'i', 'n', 't' ),\r
+ GF_ISOM_BOX_TYPE_MDIA = GF_4CC( 'm', 'd', 'i', 'a' ),\r
+ GF_ISOM_BOX_TYPE_MDAT = GF_4CC( 'm', 'd', 'a', 't' ),\r
+ GF_ISOM_BOX_TYPE_MDHD = GF_4CC( 'm', 'd', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_MINF = GF_4CC( 'm', 'i', 'n', 'f' ),\r
+ GF_ISOM_BOX_TYPE_MOOV = GF_4CC( 'm', 'o', 'o', 'v' ),\r
+ GF_ISOM_BOX_TYPE_MVHD = GF_4CC( 'm', 'v', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_STSD = GF_4CC( 's', 't', 's', 'd' ),\r
+ GF_ISOM_BOX_TYPE_STSZ = GF_4CC( 's', 't', 's', 'z' ),\r
+ GF_ISOM_BOX_TYPE_STZ2 = GF_4CC( 's', 't', 'z', '2' ),\r
+ GF_ISOM_BOX_TYPE_STBL = GF_4CC( 's', 't', 'b', 'l' ),\r
+ GF_ISOM_BOX_TYPE_STSC = GF_4CC( 's', 't', 's', 'c' ),\r
+ GF_ISOM_BOX_TYPE_STSH = GF_4CC( 's', 't', 's', 'h' ),\r
+ GF_ISOM_BOX_TYPE_SKIP = GF_4CC( 's', 'k', 'i', 'p' ),\r
+ GF_ISOM_BOX_TYPE_SMHD = GF_4CC( 's', 'm', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_STSS = GF_4CC( 's', 't', 's', 's' ),\r
+ GF_ISOM_BOX_TYPE_STTS = GF_4CC( 's', 't', 't', 's' ),\r
+ GF_ISOM_BOX_TYPE_TRAK = GF_4CC( 't', 'r', 'a', 'k' ),\r
+ GF_ISOM_BOX_TYPE_TKHD = GF_4CC( 't', 'k', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_TREF = GF_4CC( 't', 'r', 'e', 'f' ),\r
+ GF_ISOM_BOX_TYPE_UDTA = GF_4CC( 'u', 'd', 't', 'a' ),\r
+ GF_ISOM_BOX_TYPE_VMHD = GF_4CC( 'v', 'm', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_FTYP = GF_4CC( 'f', 't', 'y', 'p' ),\r
+ GF_ISOM_BOX_TYPE_FADB = GF_4CC( 'p', 'a', 'd', 'b' ),\r
+ GF_ISOM_BOX_TYPE_PDIN = GF_4CC( 'p', 'd', 'i', 'n' ),\r
+ GF_ISOM_BOX_TYPE_SDTP = GF_4CC( 's', 'd', 't', 'p' ),\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+ /*Movie Fragments*/\r
+ GF_ISOM_BOX_TYPE_MVEX = GF_4CC( 'm', 'v', 'e', 'x' ),\r
+ GF_ISOM_BOX_TYPE_MEHD = GF_4CC( 'm', 'e', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_TREX = GF_4CC( 't', 'r', 'e', 'x' ),\r
+ GF_ISOM_BOX_TYPE_MOOF = GF_4CC( 'm', 'o', 'o', 'f' ),\r
+ GF_ISOM_BOX_TYPE_MFHD = GF_4CC( 'm', 'f', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_TRAF = GF_4CC( 't', 'r', 'a', 'f' ),\r
+ GF_ISOM_BOX_TYPE_TFHD = GF_4CC( 't', 'f', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_TRUN = GF_4CC( 't', 'r', 'u', 'n' ),\r
+#endif\r
+\r
+ /*MP4 extensions*/\r
+ GF_ISOM_BOX_TYPE_DPND = GF_4CC( 'd', 'p', 'n', 'd' ),\r
+ GF_ISOM_BOX_TYPE_IODS = GF_4CC( 'i', 'o', 'd', 's' ),\r
+ GF_ISOM_BOX_TYPE_ESDS = GF_4CC( 'e', 's', 'd', 's' ),\r
+ GF_ISOM_BOX_TYPE_MPOD = GF_4CC( 'm', 'p', 'o', 'd' ),\r
+ GF_ISOM_BOX_TYPE_SYNC = GF_4CC( 's', 'y', 'n', 'c' ),\r
+ GF_ISOM_BOX_TYPE_IPIR = GF_4CC( 'i', 'p', 'i', 'r' ),\r
+ GF_ISOM_BOX_TYPE_SDHD = GF_4CC( 's', 'd', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_ODHD = GF_4CC( 'o', 'd', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_NMHD = GF_4CC( 'n', 'm', 'h', 'd' ),\r
+ GF_ISOM_BOX_TYPE_MP4S = GF_4CC( 'm', 'p', '4', 's' ),\r
+ GF_ISOM_BOX_TYPE_MP4A = GF_4CC( 'm', 'p', '4', 'a' ),\r
+ GF_ISOM_BOX_TYPE_MP4V = GF_4CC( 'm', 'p', '4', 'v' ),\r
+\r
+ /*AVC / H264 extension*/\r
+ GF_ISOM_BOX_TYPE_AVCC = GF_4CC( 'a', 'v', 'c', 'C' ),\r
+ GF_ISOM_BOX_TYPE_BTRT = GF_4CC( 'b', 't', 'r', 't' ),\r
+ GF_ISOM_BOX_TYPE_M4DS = GF_4CC( 'm', '4', 'd', 's' ),\r
+ GF_ISOM_BOX_TYPE_AVC1 = GF_4CC( 'a', 'v', 'c', '1' ),\r
+ GF_ISOM_BOX_TYPE_PASP = GF_4CC( 'p', 'a', 's', 'p' ),\r
+\r
+ /*3GPP extensions*/\r
+ GF_ISOM_BOX_TYPE_DAMR = GF_4CC( 'd', 'a', 'm', 'r' ),\r
+ GF_ISOM_BOX_TYPE_D263 = GF_4CC( 'd', '2', '6', '3' ),\r
+ GF_ISOM_BOX_TYPE_DEVC = GF_4CC( 'd', 'e', 'v', 'c' ),\r
+ GF_ISOM_BOX_TYPE_DQCP = GF_4CC( 'd', 'q', 'c', 'p' ),\r
+ GF_ISOM_BOX_TYPE_DSMV = GF_4CC( 'd', 's', 'm', 'v' ),\r
+ GF_ISOM_BOX_TYPE_TSEL = GF_4CC( 't', 's', 'e', 'l' ),\r
+\r
+ /*3GPP text / MPEG-4 StreamingText*/\r
+ GF_ISOM_BOX_TYPE_FTAB = GF_4CC( 'f', 't', 'a', 'b' ),\r
+ GF_ISOM_BOX_TYPE_TX3G = GF_4CC( 't', 'x', '3', 'g' ),\r
+ GF_ISOM_BOX_TYPE_STYL = GF_4CC( 's', 't', 'y', 'l' ),\r
+ GF_ISOM_BOX_TYPE_HLIT = GF_4CC( 'h', 'l', 'i', 't' ),\r
+ GF_ISOM_BOX_TYPE_HCLR = GF_4CC( 'h', 'c', 'l', 'r' ),\r
+ GF_ISOM_BOX_TYPE_KROK = GF_4CC( 'k', 'r', 'o', 'k' ),\r
+ GF_ISOM_BOX_TYPE_DLAY = GF_4CC( 'd', 'l', 'a', 'y' ),\r
+ GF_ISOM_BOX_TYPE_HREF = GF_4CC( 'h', 'r', 'e', 'f' ),\r
+ GF_ISOM_BOX_TYPE_TBOX = GF_4CC( 't', 'b', 'o', 'x' ),\r
+ GF_ISOM_BOX_TYPE_BLNK = GF_4CC( 'b', 'l', 'n', 'k' ),\r
+ GF_ISOM_BOX_TYPE_TWRP = GF_4CC( 't', 'w', 'r', 'p' ),\r
+\r
+ /* ISO Base Media File Format Extensions for MPEG-21 */\r
+ GF_ISOM_BOX_TYPE_META = GF_4CC( 'm', 'e', 't', 'a' ),\r
+ GF_ISOM_BOX_TYPE_XML = GF_4CC( 'x', 'm', 'l', ' ' ),\r
+ GF_ISOM_BOX_TYPE_BXML = GF_4CC( 'b', 'x', 'm', 'l' ),\r
+ GF_ISOM_BOX_TYPE_ILOC = GF_4CC( 'i', 'l', 'o', 'c' ),\r
+ GF_ISOM_BOX_TYPE_PITM = GF_4CC( 'p', 'i', 't', 'm' ),\r
+ GF_ISOM_BOX_TYPE_IPRO = GF_4CC( 'i', 'p', 'r', 'o' ),\r
+ GF_ISOM_BOX_TYPE_INFE = GF_4CC( 'i', 'n', 'f', 'e' ),\r
+ GF_ISOM_BOX_TYPE_IINF = GF_4CC( 'i', 'i', 'n', 'f' ),\r
+ GF_ISOM_BOX_TYPE_ENCA = GF_4CC( 'e', 'n', 'c', 'a' ),\r
+ GF_ISOM_BOX_TYPE_ENCV = GF_4CC( 'e', 'n', 'c', 'v' ),\r
+ GF_ISOM_BOX_TYPE_ENCT = GF_4CC( 'e', 'n', 'c', 't' ),\r
+ GF_ISOM_BOX_TYPE_ENCS = GF_4CC( 'e', 'n', 'c', 's' ),\r
+ GF_ISOM_BOX_TYPE_SINF = GF_4CC( 's', 'i', 'n', 'f' ),\r
+ GF_ISOM_BOX_TYPE_FRMA = GF_4CC( 'f', 'r', 'm', 'a' ),\r
+ GF_ISOM_BOX_TYPE_SCHM = GF_4CC( 's', 'c', 'h', 'm' ),\r
+ GF_ISOM_BOX_TYPE_SCHI = GF_4CC( 's', 'c', 'h', 'i' ),\r
+\r
+ GF_ISOM_BOX_TYPE_METX = GF_4CC( 'm', 'e', 't', 'x' ),\r
+ GF_ISOM_BOX_TYPE_METT = GF_4CC( 'm', 'e', 't', 't' ),\r
+\r
+ /* ISMA 1.0 Encryption and Authentication V 1.0 */\r
+ GF_ISOM_BOX_TYPE_IKMS = GF_4CC( 'i', 'K', 'M', 'S' ),\r
+ GF_ISOM_BOX_TYPE_ISFM = GF_4CC( 'i', 'S', 'F', 'M' ),\r
+\r
+ /* Hinting boxes */\r
+ GF_ISOM_BOX_TYPE_RTP_STSD = GF_4CC( 'r', 't', 'p', ' ' ),\r
+ GF_ISOM_BOX_TYPE_HNTI = GF_4CC( 'h', 'n', 't', 'i' ),\r
+ GF_ISOM_BOX_TYPE_RTP = GF_4CC( 'r', 't', 'p', ' ' ),\r
+ GF_ISOM_BOX_TYPE_SDP = GF_4CC( 's', 'd', 'p', ' ' ),\r
+ GF_ISOM_BOX_TYPE_HINF = GF_4CC( 'h', 'i', 'n', 'f' ),\r
+ GF_ISOM_BOX_TYPE_NAME = GF_4CC( 'n', 'a', 'm', 'e' ),\r
+ GF_ISOM_BOX_TYPE_TRPY = GF_4CC( 't', 'r', 'p', 'y' ),\r
+ GF_ISOM_BOX_TYPE_NUMP = GF_4CC( 'n', 'u', 'm', 'p' ),\r
+ GF_ISOM_BOX_TYPE_TOTL = GF_4CC( 't', 'o', 't', 'l' ),\r
+ GF_ISOM_BOX_TYPE_NPCK = GF_4CC( 'n', 'p', 'c', 'k' ),\r
+ GF_ISOM_BOX_TYPE_TPYL = GF_4CC( 't', 'p', 'y', 'l' ),\r
+ GF_ISOM_BOX_TYPE_TPAY = GF_4CC( 't', 'p', 'a', 'y' ),\r
+ GF_ISOM_BOX_TYPE_MAXR = GF_4CC( 'm', 'a', 'x', 'r' ),\r
+ GF_ISOM_BOX_TYPE_DMED = GF_4CC( 'd', 'm', 'e', 'd' ),\r
+ GF_ISOM_BOX_TYPE_DIMM = GF_4CC( 'd', 'i', 'm', 'm' ),\r
+ GF_ISOM_BOX_TYPE_DREP = GF_4CC( 'd', 'r', 'e', 'p' ),\r
+ GF_ISOM_BOX_TYPE_TMIN = GF_4CC( 't', 'm', 'i', 'n' ),\r
+ GF_ISOM_BOX_TYPE_TMAX = GF_4CC( 't', 'm', 'a', 'x' ),\r
+ GF_ISOM_BOX_TYPE_PMAX = GF_4CC( 'p', 'm', 'a', 'x' ),\r
+ GF_ISOM_BOX_TYPE_DMAX = GF_4CC( 'd', 'm', 'a', 'x' ),\r
+ GF_ISOM_BOX_TYPE_PAYT = GF_4CC( 'p', 'a', 'y', 't' ),\r
+ GF_ISOM_BOX_TYPE_RELY = GF_4CC( 'r', 'e', 'l', 'y' ),\r
+ GF_ISOM_BOX_TYPE_TIMS = GF_4CC( 't', 'i', 'm', 's' ),\r
+ GF_ISOM_BOX_TYPE_TSRO = GF_4CC( 't', 's', 'r', 'o' ),\r
+ GF_ISOM_BOX_TYPE_SNRO = GF_4CC( 's', 'n', 'r', 'o' ),\r
+ GF_ISOM_BOX_TYPE_RTPO = GF_4CC( 'r', 't', 'p', 'o' ),\r
+ \r
+ /*internal type for track references*/\r
+ GF_ISOM_BOX_TYPE_REFT = GF_4CC( 'R', 'E', 'F', 'T' ),\r
+\r
+ /* Apple extensions */\r
+\r
+ GF_ISOM_BOX_TYPE_ILST = GF_4CC( 'i', 'l', 's', 't' ),\r
+ GF_ISOM_BOX_TYPE_0xA9NAM = GF_4CC( 0xA9, 'n', 'a', 'm' ),\r
+ GF_ISOM_BOX_TYPE_0xA9CMT = GF_4CC( 0xA9, 'c', 'm', 't' ),\r
+ GF_ISOM_BOX_TYPE_0xA9DAY = GF_4CC( 0xA9, 'd', 'a', 'y' ),\r
+ GF_ISOM_BOX_TYPE_0xA9ART = GF_4CC( 0xA9, 'A', 'R', 'T' ),\r
+ GF_ISOM_BOX_TYPE_0xA9TRK = GF_4CC( 0xA9, 't', 'r', 'k' ),\r
+ GF_ISOM_BOX_TYPE_0xA9ALB = GF_4CC( 0xA9, 'a', 'l', 'b' ),\r
+ GF_ISOM_BOX_TYPE_0xA9COM = GF_4CC( 0xA9, 'c', 'o', 'm' ),\r
+ GF_ISOM_BOX_TYPE_0xA9WRT = GF_4CC( 0xA9, 'w', 'r', 't' ),\r
+ GF_ISOM_BOX_TYPE_0xA9TOO = GF_4CC( 0xA9, 't', 'o', 'o' ),\r
+ GF_ISOM_BOX_TYPE_0xA9CPY = GF_4CC( 0xA9, 'c', 'p', 'y' ),\r
+ GF_ISOM_BOX_TYPE_0xA9DES = GF_4CC( 0xA9, 'd', 'e', 's' ),\r
+ GF_ISOM_BOX_TYPE_0xA9GEN = GF_4CC( 0xA9, 'g', 'e', 'n' ),\r
+ GF_ISOM_BOX_TYPE_0xA9GRP = GF_4CC( 0xA9, 'g', 'r', 'p' ),\r
+ GF_ISOM_BOX_TYPE_0xA9ENC = GF_4CC( 0xA9, 'e', 'n', 'c' ),\r
+ GF_ISOM_BOX_TYPE_aART = GF_4CC( 'a', 'A', 'R', 'T' ),\r
+ GF_ISOM_BOX_TYPE_PGAP = GF_4CC( 'p', 'g', 'a', 'p' ),\r
+ GF_ISOM_BOX_TYPE_GNRE = GF_4CC( 'g', 'n', 'r', 'e' ),\r
+ GF_ISOM_BOX_TYPE_DISK = GF_4CC( 'd', 'i', 's', 'k' ),\r
+ GF_ISOM_BOX_TYPE_TRKN = GF_4CC( 't', 'r', 'k', 'n' ),\r
+ GF_ISOM_BOX_TYPE_TMPO = GF_4CC( 't', 'm', 'p', 'o' ),\r
+ GF_ISOM_BOX_TYPE_CPIL = GF_4CC( 'c', 'p', 'i', 'l' ),\r
+ GF_ISOM_BOX_TYPE_COVR = GF_4CC( 'c', 'o', 'v', 'r' ),\r
+ GF_ISOM_BOX_TYPE_iTunesSpecificInfo = GF_4CC( '-', '-', '-', '-' ),\r
+ GF_ISOM_BOX_TYPE_DATA = GF_4CC( 'd', 'a', 't', 'a' ),\r
+\r
+ GF_ISOM_HANDLER_TYPE_MDIR = GF_4CC( 'm', 'd', 'i', 'r' ),\r
+ GF_ISOM_BOX_TYPE_CHAP = GF_4CC( 'c', 'h', 'a', 'p' ),\r
+ \r
+ /*OMA (P)DCF boxes*/\r
+ GF_ISOM_BOX_TYPE_OHDR = GF_4CC( 'o', 'h', 'd', 'r' ),\r
+ GF_ISOM_BOX_TYPE_GRPI = GF_4CC( 'g', 'r', 'p', 'i' ),\r
+ GF_ISOM_BOX_TYPE_MDRI = GF_4CC( 'm', 'd', 'r', 'i' ),\r
+ GF_ISOM_BOX_TYPE_ODTT = GF_4CC( 'o', 'd', 't', 't' ),\r
+ GF_ISOM_BOX_TYPE_ODRB = GF_4CC( 'o', 'd', 'r', 'b' ),\r
+ GF_ISOM_BOX_TYPE_ODKM = GF_4CC( 'o', 'd', 'k', 'm' ),\r
+ GF_ISOM_BOX_TYPE_ODAF = GF_4CC( 'o', 'd', 'a', 'f' ),\r
+\r
+ /*3GPP DIMS */\r
+ GF_ISOM_BOX_TYPE_DIMS = GF_4CC( 'd', 'i', 'm', 's' ),\r
+ GF_ISOM_BOX_TYPE_DIMC = GF_4CC( 'd', 'i', 'm', 'C' ),\r
+ GF_ISOM_BOX_TYPE_DIST = GF_4CC( 'd', 'i', 'S', 'T' ),\r
+\r
+\r
+ GF_ISOM_BOX_TYPE_AC3 = GF_4CC( 'a', 'c', '-', '3' ),\r
+ GF_ISOM_BOX_TYPE_DAC3 = GF_4CC( 'd', 'a', 'c', '3' ),\r
+\r
+ /*ALL INTERNAL BOXES - NEVER WRITTEN TO FILE!!*/\r
+\r
+ /*generic handlers*/\r
+ GF_ISOM_BOX_TYPE_GNRM = GF_4CC( 'g', 'n', 'r', 'm' ),\r
+ GF_ISOM_BOX_TYPE_GNRV = GF_4CC( 'g', 'n', 'r', 'v' ),\r
+ GF_ISOM_BOX_TYPE_GNRA = GF_4CC( 'g', 'n', 'r', 'a' ),\r
+ /*storage of AU fragments (for MPEG-4 visual resync marker (video packets), located in stbl.*/\r
+ GF_ISOM_BOX_TYPE_STSF = GF_4CC( 'S', 'T', 'S', 'F' ),\r
+ /*base constructor of all hint formats (currently only RTP uses it)*/\r
+ GF_ISOM_BOX_TYPE_GHNT = GF_4CC( 'g', 'h', 'n', 't' ),\r
+ /*for compatibility with old files hinted for DSS - needs special parsing*/\r
+ GF_ISOM_BOX_TYPE_VOID = GF_4CC( 'V', 'O', 'I', 'D' ),\r
+};\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ /*note: the data is NEVER loaded to the mdat in this lib*/\r
+ u64 dataSize;\r
+ char *data;\r
+} GF_MediaDataBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ char *data;\r
+ u32 dataSize;\r
+} GF_UnknownBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_UUID_BOX\r
+ char *data;\r
+ u32 dataSize;\r
+} GF_UnknownUUIDBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u64 creationTime;\r
+ u64 modificationTime;\r
+ u32 timeScale;\r
+ u64 duration;\r
+ u32 nextTrackID;\r
+ u32 preferredRate;\r
+ u16 preferredVolume;\r
+ char reserved[10];\r
+ u32 matrixA;\r
+ u32 matrixB;\r
+ u32 matrixU;\r
+ u32 matrixC;\r
+ u32 matrixD;\r
+ u32 matrixV;\r
+ u32 matrixW;\r
+ u32 matrixX;\r
+ u32 matrixY;\r
+ u32 previewTime;\r
+ u32 previewDuration;\r
+ u32 posterTime;\r
+ u32 selectionTime;\r
+ u32 selectionDuration;\r
+ u32 currentTime;\r
+} GF_MovieHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_Descriptor *descriptor;\r
+} GF_ObjectDescriptorBox;\r
+\r
+/*used for entry list*/\r
+typedef struct\r
+{\r
+ u64 segmentDuration;\r
+ s64 mediaTime;\r
+ u32 mediaRate;\r
+} GF_EdtsEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *entryList;\r
+} GF_EditListBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_EditListBox *editList;\r
+} GF_EditBox;\r
+\r
+\r
+/*used to classify boxes in the UserData GF_Box*/\r
+typedef struct\r
+{\r
+ u32 boxType;\r
+ u8 uuid[16];\r
+ GF_List *boxList;\r
+} GF_UserDataMap;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *recordList;\r
+} GF_UserDataBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_MovieHeaderBox *mvhd;\r
+ GF_ObjectDescriptorBox *iods;\r
+ GF_UserDataBox *udta;\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+ struct __tag_mvex_box *mvex;\r
+#endif\r
+ /*meta box if any*/\r
+ struct __tag_meta_box *meta;\r
+ /*track boxes*/\r
+ GF_List *trackList;\r
+ /*other boxes*/\r
+ GF_List *boxes;\r
+\r
+ GF_ISOFile *mov;\r
+\r
+} GF_MovieBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u64 creationTime;\r
+ u64 modificationTime;\r
+ u32 trackID;\r
+ u32 reserved1;\r
+ u64 duration;\r
+ u32 reserved2[2];\r
+ u16 layer;\r
+ u16 alternate_group;\r
+ u16 volume;\r
+ u16 reserved3;\r
+ u32 matrix[9];\r
+ u32 width, height;\r
+} GF_TrackHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *boxList;\r
+} GF_TrackReferenceBox;\r
+\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_UserDataBox *udta;\r
+ GF_TrackHeaderBox *Header;\r
+ struct __tag_media_box *Media;\r
+ GF_EditBox *editBox;\r
+ GF_TrackReferenceBox *References;\r
+ /*meta box if any*/\r
+ struct __tag_meta_box *meta;\r
+ /*other*/\r
+ GF_List *boxes;\r
+\r
+ GF_MovieBox *moov;\r
+ /*private for media padding*/\r
+ u32 padding_bytes;\r
+ /*private for editing*/\r
+ char *name;\r
+ /*private for editing*/\r
+ Bool is_unpacked;\r
+} GF_TrackBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u64 creationTime;\r
+ u64 modificationTime;\r
+ u32 timeScale;\r
+ u64 duration;\r
+ char packedLanguage[4];\r
+ u16 reserved;\r
+} GF_MediaHeaderBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 reserved1;\r
+ u32 handlerType;\r
+ u8 reserved2[12];\r
+ char *nameUTF8;\r
+} GF_HandlerBox;\r
+\r
+typedef struct __tag_media_box\r
+{\r
+ GF_ISOM_BOX\r
+ GF_TrackBox *mediaTrack;\r
+ GF_MediaHeaderBox *mediaHeader;\r
+ GF_HandlerBox *handler;\r
+ struct __tag_media_info_box *information;\r
+ u64 BytesMissing;\r
+} GF_MediaBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u64 reserved;\r
+} GF_VideoMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 reserved;\r
+} GF_SoundMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ /*this is used for us INTERNALLY*/\r
+ u32 subType;\r
+ u32 maxPDUSize;\r
+ u32 avgPDUSize;\r
+ u32 maxBitrate;\r
+ u32 avgBitrate;\r
+ u32 slidingAverageBitrate;\r
+} GF_HintMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+} GF_MPEGMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+} GF_ODMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+} GF_OCRMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+} GF_SceneMediaHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *boxList;\r
+} GF_DataReferenceBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_DataReferenceBox *dref;\r
+} GF_DataInformationBox;\r
+\r
+#define GF_ISOM_DATAENTRY_FIELDS \\r
+ char *location;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_ISOM_DATAENTRY_FIELDS\r
+} GF_DataEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_ISOM_DATAENTRY_FIELDS\r
+} GF_DataEntryURLBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_ISOM_DATAENTRY_FIELDS\r
+ char *nameURN;\r
+} GF_DataEntryURNBox;\r
+\r
+typedef struct\r
+{\r
+ u32 sampleCount;\r
+ u32 sampleDelta;\r
+} GF_SttsEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_SttsEntry *entries;\r
+ u32 nb_entries, alloc_size;\r
+\r
+#ifndef GPAC_READ_ONLY\r
+ /*cache for WRITE*/\r
+ u32 w_currentSampleNum;\r
+ u64 w_LastDTS;\r
+#endif\r
+ /*cache for READ*/\r
+ u32 r_FirstSampleInEntry;\r
+ u32 r_currentEntryIndex;\r
+ u64 r_CurrentDTS;\r
+} GF_TimeToSampleBox;\r
+\r
+\r
+/*TO CHECK - it could be reasonnable to only use 16bits for both count and offset*/\r
+typedef struct\r
+{\r
+ u32 sampleCount;\r
+ u32 decodingOffset;\r
+} GF_DttsEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_DttsEntry *entries;\r
+ u32 nb_entries, alloc_size;\r
+\r
+#ifndef GPAC_READ_ONLY\r
+ u32 w_LastSampleNumber;\r
+ /*force one sample per entry*/\r
+ Bool unpack_mode;\r
+#endif\r
+ /*Cache for read*/\r
+ u32 r_currentEntryIndex;\r
+ u32 r_FirstSampleInEntry;\r
+} GF_CompositionOffsetBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ u32 SampleNumber;\r
+ u32 fragmentCount;\r
+ u16 *fragmentSizes;\r
+} GF_StsfEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *entryList;\r
+#ifndef GPAC_READ_ONLY\r
+ /*Cache for write*/\r
+ GF_StsfEntry *w_currentEntry;\r
+ u32 w_currentEntryIndex;\r
+#endif\r
+ /*Cache for read*/\r
+ u32 r_currentEntryIndex;\r
+ GF_StsfEntry *r_currentEntry;\r
+} GF_SampleFragmentBox;\r
+\r
+\r
+#define GF_ISOM_SAMPLE_ENTRY_FIELDS \\r
+ GF_ISOM_UUID_BOX \\r
+ u16 dataReferenceIndex; \\r
+ char reserved[ 6 ]; \\r
+ struct __tag_protect_box *protection_info;\r
+\r
+/*base sample entry box (never used but for typecasting)*/\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+} GF_SampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+ /*box type as specified in the file (not this box's type!!)*/\r
+ u32 EntryType;\r
+\r
+ char *data;\r
+ u32 data_size;\r
+} GF_GenericSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_ESD *desc;\r
+} GF_ESDBox;\r
+\r
+/*for all MPEG4 media except audio and video*/\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+ GF_ESDBox *esd;\r
+ /*used for hinting when extracting the OD stream...*/\r
+ GF_SLConfig *slc;\r
+} GF_MPEGSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 hSpacing;\r
+ u32 vSpacing;\r
+} GF_PixelAspectRatioBox;\r
+\r
+\r
+#define GF_ISOM_VISUAL_SAMPLE_ENTRY \\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS \\r
+ u16 version; \\r
+ u16 revision; \\r
+ u32 vendor; \\r
+ u32 temporal_quality; \\r
+ u32 spacial_quality; \\r
+ u16 Width, Height; \\r
+ u32 horiz_res, vert_res; \\r
+ u32 entry_data_size; \\r
+ u16 frames_per_sample; \\r
+ char compressor_name[33]; \\r
+ u16 bit_depth; \\r
+ s16 color_table_index; \\r
+ GF_PixelAspectRatioBox *pasp; \r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_VISUAL_SAMPLE_ENTRY\r
+} GF_VisualSampleEntryBox;\r
+\r
+void gf_isom_video_sample_entry_init(GF_VisualSampleEntryBox *ent);\r
+GF_Err gf_isom_video_sample_entry_read(GF_VisualSampleEntryBox *ptr, GF_BitStream *bs);\r
+#ifndef GPAC_READ_ONLY\r
+void gf_isom_video_sample_entry_write(GF_VisualSampleEntryBox *ent, GF_BitStream *bs);\r
+void gf_isom_video_sample_entry_size(GF_VisualSampleEntryBox *ent);\r
+#endif\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 bufferSizeDB;\r
+ u32 maxBitrate;\r
+ u32 avgBitrate;\r
+} GF_MPEG4BitRateBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *descriptors;\r
+} GF_MPEG4ExtensionDescriptorsBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_AVCConfig *config;\r
+} GF_AVCConfigurationBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_VISUAL_SAMPLE_ENTRY\r
+ GF_ESDBox *esd;\r
+ /*used for Publishing*/\r
+ GF_SLConfig *slc;\r
+\r
+ /*avc extensions - we merged with regular 'mp4v' box to handle isma E&A signaling of AVC*/\r
+ GF_AVCConfigurationBox *avc_config;\r
+ GF_MPEG4BitRateBox *bitrate;\r
+ /*ext descriptors*/\r
+ GF_MPEG4ExtensionDescriptorsBox *descr;\r
+ /*internally emulated esd*/\r
+ GF_ESD *emul_esd;\r
+ /*iPod's hack*/\r
+ GF_UnknownUUIDBox *ipod_ext;\r
+\r
+} GF_MPEGVisualSampleEntryBox;\r
+\r
+\r
+/*this is the default visual sdst (to handle unknown media)*/\r
+typedef struct\r
+{\r
+ GF_ISOM_VISUAL_SAMPLE_ENTRY\r
+ /*box type as specified in the file (not this box's type!!)*/\r
+ u32 EntryType;\r
+ /*opaque description data (ESDS in MP4, SMI in SVQ3, ...)*/\r
+ char *data;\r
+ u32 data_size;\r
+} GF_GenericVisualSampleEntryBox;\r
+\r
+\r
+#define GF_ISOM_AUDIO_SAMPLE_ENTRY \\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS \\r
+ u16 version; \\r
+ u16 revision; \\r
+ u32 vendor; \\r
+ u16 channel_count; \\r
+ u16 bitspersample; \\r
+ u16 compression_id; \\r
+ u16 packet_size; \\r
+ u16 samplerate_hi; \\r
+ u16 samplerate_lo;\r
+\r
+\r
+typedef struct \r
+{\r
+ GF_ISOM_AUDIO_SAMPLE_ENTRY\r
+} GF_AudioSampleEntryBox;\r
+\r
+void gf_isom_audio_sample_entry_init(GF_AudioSampleEntryBox *ptr);\r
+GF_Err gf_isom_audio_sample_entry_read(GF_AudioSampleEntryBox *ptr, GF_BitStream *bs);\r
+#ifndef GPAC_READ_ONLY\r
+void gf_isom_audio_sample_entry_write(GF_AudioSampleEntryBox *ptr, GF_BitStream *bs);\r
+void gf_isom_audio_sample_entry_size(GF_AudioSampleEntryBox *ptr);\r
+#endif\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_AUDIO_SAMPLE_ENTRY\r
+ GF_ESDBox *esd;\r
+ GF_SLConfig *slc;\r
+} GF_MPEGAudioSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_3GPConfig cfg;\r
+} GF_3GPPConfigBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_AUDIO_SAMPLE_ENTRY\r
+ GF_3GPPConfigBox *info;\r
+} GF_3GPPAudioSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_VISUAL_SAMPLE_ENTRY\r
+ GF_3GPPConfigBox *info;\r
+} GF_3GPPVisualSampleEntryBox;\r
+\r
+/*this is the default visual sdst (to handle unknown media)*/\r
+typedef struct\r
+{\r
+ GF_ISOM_AUDIO_SAMPLE_ENTRY\r
+ /*box type as specified in the file (not this box's type!!)*/\r
+ u32 EntryType;\r
+ /*opaque description data (ESDS in MP4, ...)*/\r
+ char *data;\r
+ u32 data_size;\r
+} GF_GenericAudioSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_AC3Config cfg;\r
+} GF_AC3ConfigBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_AUDIO_SAMPLE_ENTRY\r
+ GF_AC3ConfigBox *info;\r
+} GF_AC3SampleEntryBox;\r
+\r
+\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u8 profile;\r
+ u8 level;\r
+ u8 pathComponents;\r
+ Bool fullRequestHost;\r
+ Bool streamType;\r
+ u8 containsRedundant;\r
+ char *textEncoding;\r
+ char *contentEncoding;\r
+} GF_DIMSSceneConfigBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ char *content_script_types;\r
+} GF_DIMSScriptTypesBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+ GF_DIMSSceneConfigBox *config;\r
+ GF_MPEG4BitRateBox *bitrate;\r
+ GF_DIMSScriptTypesBox *scripts;\r
+} GF_DIMSSampleEntryBox;\r
+\r
+\r
+/*base sample entry box (never used but for typecasting)*/\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+ char *content_encoding; //optional\r
+ char *mime_type_or_namespace; //not optional\r
+ char *xml_schema_loc; // optional\r
+ GF_MPEG4BitRateBox *bitrate; // optional\r
+} GF_MetaDataSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *boxList;\r
+} GF_SampleDescriptionBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ /*if this is the compact version, sample size is actually fieldSize*/\r
+ u32 sampleSize;\r
+ u32 sampleCount;\r
+ u32 alloc_size;\r
+ u32 *sizes;\r
+} GF_SampleSizeBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 nb_entries;\r
+ u32 alloc_size;\r
+ u32 *offsets;\r
+} GF_ChunkOffsetBox;\r
+\r
+typedef struct \r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 nb_entries;\r
+ u32 alloc_size;\r
+ u64 *offsets;\r
+} GF_ChunkLargeOffsetBox;\r
+\r
+typedef struct\r
+{\r
+ u32 firstChunk;\r
+ u32 nextChunk;\r
+ u32 samplesPerChunk;\r
+ u32 sampleDescriptionIndex;\r
+ u8 isEdited;\r
+} GF_StscEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_StscEntry *entries;\r
+ u32 alloc_size, nb_entries;\r
+\r
+ /*0-based cache for READ. In WRITE mode, we always have 1 sample per chunk so no need for a cache*/\r
+ u32 currentIndex;\r
+ /*first sample number in this chunk*/\r
+ u32 firstSampleInCurrentChunk;\r
+ u32 currentChunk;\r
+ u32 ghostNumber;\r
+} GF_SampleToChunkBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 alloc_size, nb_entries;\r
+ u32 *sampleNumbers;\r
+ /*cache for READ mode (in write we realloc no matter what)*/\r
+ u32 r_LastSyncSample;\r
+ /*0-based index in the array*/\r
+ u32 r_LastSampleIndex;\r
+} GF_SyncSampleBox;\r
+\r
+typedef struct\r
+{\r
+ u32 shadowedSampleNumber;\r
+ s32 syncSampleNumber;\r
+} GF_StshEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *entries;\r
+ /*Cache for read mode*/\r
+ u32 r_LastEntryIndex;\r
+ u32 r_LastFoundSample;\r
+} GF_ShadowSyncBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 nb_entries;\r
+ u16 *priorities;\r
+} GF_DegradationPriorityBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 SampleCount;\r
+ u8 *padbits;\r
+} GF_PaddingBitsBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 sampleCount;\r
+ /*each dep type is packed on 1 byte*/\r
+ u8 *sample_info;\r
+} GF_SampleDependencyTypeBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_TimeToSampleBox *TimeToSample;\r
+ GF_CompositionOffsetBox *CompositionOffset;\r
+ GF_SyncSampleBox *SyncSample;\r
+ GF_SampleDescriptionBox *SampleDescription;\r
+ GF_SampleSizeBox *SampleSize;\r
+ GF_SampleToChunkBox *SampleToChunk;\r
+ /*untyped, to handle 32 bits and 64 bits chunkOffsets*/\r
+ GF_Box *ChunkOffset;\r
+ GF_ShadowSyncBox *ShadowSync;\r
+ GF_DegradationPriorityBox *DegradationPriority;\r
+ GF_PaddingBitsBox *PaddingBits;\r
+ GF_SampleDependencyTypeBox *SampleDep;\r
+ GF_SampleFragmentBox *Fragments;\r
+\r
+ u32 MaxSamplePerChunk;\r
+ u16 groupID;\r
+ u16 trackPriority;\r
+ u32 currentEntryIndex;\r
+} GF_SampleTableBox;\r
+\r
+typedef struct __tag_media_info_box\r
+{\r
+ GF_ISOM_BOX\r
+ GF_DataInformationBox *dataInformation;\r
+ GF_SampleTableBox *sampleTable;\r
+ GF_Box *InfoHeader;\r
+ struct __tag_data_map *dataHandler;\r
+ u32 dataEntryIndex;\r
+ GF_List *boxes;\r
+} GF_MediaInformationBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ char *data;\r
+ u32 dataSize;\r
+} GF_FreeSpaceBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ char packedLanguageCode[4];\r
+ char *notice;\r
+} GF_CopyrightBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ char *name;\r
+ u64 start_time;\r
+} GF_ChapterEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *list;\r
+} GF_ChapterListBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 reference_type;\r
+ u32 trackIDCount;\r
+ u32 *trackIDs;\r
+} GF_TrackReferenceTypeBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 majorBrand;\r
+ u32 minorVersion;\r
+ u32 altCount;\r
+ u32 *altBrand;\r
+} GF_FileTypeBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 *rates;\r
+ u32 *times;\r
+ u32 count;\r
+} GF_ProgressiveDownloadBox;\r
+\r
+\r
+/*\r
+ 3GPP streaming text boxes\r
+*/\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 entry_count;\r
+ GF_FontRecord *fonts;\r
+} GF_FontTableBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS \\r
+ u32 displayFlags;\r
+ s8 horizontal_justification;\r
+ s8 vertical_justification;\r
+ /*ARGB*/\r
+ u32 back_color;\r
+ GF_BoxRecord default_box; \r
+ GF_StyleRecord default_style;\r
+ GF_FontTableBox *font_table;\r
+} GF_TextSampleEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 entry_count;\r
+ GF_StyleRecord *styles;\r
+} GF_TextStyleBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u16 startcharoffset;\r
+ u16 endcharoffset; \r
+} GF_TextHighlightBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ /*ARGB*/\r
+ u32 hil_color;\r
+} GF_TextHighlightColorBox;\r
+\r
+typedef struct\r
+{\r
+ u32 highlight_endtime;\r
+ u16 start_charoffset;\r
+ u16 end_charoffset;\r
+} KaraokeRecord;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 highlight_starttime;\r
+ u16 nb_entries;\r
+ KaraokeRecord *records;\r
+} GF_TextKaraokeBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 scroll_delay;\r
+} GF_TextScrollDelayBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u16 startcharoffset;\r
+ u16 endcharoffset;\r
+ char *URL;\r
+ char *URL_hint;\r
+} GF_TextHyperTextBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_BoxRecord box;\r
+} GF_TextBoxBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u16 startcharoffset;\r
+ u16 endcharoffset;\r
+} GF_TextBlinkBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u8 wrap_flag;\r
+} GF_TextWrapBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 switchGroup;\r
+ u32 *attributeList;\r
+ u32 attributeListCount;\r
+} GF_TrackSelectionBox;\r
+\r
+/*\r
+ MPEG-21 extensions\r
+*/\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 xml_length;\r
+ char *xml;\r
+} GF_XMLBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 data_length;\r
+ char *data;\r
+} GF_BinaryXMLBox;\r
+\r
+typedef struct\r
+{\r
+ u64 extent_offset;\r
+ u64 extent_length;\r
+#ifndef GPAC_READ_OLNLY\r
+ /*for storage only*/\r
+ u64 original_extent_offset;\r
+#endif\r
+} GF_ItemExtentEntry;\r
+\r
+typedef struct \r
+{\r
+ u16 item_ID;\r
+ u16 data_reference_index;\r
+ u64 base_offset;\r
+#ifndef GPAC_READ_OLNLY\r
+ /*for storage only*/\r
+ u64 original_base_offset;\r
+#endif\r
+ GF_List *extent_entries;\r
+} GF_ItemLocationEntry;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u8 offset_size;\r
+ u8 length_size;\r
+ u8 base_offset_size;\r
+ GF_List *location_entries;\r
+} GF_ItemLocationBox;\r
+\r
+typedef struct \r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u16 item_ID;\r
+} GF_PrimaryItemBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *protection_information;\r
+} GF_ItemProtectionBox;\r
+\r
+typedef struct \r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u16 item_ID;\r
+ u16 item_protection_index;\r
+ /*zero-terminated strings*/\r
+ char *item_name;\r
+ char *content_type;\r
+ char *content_encoding;\r
+ // needed to actually read the resource file, but not written in the MP21 file.\r
+ char *full_path;\r
+} GF_ItemInfoEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *item_infos;\r
+} GF_ItemInfoBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 data_format;\r
+} GF_OriginalFormatBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 scheme_type;\r
+ u32 scheme_version;\r
+ char *URI;\r
+} GF_SchemeTypeBox;\r
+\r
+/*ISMACryp specific*/\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ /*zero-terminated string*/\r
+ char *URI;\r
+} GF_ISMAKMSBox;\r
+\r
+/*ISMACryp specific*/\r
+typedef struct __isma_format_box\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u8 selective_encryption;\r
+ u8 key_indicator_length;\r
+ u8 IV_length;\r
+} GF_ISMASampleFormatBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_ISMAKMSBox *ikms;\r
+ GF_ISMASampleFormatBox *isfm;\r
+ struct __oma_kms_box *okms;\r
+} GF_SchemeInformationBox;\r
+\r
+typedef struct __tag_protect_box\r
+{\r
+ GF_ISOM_BOX\r
+ GF_OriginalFormatBox *original_format;\r
+ GF_SchemeTypeBox *scheme_type;\r
+ GF_SchemeInformationBox *info;\r
+} GF_ProtectionInfoBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_List *descriptors;\r
+} GF_IPMPInfoBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_IPMP_ToolList *ipmp_tools;\r
+ GF_List *descriptors;\r
+} GF_IPMPControlBox;\r
+\r
+\r
+typedef struct __tag_meta_box\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_HandlerBox *handler; \r
+ GF_PrimaryItemBox *primary_resource;\r
+ GF_DataInformationBox *file_locations;\r
+ GF_ItemLocationBox *item_locations;\r
+ GF_ItemProtectionBox *protections;\r
+ GF_ItemInfoBox *item_infos;\r
+ GF_IPMPControlBox *IPMP_control;\r
+ GF_List *other_boxes;\r
+} GF_MetaBox;\r
+\r
+\r
+\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+\r
+/*V2 boxes - Movie Fragments*/\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u64 fragment_duration;\r
+} GF_MovieExtendsHeaderBox;\r
+\r
+\r
+typedef struct __tag_mvex_box\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *TrackExList;\r
+ GF_MovieExtendsHeaderBox *mehd;\r
+ GF_ISOFile *mov;\r
+} GF_MovieExtendsBox;\r
+\r
+/*the TrackExtends contains default values for the track fragments*/\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 trackID;\r
+ u32 def_sample_desc_index;\r
+ u32 def_sample_duration;\r
+ u32 def_sample_size;\r
+ u32 def_sample_flags;\r
+ GF_TrackBox *track;\r
+} GF_TrackExtendsBox;\r
+\r
+/*indicates the seq num of this fragment*/\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 sequence_number;\r
+} GF_MovieFragmentHeaderBox;\r
+\r
+/*MovieFragment is a container IN THE FILE, contains 1 fragment*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_MovieFragmentHeaderBox *mfhd;\r
+ GF_List *TrackList;\r
+ GF_ISOFile *mov;\r
+} GF_MovieFragmentBox;\r
+\r
+\r
+/*FLAGS for TRAF*/\r
+enum\r
+{\r
+ GF_ISOM_TRAF_BASE_OFFSET = 0x01,\r
+ GF_ISOM_TRAF_SAMPLE_DESC = 0x02,\r
+ GF_ISOM_TRAF_SAMPLE_DUR = 0x08,\r
+ GF_ISOM_TRAF_SAMPLE_SIZE = 0x10,\r
+ GF_ISOM_TRAF_SAMPLE_FLAGS = 0x20,\r
+ GF_ISOM_TRAF_DUR_EMPTY = 0x10000\r
+};\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 trackID;\r
+ /* all the following are optional fields */\r
+ u64 base_data_offset;\r
+ u32 sample_desc_index;\r
+ u32 def_sample_duration;\r
+ u32 def_sample_size;\r
+ u32 def_sample_flags;\r
+ u32 EmptyDuration;\r
+ u8 IFrameSwitching;\r
+} GF_TrackFragmentHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_TrackFragmentHeaderBox *tfhd;\r
+ GF_List *TrackRuns;\r
+ /*keep a pointer to default flags*/\r
+ GF_TrackExtendsBox *trex;\r
+ /*when data caching is on*/\r
+ u32 DataCache;\r
+} GF_TrackFragmentBox;\r
+\r
+/*FLAGS for TRUN : specify what is written in the SampleTable of TRUN*/\r
+enum\r
+{\r
+ GF_ISOM_TRUN_DATA_OFFSET = 0x01,\r
+ GF_ISOM_TRUN_FIRST_FLAG = 0x04,\r
+ GF_ISOM_TRUN_DURATION = 0x100,\r
+ GF_ISOM_TRUN_SIZE = 0x200,\r
+ GF_ISOM_TRUN_FLAGS = 0x400,\r
+ GF_ISOM_TRUN_CTS_OFFSET = 0x800\r
+};\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 sample_count;\r
+ /*the following are optional fields */\r
+ s32 data_offset;\r
+ u32 first_sample_flags;\r
+ /*can be empty*/\r
+ GF_List *entries;\r
+\r
+ /*in write mode with data caching*/\r
+ GF_BitStream *cache;\r
+} GF_TrackFragmentRunBox;\r
+\r
+typedef struct\r
+{\r
+ u32 Duration;\r
+ u32 size;\r
+ u32 flags;\r
+ u32 CTS_Offset;\r
+} GF_TrunEntry;\r
+\r
+#endif\r
+\r
+\r
+/*RTP Hint Track Sample Entry*/\r
+typedef struct\r
+{\r
+ GF_ISOM_SAMPLE_ENTRY_FIELDS\r
+ u16 HintTrackVersion;\r
+ u16 LastCompatibleVersion;\r
+ u32 MaxPacketSize;\r
+ GF_List *HintDataTable;\r
+ /*this is where we store the current RTP sample in read/write mode*/\r
+ struct __tag_hint_sample *hint_sample;\r
+ /*current hint sample in read mode, 1-based (0 is reset)*/\r
+ u32 cur_sample;\r
+ u32 pck_sn, ts_offset, ssrc;\r
+ GF_TrackReferenceTypeBox *hint_ref;\r
+} GF_HintSampleEntryBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 subType;\r
+ char *sdpText;\r
+} GF_RTPBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ char *sdpText;\r
+} GF_SDPBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ s32 timeOffset;\r
+} GF_RTPOBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ /*contains GF_SDPBox if in track, GF_RTPBox if in movie*/\r
+ GF_Box *SDP;\r
+ GF_List *boxList;\r
+} GF_HintTrackInfoBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u8 reserved;\r
+ u8 prefered;\r
+ u8 required;\r
+} GF_RelyHintBox;\r
+\r
+/***********************************************************\r
+ data entry tables for RTP\r
+***********************************************************/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 timeScale;\r
+} GF_TSHintEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 TimeOffset; \r
+} GF_TimeOffHintEntryBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 SeqOffset;\r
+} GF_SeqOffHintEntryBox;\r
+\r
+\r
+\r
+/***********************************************************\r
+ hint track information boxes for RTP\r
+***********************************************************/\r
+\r
+/*Total number of bytes that will be sent, including 12-byte RTP headers, but not including any network headers*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbBytes;\r
+} GF_TRPYBox;\r
+\r
+/*32-bits version of trpy used in Darwin*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 nbBytes;\r
+} GF_TOTLBox;\r
+\r
+/*Total number of network packets that will be sent*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbPackets;\r
+} GF_NUMPBox;\r
+\r
+/*32-bits version of nump used in Darwin*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 nbPackets;\r
+} GF_NPCKBox;\r
+\r
+\r
+/*Total number of bytes that will be sent, not including 12-byte RTP headers*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbBytes;\r
+} GF_NTYLBox;\r
+\r
+/*32-bits version of tpyl used in Darwin*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 nbBytes;\r
+} GF_TPAYBox;\r
+\r
+/*Maximum data rate in bits per second.*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 granularity;\r
+ u32 maxDataRate;\r
+} GF_MAXRBox;\r
+\r
+\r
+/*Total number of bytes from the media track to be sent*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbBytes;\r
+} GF_DMEDBox;\r
+\r
+/*Number of bytes of immediate data to be sent*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbBytes;\r
+} GF_DIMMBox;\r
+\r
+\r
+/*Number of bytes of repeated data to be sent*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u64 nbBytes;\r
+} GF_DREPBox;\r
+\r
+/*Smallest relative transmission time, in milliseconds. signed integer for smoothing*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ s32 minTime;\r
+} GF_TMINBox;\r
+\r
+/*Largest relative transmission time, in milliseconds.*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ s32 maxTime;\r
+} GF_TMAXBox;\r
+\r
+/*Largest packet, in bytes, including 12-byte RTP header*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 maxSize;\r
+} GF_PMAXBox;\r
+\r
+/*Longest packet duration, in milliseconds*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 maxDur;\r
+} GF_DMAXBox;\r
+\r
+/*32-bit payload type number, followed by rtpmap payload string */\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ u32 payloadCode;\r
+ char *payloadString;\r
+} GF_PAYTBox;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ char *string;\r
+} GF_NameBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *dataRates;\r
+ GF_List *boxList;\r
+} GF_HintInfoBox;\r
+\r
+/*Apple extension*/\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u32 reserved;\r
+ char *data;\r
+ u32 dataSize;\r
+} GF_DataBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_DataBox *data;\r
+} GF_ListItemBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *tags;\r
+} GF_ItemListBox;\r
+\r
+/*OMA (P)DCF extensions*/\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u8 EncryptionMethod;\r
+ u8 PaddingScheme;\r
+ u64 PlaintextLength;\r
+ char *ContentID;\r
+ char *RightsIssuerURL;\r
+ char *TextualHeaders;\r
+ u32 TextualHeadersLen;\r
+ GF_List *ExtendedHeaders;\r
+} GF_OMADRMCommonHeaderBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ u8 GKEncryptionMethod;\r
+ char *GroupID;\r
+ u16 GKLength;\r
+ char *GroupKey;\r
+} GF_OMADRMGroupIDBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BOX\r
+ GF_List *boxes;\r
+} GF_OMADRMMutableInformationBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ char TransactionID[16];\r
+} GF_OMADRMTransactionTrackingBox;\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ char *oma_ro;\r
+ u32 oma_ro_size;\r
+} GF_OMADRMRightsObjectBox;\r
+\r
+/*identical*/\r
+typedef struct __isma_format_box GF_OMADRMAUFormatBox;\r
+\r
+typedef struct __oma_kms_box\r
+{\r
+ GF_ISOM_FULL_BOX\r
+ GF_OMADRMCommonHeaderBox *hdr;\r
+ GF_OMADRMAUFormatBox *fmt;\r
+} GF_OMADRMKMSBox;\r
+\r
+\r
+\r
+/*\r
+ Data Map (media storage) stuff\r
+*/\r
+\r
+/*regular file IO*/\r
+#define GF_ISOM_DATA_FILE 0x01\r
+/*File Mapaing object, read-only mode on complete files (no download)*/\r
+#define GF_ISOM_DATA_FILE_MAPPING 0x02\r
+/*External file object. Needs implementation*/\r
+#define GF_ISOM_DATA_FILE_EXTERN 0x03\r
+\r
+/*Data Map modes*/\r
+enum\r
+{\r
+ /*read mode*/\r
+ GF_ISOM_DATA_MAP_READ = 1,\r
+ /*write mode*/\r
+ GF_ISOM_DATA_MAP_WRITE = 2,\r
+ /*the following modes are just ways of signaling extended functionalities\r
+ edit mode, to make sure the file is here, set to GF_ISOM_DATA_MAP_READ afterwards*/\r
+ GF_ISOM_DATA_MAP_EDIT = 3,\r
+ /*read-only access to the movie file: we create a file mapping object\r
+ mode is set to GF_ISOM_DATA_MAP_READ afterwards*/\r
+ GF_ISOM_DATA_MAP_READ_ONLY = 4,\r
+};\r
+\r
+/*this is the DataHandler structure each data handler has its own bitstream*/\r
+#define GF_ISOM_BASE_DATA_HANDLER \\r
+ u8 type; \\r
+ u64 curPos; \\r
+ u8 mode; \\r
+ GF_BitStream *bs;\r
+\r
+typedef struct __tag_data_map\r
+{\r
+ GF_ISOM_BASE_DATA_HANDLER\r
+} GF_DataMap;\r
+\r
+typedef struct \r
+{\r
+ GF_ISOM_BASE_DATA_HANDLER\r
+ FILE *stream;\r
+ Bool last_acces_was_read;\r
+#ifndef GPAC_READ_ONLY\r
+ char *temp_file;\r
+#endif\r
+} GF_FileDataMap;\r
+\r
+/*file mapping handler. used if supported, only on read mode for complete files (not in file download)*/\r
+typedef struct \r
+{\r
+ GF_ISOM_BASE_DATA_HANDLER\r
+ char *name;\r
+ u32 file_size;\r
+ char *byte_map;\r
+ u32 byte_pos;\r
+} GF_FileMappingDataMap;\r
+\r
+GF_Err gf_isom_datamap_new(const char *location, const char *parentPath, u8 mode, GF_DataMap **outDataMap);\r
+void gf_isom_datamap_del(GF_DataMap *ptr);\r
+GF_Err gf_isom_datamap_open(GF_MediaBox *minf, u32 dataRefIndex, u8 Edit);\r
+void gf_isom_datamap_close(GF_MediaInformationBox *minf);\r
+u32 gf_isom_datamap_get_data(GF_DataMap *map, char *buffer, u32 bufferLength, u64 Offset);\r
+\r
+/*File-based data map*/\r
+GF_DataMap *gf_isom_fdm_new(const char *sPath, u8 mode);\r
+void gf_isom_fdm_del(GF_FileDataMap *ptr);\r
+u32 gf_isom_fdm_get_data(GF_FileDataMap *ptr, char *buffer, u32 bufferLength, u64 fileOffset);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+GF_DataMap *gf_isom_fdm_new_temp(const char *sTempPath);\r
+#endif\r
+\r
+/*file-mapping, read only*/\r
+GF_DataMap *gf_isom_fmo_new(const char *sPath, u8 mode);\r
+void gf_isom_fmo_del(GF_FileMappingDataMap *ptr);\r
+u32 gf_isom_fmo_get_data(GF_FileMappingDataMap *ptr, char *buffer, u32 bufferLength, u64 fileOffset);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+u64 gf_isom_datamap_get_offset(GF_DataMap *map);\r
+GF_Err gf_isom_datamap_add_data(GF_DataMap *ptr, char *data, u32 dataSize);\r
+#endif \r
+\r
+/*\r
+ Movie stuff\r
+*/\r
+\r
+\r
+/*time def for MP4/QT/MJ2K files*/\r
+#define GF_ISOM_MAC_TIME_OFFSET 2082758400/*208284480 */\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+#define GF_ISOM_FORMAT_FRAG_FLAGS(pad, sync, deg) ( ( (pad) << 17) | ( ( !(sync) ) << 16) | (deg) );\r
+#define GF_ISOM_GET_FRAG_PAD(flag) ( (flag) >> 17) & 0x7\r
+#define GF_ISOM_GET_FRAG_SYNC(flag) ( ! ( ( (flag) >> 16) & 0x1))\r
+#define GF_ISOM_GET_FRAG_DEG(flag) (flag) & 0x7FFF\r
+#endif\r
+\r
+enum\r
+{\r
+ GF_ISOM_FRAG_WRITE_READY = 0x01,\r
+ GF_ISOM_FRAG_READ_DEBUG = 0x02,\r
+};\r
+\r
+/*this is our movie object*/\r
+struct __tag_isom {\r
+ /*the last fatal error*/\r
+ GF_Err LastError;\r
+ /*the original filename*/\r
+ char *fileName;\r
+ /*the original file in read/edit, and also used in fragments mode\r
+ once the first moov has been written\r
+ Nota: this API doesn't allow fragments BEFORE the MOOV in order\r
+ to make easily parsable files (note there could be some data (mdat) before\r
+ the moov*/\r
+ GF_DataMap *movieFileMap;\r
+\r
+#ifndef GPAC_READ_ONLY\r
+ /*the final file name*/\r
+ char *finalName;\r
+ /*the file where we store edited samples (for READ_WRITE and WRITE mode only)*/\r
+ GF_DataMap *editFileMap;\r
+ /*the interleaving time for dummy mode (in movie TimeScale)*/\r
+ u32 interleavingTime;\r
+#endif\r
+\r
+ u8 openMode;\r
+ u8 storageMode;\r
+ /*if true 3GPP text streams are read as MPEG-4 StreamingText*/\r
+ u8 convert_streaming_text;\r
+ u8 is_jp2;\r
+\r
+ /*main boxes for fast access*/\r
+ /*moov*/\r
+ GF_MovieBox *moov;\r
+ /*our MDAT box (one and only one when we store the file)*/\r
+ GF_MediaDataBox *mdat;\r
+ /*file brand (since v2, NULL means mp4 v1)*/\r
+ GF_FileTypeBox *brand;\r
+ /*progressive download info*/\r
+ GF_ProgressiveDownloadBox *pdin;\r
+ /*meta box if any*/\r
+ GF_MetaBox *meta;\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+ u32 FragmentsFlags, NextMoofNumber;\r
+ /*active fragment*/\r
+ GF_MovieFragmentBox *moof;\r
+ /*in WRITE mode, this is the current MDAT where data is written*/\r
+ /*in READ mode this is the last valid file position before a gf_isom_box_read failed*/\r
+ u64 current_top_box_start;\r
+#endif\r
+\r
+ /*this contains ALL the root boxes excepts fragments*/\r
+ GF_List *TopBoxes;\r
+\r
+ /*default track for sync of MPEG4 streams - this is the first accessed stream without OCR info - only set in READ mode*/\r
+ s32 es_id_default_sync;\r
+};\r
+\r
+/*time function*/\r
+u64 gf_isom_get_mp4time();\r
+/*set the last error of the file. if file is NULL, set the static error (used for IO errors*/\r
+void gf_isom_set_last_error(GF_ISOFile *the_file, GF_Err error);\r
+GF_Err gf_isom_parse_movie_boxes(GF_ISOFile *mov, u64 *bytesMissing);\r
+GF_ISOFile *gf_isom_new_movie();\r
+/*Movie and Track access functions*/\r
+GF_TrackBox *gf_isom_get_track_from_file(GF_ISOFile *the_file, u32 trackNumber);\r
+GF_TrackBox *gf_isom_get_track(GF_MovieBox *moov, u32 trackNumber);\r
+GF_TrackBox *gf_isom_get_track_from_id(GF_MovieBox *moov, u32 trackID);\r
+u32 gf_isom_get_tracknum_from_id(GF_MovieBox *moov, u32 trackID);\r
+/*open a movie*/\r
+GF_ISOFile *gf_isom_open_file(const char *fileName, u32 OpenMode, const char *tmp_dir);\r
+/*close and delete a movie*/\r
+void gf_isom_delete_movie(GF_ISOFile *mov);\r
+/*StreamDescription reconstruction Functions*/\r
+GF_Err GetESD(GF_MovieBox *moov, u32 trackID, u32 StreamDescIndex, GF_ESD **outESD);\r
+GF_Err GetESDForTime(GF_MovieBox *moov, u32 trackID, u64 CTS, GF_ESD **outESD);\r
+GF_Err Media_GetSampleDesc(GF_MediaBox *mdia, u32 SampleDescIndex, GF_SampleEntryBox **out_entry, u32 *dataRefIndex);\r
+GF_Err Media_GetSampleDescIndex(GF_MediaBox *mdia, u64 DTS, u32 *sampleDescIndex);\r
+/*get esd for given sample desc - \r
+ @true_desc_only: if true doesn't emulate desc and returns native ESD,\r
+ otherwise emulates if needed/possible (TimedText) and return a hard copy of the desc\r
+*/\r
+GF_Err Media_GetESD(GF_MediaBox *mdia, u32 sampleDescIndex, GF_ESD **esd, Bool true_desc_only);\r
+Bool Track_IsMPEG4Stream(u32 HandlerType);\r
+Bool IsMP4Description(u32 entryType);\r
+/*Find a reference of a given type*/\r
+GF_Err Track_FindRef(GF_TrackBox *trak, u32 ReferenceType, GF_TrackReferenceTypeBox **dpnd);\r
+/*Time and sample*/\r
+GF_Err GetMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *MediaTime, s64 *SegmentStartTime, s64 *MediaOffset, u8 *useEdit);\r
+GF_Err Media_GetSample(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample **samp, u32 *sampleDescriptionIndex, Bool no_data, u64 *out_offset);\r
+GF_Err Media_CheckDataEntry(GF_MediaBox *mdia, u32 dataEntryIndex);\r
+GF_Err Media_FindSyncSample(GF_SampleTableBox *stbl, u32 searchFromTime, u32 *sampleNumber, u8 mode);\r
+GF_Err Media_RewriteODFrame(GF_MediaBox *mdia, GF_ISOSample *sample);\r
+GF_Err Media_FindDataRef(GF_DataReferenceBox *dref, char *URLname, char *URNname, u32 *dataRefIndex);\r
+Bool Media_IsSelfContained(GF_MediaBox *mdia, u32 StreamDescIndex);\r
+\r
+/*check the TimeToSample for the given time and return the Sample number\r
+if the entry is not found, return the closest sampleNumber in prevSampleNumber and 0 in sampleNumber\r
+if the DTS required is after all DTSs in the list, set prevSampleNumber and SampleNumber to 0\r
+useCTS specifies that we're looking for a composition time\r
+*/\r
+GF_Err findEntryForTime(GF_SampleTableBox *stbl, u64 DTS, u8 useCTS, u32 *sampleNumber, u32 *prevSampleNumber);\r
+/*Reading of the sample tables*/\r
+GF_Err stbl_GetSampleSize(GF_SampleSizeBox *stsz, u32 SampleNumber, u32 *Size);\r
+GF_Err stbl_GetSampleCTS(GF_CompositionOffsetBox *ctts, u32 SampleNumber, u32 *CTSoffset);\r
+GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS);\r
+/*find a RAP or set the prev / next RAPs if vars are passed*/\r
+GF_Err stbl_GetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 *IsRAP, u32 *prevRAP, u32 *nextRAP);\r
+GF_Err stbl_GetSampleInfos(GF_SampleTableBox *stbl, u32 sampleNumber, u64 *offset, u32 *chunkNumber, u32 *descIndex, u8 *isEdited);\r
+GF_Err stbl_GetSampleShadow(GF_ShadowSyncBox *stsh, u32 *sampleNumber, u32 *syncNum);\r
+GF_Err stbl_GetPaddingBits(GF_PaddingBitsBox *padb, u32 SampleNumber, u8 *PadBits);\r
+u32 stbl_GetSampleFragmentCount(GF_SampleFragmentBox *stsf, u32 sampleNumber);\r
+u32 stbl_GetSampleFragmentSize(GF_SampleFragmentBox *stsf, u32 sampleNumber, u32 FragmentIndex);\r
+GF_Err stbl_GetSampleDepType(GF_SampleDependencyTypeBox *stbl, u32 SampleNumber, u32 *dependsOn, u32 *dependedOn, u32 *redundant);\r
+\r
+/*unpack sample2chunk and chunk offset so that we have 1 sample per chunk (edition mode only)*/\r
+GF_Err stbl_UnpackOffsets(GF_SampleTableBox *stbl);\r
+GF_Err SetTrackDuration(GF_TrackBox *trak);\r
+GF_Err Media_SetDuration(GF_TrackBox *trak);\r
+\r
+/*rewrites 3GP samples desc as MPEG-4 ESD*/\r
+GF_Err gf_isom_get_ttxt_esd(GF_MediaBox *mdia, GF_ESD **out_esd);\r
+/*inserts TTU header - only used when conversion to StreamingText is on*/\r
+GF_Err gf_isom_rewrite_text_sample(GF_ISOSample *samp, u32 sampleDescriptionIndex, u32 sample_dur);\r
+\r
+GF_UserDataMap *udta_getEntry(GF_UserDataBox *ptr, u32 box_type, bin128 *uuid);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+\r
+GF_Err FlushCaptureMode(GF_ISOFile *movie);\r
+GF_Err CanAccessMovie(GF_ISOFile *movie, u32 Mode);\r
+GF_ISOFile *gf_isom_create_movie(const char *fileName, u32 OpenMode, const char *tmp_dir);\r
+void gf_isom_insert_moov(GF_ISOFile *file);\r
+\r
+GF_Err WriteToFile(GF_ISOFile *movie);\r
+GF_Err Track_SetStreamDescriptor(GF_TrackBox *trak, u32 StreamDescriptionIndex, u32 DataReferenceIndex, GF_ESD *esd, u32 *outStreamIndex);\r
+u8 RequestTrack(GF_MovieBox *moov, u32 TrackID);\r
+/*Track-Media setup*/\r
+GF_Err NewMedia(GF_MediaBox **mdia, u32 MediaType, u32 TimeScale);\r
+GF_Err Media_ParseODFrame(GF_MediaBox *mdia, GF_ISOSample *sample, GF_ISOSample **od_samp);\r
+GF_Err Media_AddSample(GF_MediaBox *mdia, u64 data_offset, GF_ISOSample *sample, u32 StreamDescIndex, u32 syncShadowNumber);\r
+GF_Err Media_CreateDataRef(GF_DataReferenceBox *dref, char *URLname, char *URNname, u32 *dataRefIndex);\r
+/*update a media sample. ONLY in edit mode*/\r
+GF_Err Media_UpdateSample(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample *sample, Bool data_only);\r
+GF_Err Media_UpdateSampleReference(GF_MediaBox *mdia, u32 sampleNumber, GF_ISOSample *sample, u64 data_offset);\r
+/*addition in the sample tables*/\r
+GF_Err stbl_AddDTS(GF_SampleTableBox *stbl, u64 DTS, u32 *sampleNumber, u32 LastAUDefDuration);\r
+GF_Err stbl_AddCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 CTSoffset);\r
+GF_Err stbl_AddSize(GF_SampleSizeBox *stsz, u32 sampleNumber, u32 size);\r
+GF_Err stbl_AddRAP(GF_SyncSampleBox *stss, u32 sampleNumber);\r
+GF_Err stbl_AddShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber, u32 shadowNumber);\r
+GF_Err stbl_AddChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u32 StreamDescIndex, u64 offset);\r
+/*NB - no add for padding, this is done only through SetPaddingBits*/\r
+\r
+GF_Err stbl_AddSampleFragment(GF_SampleTableBox *stbl, u32 sampleNumber, u16 size);\r
+\r
+/*update of the sample table\r
+all these functions are called in edit and we always have 1 sample per chunk*/\r
+GF_Err stbl_SetChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u64 offset);\r
+GF_Err stbl_SetSampleCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 offset);\r
+GF_Err stbl_SetSampleSize(GF_SampleSizeBox *stsz, u32 SampleNumber, u32 size);\r
+GF_Err stbl_SetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 isRAP);\r
+GF_Err stbl_SetSyncShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber, u32 syncSample);\r
+GF_Err stbl_SetPaddingBits(GF_SampleTableBox *stbl, u32 SampleNumber, u8 bits);\r
+/*for adding fragmented samples*/\r
+GF_Err stbl_SampleSizeAppend(GF_SampleSizeBox *stsz, u32 data_size);\r
+/*writing of the final chunk info in edit mode*/\r
+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
+/*EDIT LIST functions*/\r
+GF_EdtsEntry *CreateEditEntry(u64 EditDuration, u64 MediaTime, u8 EditMode);\r
+\r
+GF_Err stbl_SetRedundant(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+GF_Err stbl_AddRedundant(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+\r
+/*REMOVE functions*/\r
+GF_Err stbl_RemoveDTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 LastAUDefDuration);\r
+GF_Err stbl_RemoveCTS(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+GF_Err stbl_RemoveSize(GF_SampleSizeBox *stsz, u32 sampleNumber);\r
+GF_Err stbl_RemoveChunk(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+GF_Err stbl_RemoveRAP(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+GF_Err stbl_RemoveShadow(GF_ShadowSyncBox *stsh, u32 sampleNumber);\r
+GF_Err stbl_RemovePaddingBits(GF_SampleTableBox *stbl, u32 SampleNumber);\r
+GF_Err stbl_RemoveSampleFragments(GF_SampleTableBox *stbl, u32 sampleNumber);\r
+GF_Err stbl_RemoveRedundant(GF_SampleTableBox *stbl, u32 SampleNumber);\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+GF_Err StoreFragment(GF_ISOFile *movie);\r
+#endif\r
+\r
+#endif \r
+\r
+\r
+GF_Err GetNextMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *OutMovieTime);\r
+GF_Err GetPrevMediaTime(GF_TrackBox *trak, u64 movieTime, u64 *OutMovieTime);\r
+\r
+Bool IsHintTrack(GF_TrackBox *trak);\r
+Bool CheckHintFormat(GF_TrackBox *trak, u32 HintType);\r
+u32 GetHintFormat(GF_TrackBox *trak);\r
+\r
+\r
+/*locate a box by its type or UUID*/\r
+GF_ItemListBox *gf_ismo_locate_box(GF_List *list, u32 boxType, bin128 UUID);\r
+\r
+GF_Err moov_AddBox(GF_Box *ptr, GF_Box *a);\r
+GF_Err tref_AddBox(GF_Box *ptr, GF_Box *a);\r
+GF_Err trak_AddBox(GF_Box *ptr, GF_Box *a);\r
+GF_Err mvex_AddBox(GF_Box *ptr, GF_Box *a);\r
+GF_Err stsd_AddBox(GF_SampleDescriptionBox *ptr, GF_Box *a);\r
+GF_Err hnti_AddBox(GF_HintTrackInfoBox *hnti, GF_Box *a);\r
+GF_Err udta_AddBox(GF_UserDataBox *ptr, GF_Box *a);\r
+GF_Err edts_AddBox(GF_Box *s, GF_Box *a);\r
+GF_Err stdp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sdtp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dinf_AddBox(GF_Box *s, GF_Box *a);\r
+GF_Err minf_AddBox(GF_Box *s, GF_Box *a);\r
+GF_Err mdia_AddBox(GF_Box *s, GF_Box *a);\r
+GF_Err stbl_AddBox(GF_SampleTableBox *ptr, GF_Box *a);\r
+\r
+GF_Err AVC_UpdateESD(GF_MPEGVisualSampleEntryBox *avc, GF_ESD *esd);\r
+void AVC_RewriteESDescriptor(GF_MPEGVisualSampleEntryBox *avc);\r
+GF_Err reftype_AddRefTrack(GF_TrackReferenceTypeBox *ref, u32 trackID, u16 *outRefIndex);\r
+\r
+\r
+/*\r
+ Hinting stuff\r
+*/\r
+\r
+/*the HintType for each protocol*/\r
+enum\r
+{\r
+ GF_ISMO_HINT_RTP = 1,\r
+ /*not supported yet*/\r
+ GF_ISMO_MPEG2_TS = 2\r
+};\r
+\r
+/*****************************************************\r
+ RTP Data Entries\r
+*****************************************************/\r
+\r
+#define GF_ISMO_BASE_DTE_ENTRY \\r
+ u8 source;\r
+\r
+typedef struct\r
+{\r
+ GF_ISMO_BASE_DTE_ENTRY\r
+} GF_GenericDTE;\r
+\r
+typedef struct\r
+{\r
+ GF_ISMO_BASE_DTE_ENTRY\r
+} GF_EmptyDTE;\r
+\r
+typedef struct\r
+{\r
+ GF_ISMO_BASE_DTE_ENTRY\r
+ u8 dataLength;\r
+ char data[14];\r
+} GF_ImmediateDTE;\r
+\r
+typedef struct\r
+{\r
+ GF_ISMO_BASE_DTE_ENTRY\r
+ s8 trackRefIndex;\r
+ u32 sampleNumber;\r
+ u16 dataLength;\r
+ u32 byteOffset;\r
+ u16 bytesPerComp;\r
+ u16 samplesPerComp;\r
+} GF_SampleDTE;\r
+\r
+typedef struct\r
+{\r
+ GF_ISMO_BASE_DTE_ENTRY\r
+ s8 trackRefIndex;\r
+ u32 streamDescIndex;\r
+ u16 dataLength;\r
+ u32 byteOffset;\r
+ u32 reserved;\r
+} GF_StreamDescDTE;\r
+\r
+GF_GenericDTE *NewDTE(u8 type);\r
+void DelDTE(GF_GenericDTE *dte);\r
+GF_Err ReadDTE(GF_GenericDTE *dte, GF_BitStream *bs);\r
+GF_Err WriteDTE(GF_GenericDTE *dte, GF_BitStream *bs);\r
+GF_Err OffsetDTE(GF_GenericDTE *dte, u32 offset, u32 HintSampleNumber);\r
+\r
+/*****************************************************\r
+ RTP Sample\r
+*****************************************************/\r
+\r
+/*data cache when reading*/\r
+typedef struct __tag_hint_data_cache\r
+{\r
+ GF_ISOSample *samp;\r
+ GF_TrackBox *trak;\r
+ u32 sample_num;\r
+} GF_HintDataCache;\r
+\r
+\r
+typedef struct __tag_hint_sample\r
+{\r
+ /*used internally for future protocol support (write only)*/\r
+ u8 HintType;\r
+ /*QT packets*/\r
+ u16 reserved;\r
+ GF_List *packetTable;\r
+ char *AdditionalData;\r
+ u32 dataLength;\r
+ /*used internally for hinting*/\r
+ u64 TransmissionTime;\r
+ /*for read only, used to store samples fetched while building packets*/\r
+ GF_List *sample_cache;\r
+} GF_HintSample;\r
+\r
+GF_HintSample *gf_isom_hint_sample_new(u32 ProtocolType);\r
+void gf_isom_hint_sample_del(GF_HintSample *ptr);\r
+GF_Err gf_isom_hint_sample_read(GF_HintSample *ptr, GF_BitStream *bs, u32 sampleSize);\r
+GF_Err gf_isom_hint_sample_write(GF_HintSample *ptr, GF_BitStream *bs);\r
+u32 gf_isom_hint_sample_size(GF_HintSample *ptr);\r
+\r
+/*****************************************************\r
+ Hint Packets (generic packet for future protocol support)\r
+*****************************************************/\r
+#define GF_ISOM_BASE_PACKET \\r
+ s32 relativeTransTime;\r
+\r
+\r
+typedef struct\r
+{\r
+ GF_ISOM_BASE_PACKET\r
+} GF_HintPacket;\r
+\r
+GF_HintPacket *gf_isom_hint_pck_new(u8 HintType);\r
+void gf_isom_hint_pck_del(u8 HintType, GF_HintPacket *ptr);\r
+GF_Err gf_isom_hint_pck_read(u8 HintType, GF_HintPacket *ptr, GF_BitStream *bs);\r
+GF_Err gf_isom_hint_pck_write(u8 HintType, GF_HintPacket *ptr, GF_BitStream *bs);\r
+u32 gf_isom_hint_pck_size(u8 HintType, GF_HintPacket *ptr);\r
+GF_Err gf_isom_hint_pck_offset(u8 HintType, GF_HintPacket *ptr, u32 offset, u32 HintSampleNumber);\r
+GF_Err gf_isom_hint_pck_add_dte(u8 HintType, GF_HintPacket *ptr, GF_GenericDTE *dte, u8 AtBegin);\r
+/*get the size of the packet AS RECONSTRUCTED BY THE SERVER (without CSRC)*/\r
+u32 gf_isom_hint_pck_length(u8 HintType, GF_HintPacket *ptr);\r
+\r
+/*the RTP packet*/\r
+typedef struct\r
+{\r
+ GF_ISOM_BASE_PACKET \r
+ \r
+ /*RTP Header*/\r
+ u8 P_bit;\r
+ u8 X_bit;\r
+ u8 M_bit;\r
+ /*on 7 bits */\r
+ u8 payloadType;\r
+ u16 SequenceNumber;\r
+ /*Hinting flags*/\r
+ u8 B_bit;\r
+ u8 R_bit;\r
+ /*ExtraInfos TLVs - not really used */\r
+ GF_List *TLV;\r
+ /*DataTable - contains the DTEs...*/\r
+ GF_List *DataTable;\r
+} GF_RTPPacket;\r
+\r
+GF_RTPPacket *gf_isom_hint_rtp_new();\r
+void gf_isom_hint_rtp_del(GF_RTPPacket *ptr);\r
+GF_Err gf_isom_hint_rtp_read(GF_RTPPacket *ptr, GF_BitStream *bs);\r
+GF_Err gf_isom_hint_rtp_write(GF_RTPPacket *ptr, GF_BitStream *bs);\r
+u32 gf_isom_hint_rtp_size(GF_RTPPacket *ptr);\r
+GF_Err gf_isom_hint_rtp_offset(GF_RTPPacket *ptr, u32 offset, u32 HintSampleNumber);\r
+u32 gf_isom_hint_rtp_length(GF_RTPPacket *ptr);\r
+\r
+\r
+\r
+struct _3gpp_text_sample \r
+{\r
+ char *text;\r
+ u32 len;\r
+ \r
+ GF_TextStyleBox *styles;\r
+ /*at most one of these*/\r
+ GF_TextHighlightColorBox *highlight_color;\r
+ GF_TextScrollDelayBox *scroll_delay;\r
+ GF_TextBoxBox *box;\r
+ GF_TextWrapBox *wrap;\r
+\r
+ GF_List *others;\r
+ GF_TextKaraokeBox *cur_karaoke;\r
+};\r
+\r
+GF_TextSample *gf_isom_parse_texte_sample(GF_BitStream *bs);\r
+GF_TextSample *gf_isom_parse_texte_sample_from_data(char *data, u32 dataLength);\r
+\r
+\r
+\r
+/*\r
+ these are exported just in case, there should never be needed outside the lib\r
+*/\r
+\r
+GF_Box *reftype_New();\r
+GF_Box *free_New();\r
+GF_Box *mdat_New();\r
+GF_Box *moov_New();\r
+GF_Box *mvhd_New();\r
+GF_Box *mdhd_New();\r
+GF_Box *vmhd_New();\r
+GF_Box *smhd_New();\r
+GF_Box *hmhd_New();\r
+GF_Box *nmhd_New();\r
+GF_Box *stbl_New();\r
+GF_Box *dinf_New();\r
+GF_Box *url_New();\r
+GF_Box *urn_New();\r
+GF_Box *cprt_New();\r
+GF_Box *chpl_New();\r
+GF_Box *hdlr_New();\r
+GF_Box *iods_New();\r
+GF_Box *trak_New();\r
+GF_Box *mp4s_New();\r
+GF_Box *mp4v_New();\r
+GF_Box *mp4a_New();\r
+GF_Box *edts_New();\r
+GF_Box *udta_New();\r
+GF_Box *dref_New();\r
+GF_Box *stsd_New();\r
+GF_Box *stts_New();\r
+GF_Box *ctts_New();\r
+GF_Box *stsh_New();\r
+GF_Box *elst_New();\r
+GF_Box *stsc_New();\r
+GF_Box *stsz_New();\r
+GF_Box *stco_New();\r
+GF_Box *stss_New();\r
+GF_Box *stdp_New();\r
+GF_Box *sdtp_New();\r
+GF_Box *co64_New();\r
+GF_Box *esds_New();\r
+GF_Box *minf_New();\r
+GF_Box *tkhd_New();\r
+GF_Box *tref_New();\r
+GF_Box *mdia_New();\r
+GF_Box *defa_New();\r
+GF_Box *uuid_New();\r
+GF_Box *void_New();\r
+GF_Box *stsf_New();\r
+GF_Box *gnrm_New();\r
+GF_Box *gnrv_New();\r
+GF_Box *gnra_New();\r
+GF_Box *pdin_New();\r
+\r
+void reftype_del(GF_Box *);\r
+void free_del(GF_Box *);\r
+void mdat_del(GF_Box *);\r
+void moov_del(GF_Box *);\r
+void mvhd_del(GF_Box *);\r
+void mdhd_del(GF_Box *);\r
+void vmhd_del(GF_Box *);\r
+void smhd_del(GF_Box *);\r
+void hmhd_del(GF_Box *);\r
+void nmhd_del(GF_Box *);\r
+void stbl_del(GF_Box *);\r
+void dinf_del(GF_Box *);\r
+void url_del(GF_Box *);\r
+void urn_del(GF_Box *);\r
+void chpl_del(GF_Box *);\r
+void cprt_del(GF_Box *);\r
+void hdlr_del(GF_Box *);\r
+void iods_del(GF_Box *);\r
+void trak_del(GF_Box *);\r
+void mp4s_del(GF_Box *);\r
+void mp4v_del(GF_Box *);\r
+void mp4a_del(GF_Box *);\r
+void edts_del(GF_Box *);\r
+void udta_del(GF_Box *);\r
+void dref_del(GF_Box *);\r
+void stsd_del(GF_Box *);\r
+void stts_del(GF_Box *);\r
+void ctts_del(GF_Box *);\r
+void stsh_del(GF_Box *);\r
+void elst_del(GF_Box *);\r
+void stsc_del(GF_Box *);\r
+void stsz_del(GF_Box *);\r
+void stco_del(GF_Box *);\r
+void stss_del(GF_Box *);\r
+void stdp_del(GF_Box *);\r
+void sdtp_del(GF_Box *);\r
+void co64_del(GF_Box *);\r
+void esds_del(GF_Box *);\r
+void minf_del(GF_Box *);\r
+void tkhd_del(GF_Box *);\r
+void tref_del(GF_Box *);\r
+void mdia_del(GF_Box *);\r
+void defa_del(GF_Box *);\r
+void uuid_del(GF_Box *);\r
+void void_del(GF_Box *);\r
+void stsf_del(GF_Box *);\r
+void gnrm_del(GF_Box *);\r
+void gnrv_del(GF_Box *);\r
+void gnra_del(GF_Box *);\r
+void pdin_del(GF_Box *);\r
+\r
+GF_Err reftype_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err free_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdat_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err moov_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mvhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err vmhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err smhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hmhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err nmhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stbl_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dinf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err url_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err urn_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err chpl_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err cprt_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hdlr_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iods_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trak_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4s_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4v_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4a_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err edts_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err udta_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dref_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stts_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ctts_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsh_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err elst_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsc_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsz_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stco_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stss_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stdp_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sdtp_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err co64_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err esds_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err minf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tkhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tref_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdia_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err defa_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err uuid_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err void_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gnrm_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gnrv_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gnra_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pdin_Write(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err reftype_Size(GF_Box *);\r
+GF_Err free_Size(GF_Box *);\r
+GF_Err mdat_Size(GF_Box *);\r
+GF_Err moov_Size(GF_Box *);\r
+GF_Err mvhd_Size(GF_Box *);\r
+GF_Err mdhd_Size(GF_Box *);\r
+GF_Err vmhd_Size(GF_Box *);\r
+GF_Err smhd_Size(GF_Box *);\r
+GF_Err hmhd_Size(GF_Box *);\r
+GF_Err nmhd_Size(GF_Box *);\r
+GF_Err stbl_Size(GF_Box *);\r
+GF_Err dinf_Size(GF_Box *);\r
+GF_Err url_Size(GF_Box *);\r
+GF_Err urn_Size(GF_Box *);\r
+GF_Err chpl_Size(GF_Box *);\r
+GF_Err cprt_Size(GF_Box *);\r
+GF_Err hdlr_Size(GF_Box *);\r
+GF_Err iods_Size(GF_Box *);\r
+GF_Err trak_Size(GF_Box *);\r
+GF_Err mp4s_Size(GF_Box *);\r
+GF_Err mp4v_Size(GF_Box *);\r
+GF_Err mp4a_Size(GF_Box *);\r
+GF_Err edts_Size(GF_Box *);\r
+GF_Err udta_Size(GF_Box *);\r
+GF_Err dref_Size(GF_Box *);\r
+GF_Err stsd_Size(GF_Box *);\r
+GF_Err stts_Size(GF_Box *);\r
+GF_Err ctts_Size(GF_Box *);\r
+GF_Err stsh_Size(GF_Box *);\r
+GF_Err elst_Size(GF_Box *);\r
+GF_Err stsc_Size(GF_Box *);\r
+GF_Err stsz_Size(GF_Box *);\r
+GF_Err stco_Size(GF_Box *);\r
+GF_Err stss_Size(GF_Box *);\r
+GF_Err stdp_Size(GF_Box *);\r
+GF_Err sdtp_Size(GF_Box *);\r
+GF_Err co64_Size(GF_Box *);\r
+GF_Err esds_Size(GF_Box *);\r
+GF_Err minf_Size(GF_Box *);\r
+GF_Err tkhd_Size(GF_Box *);\r
+GF_Err tref_Size(GF_Box *);\r
+GF_Err mdia_Size(GF_Box *);\r
+GF_Err defa_Size(GF_Box *);\r
+GF_Err uuid_Size(GF_Box *);\r
+GF_Err void_Size(GF_Box *);\r
+GF_Err stsf_Size(GF_Box *);\r
+GF_Err gnrm_Size(GF_Box *);\r
+GF_Err gnrv_Size(GF_Box *);\r
+GF_Err gnra_Size(GF_Box *);\r
+GF_Err pdin_Size(GF_Box *);\r
+\r
+GF_Err reftype_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err free_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdat_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err moov_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mvhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err vmhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err smhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hmhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err nmhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stbl_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dinf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err url_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err urn_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err chpl_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err cprt_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hdlr_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iods_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trak_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4s_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4v_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mp4a_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err edts_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err udta_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dref_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stts_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ctts_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsh_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err elst_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsc_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsz_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stco_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stss_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stdp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sdtp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err co64_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err esds_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err minf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tkhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tref_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdia_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err defa_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err uuid_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err void_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err stsf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pdin_Read(GF_Box *s, GF_BitStream *bs);\r
+\r
+\r
+GF_Box *hinf_New();\r
+GF_Box *trpy_New();\r
+GF_Box *totl_New();\r
+GF_Box *nump_New();\r
+GF_Box *npck_New();\r
+GF_Box *tpyl_New();\r
+GF_Box *tpay_New();\r
+GF_Box *maxr_New();\r
+GF_Box *dmed_New();\r
+GF_Box *dimm_New();\r
+GF_Box *drep_New();\r
+GF_Box *tmin_New();\r
+GF_Box *tmax_New();\r
+GF_Box *pmax_New();\r
+GF_Box *dmax_New();\r
+GF_Box *payt_New();\r
+GF_Box *name_New();\r
+GF_Box *rely_New();\r
+GF_Box *snro_New();\r
+GF_Box *tims_New();\r
+GF_Box *tsro_New();\r
+GF_Box *ghnt_New();\r
+GF_Box *hnti_New();\r
+GF_Box *sdp_New();\r
+GF_Box *rtpo_New();\r
+\r
+void hinf_del(GF_Box *s);\r
+void trpy_del(GF_Box *s);\r
+void totl_del(GF_Box *s);\r
+void nump_del(GF_Box *s);\r
+void npck_del(GF_Box *s);\r
+void tpyl_del(GF_Box *s);\r
+void tpay_del(GF_Box *s);\r
+void maxr_del(GF_Box *s);\r
+void dmed_del(GF_Box *s);\r
+void dimm_del(GF_Box *s);\r
+void drep_del(GF_Box *s);\r
+void tmin_del(GF_Box *s);\r
+void tmax_del(GF_Box *s);\r
+void pmax_del(GF_Box *s);\r
+void dmax_del(GF_Box *s);\r
+void payt_del(GF_Box *s);\r
+void name_del(GF_Box *s);\r
+void rely_del(GF_Box *s);\r
+void snro_del(GF_Box *s);\r
+void tims_del(GF_Box *s);\r
+void tsro_del(GF_Box *s);\r
+void ghnt_del(GF_Box *s);\r
+void hnti_del(GF_Box *a);\r
+void sdp_del(GF_Box *a);\r
+void rtpo_del(GF_Box *s);\r
+\r
+GF_Err hinf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trpy_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err totl_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err nump_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err npck_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tpyl_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tpay_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err maxr_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dmed_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dimm_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err drep_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tmin_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tmax_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pmax_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dmax_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err payt_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err name_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err rely_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err snro_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tims_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tsro_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ghnt_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hnti_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sdp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err rtpo_Read(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err hinf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trpy_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err totl_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err nump_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err npck_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tpyl_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tpay_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err maxr_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dmed_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dimm_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err drep_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tmin_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tmax_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pmax_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dmax_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err payt_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err name_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err rely_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err snro_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tims_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tsro_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ghnt_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hnti_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sdp_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err rtpo_Write(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err hinf_Size(GF_Box *s);\r
+GF_Err trpy_Size(GF_Box *s);\r
+GF_Err totl_Size(GF_Box *s);\r
+GF_Err nump_Size(GF_Box *s);\r
+GF_Err npck_Size(GF_Box *s);\r
+GF_Err tpyl_Size(GF_Box *s);\r
+GF_Err tpay_Size(GF_Box *s);\r
+GF_Err maxr_Size(GF_Box *s);\r
+GF_Err dmed_Size(GF_Box *s);\r
+GF_Err dimm_Size(GF_Box *s);\r
+GF_Err drep_Size(GF_Box *s);\r
+GF_Err tmin_Size(GF_Box *s);\r
+GF_Err tmax_Size(GF_Box *s);\r
+GF_Err pmax_Size(GF_Box *s);\r
+GF_Err dmax_Size(GF_Box *s);\r
+GF_Err payt_Size(GF_Box *s);\r
+GF_Err name_Size(GF_Box *s);\r
+GF_Err rely_Size(GF_Box *s);\r
+GF_Err snro_Size(GF_Box *s);\r
+GF_Err tims_Size(GF_Box *s);\r
+GF_Err tsro_Size(GF_Box *s);\r
+GF_Err ghnt_Size(GF_Box *s);\r
+GF_Err hnti_Size(GF_Box *s);\r
+GF_Err sdp_Size(GF_Box *s);\r
+GF_Err rtpo_Size(GF_Box *s);\r
+\r
+\r
+GF_Box *ftyp_New();\r
+void ftyp_del(GF_Box *s);\r
+GF_Err ftyp_Read(GF_Box *s,GF_BitStream *bs);\r
+GF_Err ftyp_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ftyp_Size(GF_Box *s);\r
+\r
+GF_Box *padb_New();\r
+void padb_del(GF_Box *s);\r
+GF_Err padb_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err padb_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err padb_Size(GF_Box *s);\r
+\r
+GF_Box *gppa_New(u32 type);\r
+GF_Box *gppv_New(u32 type);\r
+GF_Box *gppc_New(u32 type);\r
+void gppa_del(GF_Box *s);\r
+void gppv_del(GF_Box *s);\r
+void gppc_del(GF_Box *s);\r
+GF_Err gppa_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gppv_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gppc_Read(GF_Box *s, GF_BitStream *bs);\r
+#ifndef GPAC_READ_ONLY\r
+GF_Err gppa_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gppv_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gppc_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err gppa_Size(GF_Box *s);\r
+GF_Err gppv_Size(GF_Box *s);\r
+GF_Err gppc_Size(GF_Box *s);\r
+#endif\r
+\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+GF_Box *mvex_New();\r
+GF_Box *trex_New();\r
+GF_Box *moof_New();\r
+GF_Box *mfhd_New();\r
+GF_Box *traf_New();\r
+GF_Box *tfhd_New();\r
+GF_Box *trun_New();\r
+\r
+void mvex_del(GF_Box *s);\r
+void trex_del(GF_Box *s);\r
+void moof_del(GF_Box *s);\r
+void mfhd_del(GF_Box *s);\r
+void traf_del(GF_Box *s);\r
+void tfhd_del(GF_Box *s);\r
+void trun_del(GF_Box *s);\r
+\r
+GF_Err mvex_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trex_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err moof_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mfhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err traf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tfhd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trun_Read(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err mvex_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trex_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err moof_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mfhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err traf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tfhd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err trun_Write(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err mvex_Size(GF_Box *s);\r
+GF_Err trex_Size(GF_Box *s);\r
+GF_Err moof_Size(GF_Box *s);\r
+GF_Err mfhd_Size(GF_Box *s);\r
+GF_Err traf_Size(GF_Box *s);\r
+GF_Err tfhd_Size(GF_Box *s);\r
+GF_Err trun_Size(GF_Box *s);\r
+\r
+\r
+GF_Box *mehd_New();\r
+void mehd_del(GF_Box *s);\r
+GF_Err mehd_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mehd_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mehd_Size(GF_Box *s);\r
+\r
+#endif \r
+\r
+/*avc ext*/\r
+GF_Box *avcc_New();\r
+void avcc_del(GF_Box *s);\r
+GF_Err avcc_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err avcc_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err avcc_Size(GF_Box *s);\r
+\r
+GF_Box *avc1_New();\r
+\r
+GF_Box *m4ds_New();\r
+void m4ds_del(GF_Box *s);\r
+GF_Err m4ds_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err m4ds_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err m4ds_Size(GF_Box *s);\r
+\r
+GF_Box *btrt_New();\r
+void btrt_del(GF_Box *s);\r
+GF_Err btrt_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err btrt_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err btrt_Size(GF_Box *s);\r
+\r
+\r
+/*3GPP streaming text*/\r
+GF_Box *ftab_New();\r
+GF_Box *tx3g_New();\r
+GF_Box *styl_New();\r
+GF_Box *hlit_New();\r
+GF_Box *hclr_New();\r
+GF_Box *krok_New();\r
+GF_Box *dlay_New();\r
+GF_Box *href_New();\r
+GF_Box *tbox_New();\r
+GF_Box *blnk_New();\r
+GF_Box *twrp_New();\r
+\r
+void ftab_del(GF_Box *s);\r
+void tx3g_del(GF_Box *s);\r
+void styl_del(GF_Box *s);\r
+void hlit_del(GF_Box *s);\r
+void hclr_del(GF_Box *s);\r
+void krok_del(GF_Box *s);\r
+void dlay_del(GF_Box *s);\r
+void href_del(GF_Box *s);\r
+void tbox_del(GF_Box *s);\r
+void blnk_del(GF_Box *s);\r
+void twrp_del(GF_Box *s);\r
+\r
+GF_Err ftab_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tx3g_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err styl_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hlit_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hclr_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err krok_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dlay_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err href_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tbox_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err blnk_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err twrp_Read(GF_Box *s, GF_BitStream *bs);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+GF_Err ftab_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tx3g_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err styl_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hlit_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err hclr_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err krok_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dlay_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err href_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tbox_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err blnk_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err twrp_Write(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err ftab_Size(GF_Box *s);\r
+GF_Err tx3g_Size(GF_Box *s);\r
+GF_Err styl_Size(GF_Box *s);\r
+GF_Err hlit_Size(GF_Box *s);\r
+GF_Err hclr_Size(GF_Box *s);\r
+GF_Err krok_Size(GF_Box *s);\r
+GF_Err dlay_Size(GF_Box *s);\r
+GF_Err href_Size(GF_Box *s);\r
+GF_Err tbox_Size(GF_Box *s);\r
+GF_Err blnk_Size(GF_Box *s);\r
+GF_Err twrp_Size(GF_Box *s);\r
+#endif\r
+\r
+\r
+/* MPEG-21 functions */\r
+GF_Box *meta_New();\r
+GF_Box *xml_New();\r
+GF_Box *bxml_New();\r
+GF_Box *iloc_New();\r
+GF_Box *pitm_New();\r
+GF_Box *ipro_New();\r
+GF_Box *infe_New();\r
+GF_Box *iinf_New();\r
+GF_Box *sinf_New();\r
+GF_Box *frma_New();\r
+GF_Box *schm_New();\r
+GF_Box *schi_New();\r
+GF_Box *enca_New();\r
+GF_Box *encv_New();\r
+GF_Box *encs_New();\r
+\r
+void meta_del(GF_Box *s);\r
+void xml_del(GF_Box *s);\r
+void bxml_del(GF_Box *s);\r
+void iloc_del(GF_Box *s);\r
+void pitm_del(GF_Box *s);\r
+void ipro_del(GF_Box *s);\r
+void infe_del(GF_Box *s);\r
+void iinf_del(GF_Box *s);\r
+void sinf_del(GF_Box *s);\r
+void frma_del(GF_Box *s);\r
+void schm_del(GF_Box *s);\r
+void schi_del(GF_Box *s);\r
+\r
+GF_Err meta_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err xml_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err bxml_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iloc_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pitm_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ipro_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err infe_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iinf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sinf_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err frma_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err schm_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err schi_Read(GF_Box *s, GF_BitStream *bs);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+GF_Err meta_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err xml_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err bxml_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iloc_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pitm_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ipro_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err infe_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iinf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err sinf_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err frma_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err schm_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err schi_Write(GF_Box *s, GF_BitStream *bs);\r
+\r
+GF_Err meta_Size(GF_Box *s);\r
+GF_Err xml_Size(GF_Box *s);\r
+GF_Err bxml_Size(GF_Box *s);\r
+GF_Err iloc_Size(GF_Box *s);\r
+GF_Err pitm_Size(GF_Box *s);\r
+GF_Err ipro_Size(GF_Box *s);\r
+GF_Err infe_Size(GF_Box *s);\r
+GF_Err iinf_Size(GF_Box *s);\r
+GF_Err sinf_Size(GF_Box *s);\r
+GF_Err frma_Size(GF_Box *s);\r
+GF_Err schm_Size(GF_Box *s);\r
+GF_Err schi_Size(GF_Box *s);\r
+#endif\r
+\r
+/* end of MPEG-21 functions */\r
+\r
+\r
+/** ISMACryp functions **/\r
+GF_Box *iKMS_New();\r
+GF_Box *iSFM_New();\r
+void iKMS_del(GF_Box *s);\r
+void iSFM_del(GF_Box *s);\r
+GF_Err iKMS_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iSFM_Read(GF_Box *s, GF_BitStream *bs);\r
+#ifndef GPAC_READ_ONLY\r
+GF_Err iKMS_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iSFM_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err iKMS_Size(GF_Box *s);\r
+GF_Err iSFM_Size(GF_Box *s);\r
+#endif\r
+\r
+/* Apple extensions */\r
+void ilst_del(GF_Box *s);\r
+void ListItem_del(GF_Box *s);\r
+void data_del(GF_Box *s);\r
+GF_Err ilst_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ListItem_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err data_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Box *ilst_New();\r
+GF_Box *ListItem_New(u32 type);\r
+GF_Box *data_New();\r
+#ifndef GPAC_READ_ONLY\r
+GF_Err ilst_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ListItem_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err data_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ilst_Size(GF_Box *s);\r
+GF_Err ListItem_Size(GF_Box *s);\r
+GF_Err data_Size(GF_Box *s);\r
+#endif\r
+\r
+\r
+GF_Err gb_box_array_dump(GF_List *list, FILE * trace);\r
+GF_Err reftype_dump(GF_Box *a, FILE * trace);\r
+GF_Err free_dump(GF_Box *a, FILE * trace);\r
+GF_Err mdat_dump(GF_Box *a, FILE * trace);\r
+GF_Err moov_dump(GF_Box *a, FILE * trace);\r
+GF_Err mvhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err mdhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err vmhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err smhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err hmhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err nmhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err stbl_dump(GF_Box *a, FILE * trace);\r
+GF_Err dinf_dump(GF_Box *a, FILE * trace);\r
+GF_Err url_dump(GF_Box *a, FILE * trace);\r
+GF_Err urn_dump(GF_Box *a, FILE * trace);\r
+GF_Err cprt_dump(GF_Box *a, FILE * trace);\r
+GF_Err hdlr_dump(GF_Box *a, FILE * trace);\r
+GF_Err iods_dump(GF_Box *a, FILE * trace);\r
+GF_Err trak_dump(GF_Box *a, FILE * trace);\r
+GF_Err mp4s_dump(GF_Box *a, FILE * trace);\r
+GF_Err mp4v_dump(GF_Box *a, FILE * trace);\r
+GF_Err mp4a_dump(GF_Box *a, FILE * trace);\r
+GF_Err edts_dump(GF_Box *a, FILE * trace);\r
+GF_Err udta_dump(GF_Box *a, FILE * trace);\r
+GF_Err dref_dump(GF_Box *a, FILE * trace);\r
+GF_Err stsd_dump(GF_Box *a, FILE * trace);\r
+GF_Err stts_dump(GF_Box *a, FILE * trace);\r
+GF_Err ctts_dump(GF_Box *a, FILE * trace);\r
+GF_Err stsh_dump(GF_Box *a, FILE * trace);\r
+GF_Err elst_dump(GF_Box *a, FILE * trace);\r
+GF_Err stsc_dump(GF_Box *a, FILE * trace);\r
+GF_Err stsz_dump(GF_Box *a, FILE * trace);\r
+GF_Err stco_dump(GF_Box *a, FILE * trace);\r
+GF_Err stss_dump(GF_Box *a, FILE * trace);\r
+GF_Err stdp_dump(GF_Box *a, FILE * trace);\r
+GF_Err sdtp_dump(GF_Box *a, FILE * trace);\r
+GF_Err co64_dump(GF_Box *a, FILE * trace);\r
+GF_Err esds_dump(GF_Box *a, FILE * trace);\r
+GF_Err minf_dump(GF_Box *a, FILE * trace);\r
+GF_Err tkhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err tref_dump(GF_Box *a, FILE * trace);\r
+GF_Err mdia_dump(GF_Box *a, FILE * trace);\r
+GF_Err defa_dump(GF_Box *a, FILE * trace);\r
+GF_Err void_dump(GF_Box *a, FILE * trace);\r
+GF_Err ftyp_dump(GF_Box *a, FILE * trace);\r
+GF_Err padb_dump(GF_Box *a, FILE * trace);\r
+GF_Err stsf_dump(GF_Box *a, FILE * trace);\r
+GF_Err gnrm_dump(GF_Box *a, FILE * trace);\r
+GF_Err gnrv_dump(GF_Box *a, FILE * trace);\r
+GF_Err gnra_dump(GF_Box *a, FILE * trace);\r
+GF_Err gppa_dump(GF_Box *a, FILE * trace);\r
+GF_Err gppv_dump(GF_Box *a, FILE * trace);\r
+GF_Err gppc_dump(GF_Box *a, FILE * trace);\r
+GF_Err chpl_dump(GF_Box *a, FILE * trace);\r
+GF_Err dpin_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Err hinf_dump(GF_Box *a, FILE * trace);\r
+GF_Err trpy_dump(GF_Box *a, FILE * trace);\r
+GF_Err totl_dump(GF_Box *a, FILE * trace);\r
+GF_Err nump_dump(GF_Box *a, FILE * trace);\r
+GF_Err npck_dump(GF_Box *a, FILE * trace);\r
+GF_Err tpyl_dump(GF_Box *a, FILE * trace);\r
+GF_Err tpay_dump(GF_Box *a, FILE * trace);\r
+GF_Err maxr_dump(GF_Box *a, FILE * trace);\r
+GF_Err dmed_dump(GF_Box *a, FILE * trace);\r
+GF_Err dimm_dump(GF_Box *a, FILE * trace);\r
+GF_Err drep_dump(GF_Box *a, FILE * trace);\r
+GF_Err tmin_dump(GF_Box *a, FILE * trace);\r
+GF_Err tmax_dump(GF_Box *a, FILE * trace);\r
+GF_Err pmax_dump(GF_Box *a, FILE * trace);\r
+GF_Err dmax_dump(GF_Box *a, FILE * trace);\r
+GF_Err payt_dump(GF_Box *a, FILE * trace);\r
+GF_Err name_dump(GF_Box *a, FILE * trace);\r
+GF_Err rely_dump(GF_Box *a, FILE * trace);\r
+GF_Err snro_dump(GF_Box *a, FILE * trace);\r
+GF_Err tims_dump(GF_Box *a, FILE * trace);\r
+GF_Err tsro_dump(GF_Box *a, FILE * trace);\r
+GF_Err ghnt_dump(GF_Box *a, FILE * trace);\r
+GF_Err hnti_dump(GF_Box *a, FILE * trace);\r
+GF_Err sdp_dump(GF_Box *a, FILE * trace);\r
+GF_Err rtpo_dump(GF_Box *a, FILE * trace);\r
+\r
+\r
+\r
+#ifndef GPAC_ISOM_NO_FRAGMENTS\r
+GF_Err mvex_dump(GF_Box *a, FILE * trace);\r
+GF_Err mehd_dump(GF_Box *a, FILE * trace);\r
+GF_Err trex_dump(GF_Box *a, FILE * trace);\r
+GF_Err moof_dump(GF_Box *a, FILE * trace);\r
+GF_Err mfhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err traf_dump(GF_Box *a, FILE * trace);\r
+GF_Err tfhd_dump(GF_Box *a, FILE * trace);\r
+GF_Err trun_dump(GF_Box *a, FILE * trace);\r
+#endif\r
+\r
+GF_Err avcc_dump(GF_Box *a, FILE * trace);\r
+GF_Err avc1_dump(GF_Box *a, FILE * trace);\r
+GF_Err m4ds_dump(GF_Box *a, FILE * trace);\r
+GF_Err btrt_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Err ftab_dump(GF_Box *a, FILE * trace);\r
+GF_Err tx3g_dump(GF_Box *a, FILE * trace);\r
+GF_Err styl_dump(GF_Box *a, FILE * trace);\r
+GF_Err hlit_dump(GF_Box *a, FILE * trace);\r
+GF_Err hclr_dump(GF_Box *a, FILE * trace);\r
+GF_Err krok_dump(GF_Box *a, FILE * trace);\r
+GF_Err dlay_dump(GF_Box *a, FILE * trace);\r
+GF_Err href_dump(GF_Box *a, FILE * trace);\r
+GF_Err tbox_dump(GF_Box *a, FILE * trace);\r
+GF_Err blnk_dump(GF_Box *a, FILE * trace);\r
+GF_Err twrp_dump(GF_Box *a, FILE * trace);\r
+\r
+/* ISMACryp dump */\r
+GF_Err iKMS_dump(GF_Box *a, FILE * trace);\r
+GF_Err iSFM_dump(GF_Box *a, FILE * trace);\r
+\r
+/*MPEG-21 extensions dump*/\r
+GF_Err meta_dump(GF_Box *a, FILE * trace);\r
+GF_Err xml_dump(GF_Box *a, FILE * trace);\r
+GF_Err bxml_dump(GF_Box *a, FILE * trace);\r
+GF_Err iloc_dump(GF_Box *a, FILE * trace);\r
+GF_Err pitm_dump(GF_Box *a, FILE * trace);\r
+GF_Err ipro_dump(GF_Box *a, FILE * trace);\r
+GF_Err infe_dump(GF_Box *a, FILE * trace);\r
+GF_Err iinf_dump(GF_Box *a, FILE * trace);\r
+GF_Err sinf_dump(GF_Box *a, FILE * trace);\r
+GF_Err frma_dump(GF_Box *a, FILE * trace);\r
+GF_Err schm_dump(GF_Box *a, FILE * trace);\r
+GF_Err schi_dump(GF_Box *a, FILE * trace);\r
+\r
+/*Apple extensions*/\r
+GF_Err ilst_dump(GF_Box *a, FILE * trace);\r
+GF_Err ListItem_dump(GF_Box *a, FILE * trace);\r
+GF_Err data_dump(GF_Box *a, FILE * trace);\r
+\r
+/*Apple extensions*/\r
+GF_MetaBox *gf_isom_apple_get_meta_extensions(GF_ISOFile *mov);\r
+\r
+#ifndef GPAC_READ_ONLY\r
+GF_MetaBox *gf_isom_apple_create_meta_extensions(GF_ISOFile *mov);\r
+#endif //GPAC_READ_ONLY\r
+\r
+/*OMA extensions*/\r
+GF_Box *ohdr_New();\r
+void ohdr_del(GF_Box *s);\r
+GF_Err ohdr_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ohdr_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ohdr_Size(GF_Box *s);\r
+GF_Err ohdr_dump(GF_Box *a, FILE * trace);\r
+GF_Box *grpi_New();\r
+void grpi_del(GF_Box *s);\r
+GF_Err grpi_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err grpi_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err grpi_Size(GF_Box *s);\r
+GF_Err grpi_dump(GF_Box *a, FILE * trace);\r
+GF_Box *mdri_New();\r
+void mdri_del(GF_Box *s);\r
+GF_Err mdri_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdri_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err mdri_Size(GF_Box *s);\r
+GF_Err mdri_dump(GF_Box *a, FILE * trace);\r
+GF_Box *odtt_New();\r
+void odtt_del(GF_Box *s);\r
+GF_Err odtt_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odtt_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odtt_Size(GF_Box *s);\r
+GF_Err odtt_dump(GF_Box *a, FILE * trace);\r
+GF_Box *odrb_New();\r
+void odrb_del(GF_Box *s);\r
+GF_Err odrb_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odrb_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odrb_Size(GF_Box *s);\r
+GF_Err odrb_dump(GF_Box *a, FILE * trace);\r
+GF_Box *odkm_New();\r
+void odkm_del(GF_Box *s);\r
+GF_Err odkm_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odkm_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err odkm_Size(GF_Box *s);\r
+GF_Err odkm_dump(GF_Box *a, FILE * trace);\r
+\r
+\r
+GF_Box *pasp_New();\r
+void pasp_del(GF_Box *s);\r
+GF_Err pasp_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pasp_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err pasp_Size(GF_Box *s);\r
+GF_Err pasp_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Box *metx_New(u32 type);\r
+void metx_del(GF_Box *s);\r
+GF_Err metx_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err metx_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err metx_Size(GF_Box *s);\r
+GF_Err metx_dump(GF_Box *a, FILE * trace);\r
+\r
+\r
+\r
+GF_Box *tsel_New();\r
+void tsel_del(GF_Box *s);\r
+GF_Err tsel_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tsel_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err tsel_Size(GF_Box *s);\r
+GF_Err tsel_dump(GF_Box *a, FILE * trace);\r
+\r
+\r
+GF_Box *dimC_New();\r
+void dimC_del(GF_Box *s);\r
+GF_Err dimC_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dimC_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dimC_Size(GF_Box *s);\r
+GF_Err dimC_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Box *dims_New();\r
+void dims_del(GF_Box *s);\r
+GF_Err dims_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dims_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dims_Size(GF_Box *s);\r
+GF_Err dims_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Box *diST_New();\r
+void diST_del(GF_Box *s);\r
+GF_Err diST_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err diST_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err diST_Size(GF_Box *s);\r
+GF_Err diST_dump(GF_Box *a, FILE * trace);\r
+\r
+\r
+GF_Box *ac3_New();\r
+void ac3_del(GF_Box *s);\r
+GF_Err ac3_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ac3_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err ac3_Size(GF_Box *s);\r
+GF_Err ac3_dump(GF_Box *a, FILE * trace);\r
+\r
+GF_Box *dac3_New();\r
+void dac3_del(GF_Box *s);\r
+GF_Err dac3_Read(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dac3_Write(GF_Box *s, GF_BitStream *bs);\r
+GF_Err dac3_Size(GF_Box *s);\r
+GF_Err dac3_dump(GF_Box *a, FILE * trace);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif //_GF_ISOMEDIA_DEV_H_\r
+\r