/* * GPAC - Multimedia Framework C SDK * * Copyright (c) Jean Le Feuvre 2000-2005 * All rights reserved * * This file is part of GPAC / ISO Media File Format sub-project * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ #include #include static GF_Err apple_tag_dump(GF_Box *a, FILE * trace); void NullBoxErr(FILE * trace) { fprintf(trace, "\n"); } void BadTopBoxErr(GF_Box *a, FILE * trace) { fprintf(trace, "\n", gf_4cc_to_str(a->type)); } static void DumpData(FILE *trace, char *data, u32 dataLength) { u32 i; fprintf(trace, "data:application/octet-string,"); for (i=0; isize > 0xFFFFFFFF) { fprintf(trace, "size); } else { fprintf(trace, "size); } if (a->type == GF_ISOM_BOX_TYPE_UUID) { u32 i; fprintf(trace, "UUID=\"{"); for (i=0; i<16; i++) { fprintf(trace, "%02X", (unsigned char) ((GF_UUIDBox*)a)->uuid[i]); if ((i<15) && (i%4)==3) fprintf(trace, "-"); } fprintf(trace, "}\"/>\n"); } else { fprintf(trace, "Type=\"%s\"/>\n", gf_4cc_to_str(a->type)); } return GF_OK; } GF_Err gf_box_dump(void *ptr, FILE * trace) { GF_Box *a = (GF_Box *) ptr; if (!a) { NullBoxErr(trace); return GF_OK; } switch (a->type) { case GF_ISOM_BOX_TYPE_HINT: case GF_ISOM_BOX_TYPE_DPND: case GF_ISOM_BOX_TYPE_MPOD: case GF_ISOM_BOX_TYPE_SYNC: case GF_ISOM_BOX_TYPE_IPIR: case GF_ISOM_BOX_TYPE_CHAP: return reftype_dump(a, trace); case GF_ISOM_BOX_TYPE_FREE: case GF_ISOM_BOX_TYPE_SKIP: return free_dump(a, trace); case GF_ISOM_BOX_TYPE_MDAT: return mdat_dump(a, trace); case GF_ISOM_BOX_TYPE_MOOV: return moov_dump(a, trace); case GF_ISOM_BOX_TYPE_MVHD: return mvhd_dump(a, trace); case GF_ISOM_BOX_TYPE_MDHD: return mdhd_dump(a, trace); case GF_ISOM_BOX_TYPE_VMHD: return vmhd_dump(a, trace); case GF_ISOM_BOX_TYPE_SMHD: return smhd_dump(a, trace); case GF_ISOM_BOX_TYPE_HMHD: return hmhd_dump(a, trace); //the same box is used for all MPEG4 systems streams case GF_ISOM_BOX_TYPE_ODHD: case GF_ISOM_BOX_TYPE_CRHD: case GF_ISOM_BOX_TYPE_SDHD: case GF_ISOM_BOX_TYPE_NMHD: return nmhd_dump(a, trace); case GF_ISOM_BOX_TYPE_STBL: return stbl_dump(a, trace); case GF_ISOM_BOX_TYPE_DINF: return dinf_dump(a, trace); case GF_ISOM_BOX_TYPE_URL: return url_dump(a, trace); case GF_ISOM_BOX_TYPE_URN: return urn_dump(a, trace); case GF_ISOM_BOX_TYPE_CPRT: return cprt_dump(a, trace); case GF_ISOM_BOX_TYPE_HDLR: return hdlr_dump(a, trace); case GF_ISOM_BOX_TYPE_IODS: return iods_dump(a, trace); case GF_ISOM_BOX_TYPE_TRAK: return trak_dump(a, trace); case GF_ISOM_BOX_TYPE_MP4S: return mp4s_dump(a, trace); case GF_ISOM_BOX_TYPE_MP4V: return mp4v_dump(a, trace); case GF_ISOM_BOX_TYPE_MP4A: return mp4a_dump(a, trace); case GF_ISOM_BOX_TYPE_GNRM: return gnrm_dump(a, trace); case GF_ISOM_BOX_TYPE_GNRV: return gnrv_dump(a, trace); case GF_ISOM_BOX_TYPE_GNRA: return gnra_dump(a, trace); case GF_ISOM_BOX_TYPE_EDTS: return edts_dump(a, trace); case GF_ISOM_BOX_TYPE_UDTA: return udta_dump(a, trace); case GF_ISOM_BOX_TYPE_DREF: return dref_dump(a, trace); case GF_ISOM_BOX_TYPE_STSD: return stsd_dump(a, trace); case GF_ISOM_BOX_TYPE_STTS: return stts_dump(a, trace); case GF_ISOM_BOX_TYPE_CTTS: return ctts_dump(a, trace); case GF_ISOM_BOX_TYPE_STSH: return stsh_dump(a, trace); case GF_ISOM_BOX_TYPE_ELST: return elst_dump(a, trace); case GF_ISOM_BOX_TYPE_STSC: return stsc_dump(a, trace); case GF_ISOM_BOX_TYPE_STZ2: case GF_ISOM_BOX_TYPE_STSZ: return stsz_dump(a, trace); case GF_ISOM_BOX_TYPE_STCO: return stco_dump(a, trace); case GF_ISOM_BOX_TYPE_STSS: return stss_dump(a, trace); case GF_ISOM_BOX_TYPE_STDP: return stdp_dump(a, trace); case GF_ISOM_BOX_TYPE_SDTP: return sdtp_dump(a, trace); case GF_ISOM_BOX_TYPE_CO64: return co64_dump(a, trace); case GF_ISOM_BOX_TYPE_ESDS: return esds_dump(a, trace); case GF_ISOM_BOX_TYPE_MINF: return minf_dump(a, trace); case GF_ISOM_BOX_TYPE_TKHD: return tkhd_dump(a, trace); case GF_ISOM_BOX_TYPE_TREF: return tref_dump(a, trace); case GF_ISOM_BOX_TYPE_MDIA: return mdia_dump(a, trace); case GF_ISOM_BOX_TYPE_CHPL: return chpl_dump(a, trace); case GF_ISOM_BOX_TYPE_PDIN: return dpin_dump(a, trace); case GF_ISOM_BOX_TYPE_RTP_STSD: return ghnt_dump(a, trace); case GF_ISOM_BOX_TYPE_RTPO: return rtpo_dump(a, trace); case GF_ISOM_BOX_TYPE_HNTI: return hnti_dump(a, trace); case GF_ISOM_BOX_TYPE_SDP: return sdp_dump(a, trace); case GF_ISOM_BOX_TYPE_HINF: return hinf_dump(a, trace); case GF_ISOM_BOX_TYPE_RELY: return rely_dump(a, trace); case GF_ISOM_BOX_TYPE_TIMS: return tims_dump(a, trace); case GF_ISOM_BOX_TYPE_TSRO: return tsro_dump(a, trace); case GF_ISOM_BOX_TYPE_SNRO: return snro_dump(a, trace); case GF_ISOM_BOX_TYPE_TRPY: return trpy_dump(a, trace); case GF_ISOM_BOX_TYPE_NUMP: return nump_dump(a, trace); case GF_ISOM_BOX_TYPE_TOTL: return totl_dump(a, trace); case GF_ISOM_BOX_TYPE_NPCK: return npck_dump(a, trace); case GF_ISOM_BOX_TYPE_TPYL: return tpyl_dump(a, trace); case GF_ISOM_BOX_TYPE_TPAY: return tpay_dump(a, trace); case GF_ISOM_BOX_TYPE_MAXR: return maxr_dump(a, trace); case GF_ISOM_BOX_TYPE_DMED: return dmed_dump(a, trace); case GF_ISOM_BOX_TYPE_DIMM: return dimm_dump(a, trace); case GF_ISOM_BOX_TYPE_DREP: return drep_dump(a, trace); case GF_ISOM_BOX_TYPE_TMIN: return tmin_dump(a, trace); case GF_ISOM_BOX_TYPE_TMAX: return tmax_dump(a, trace); case GF_ISOM_BOX_TYPE_PMAX: return pmax_dump(a, trace); case GF_ISOM_BOX_TYPE_DMAX: return dmax_dump(a, trace); case GF_ISOM_BOX_TYPE_PAYT: return payt_dump(a, trace); case GF_ISOM_BOX_TYPE_NAME: return name_dump(a, trace); case GF_ISOM_BOX_TYPE_FTYP: return ftyp_dump(a, trace); case GF_ISOM_BOX_TYPE_FADB: return padb_dump(a, trace); #ifndef GF_ISOM_NO_FRAGMENTS case GF_ISOM_BOX_TYPE_MVEX: return mvex_dump(a, trace); case GF_ISOM_BOX_TYPE_MEHD: return mehd_dump(a, trace); case GF_ISOM_BOX_TYPE_TREX: return trex_dump(a, trace); case GF_ISOM_BOX_TYPE_MOOF: return moof_dump(a, trace); case GF_ISOM_BOX_TYPE_MFHD: return mfhd_dump(a, trace); case GF_ISOM_BOX_TYPE_TRAF: return traf_dump(a, trace); case GF_ISOM_BOX_TYPE_TFHD: return tfhd_dump(a, trace); case GF_ISOM_BOX_TYPE_TRUN: return trun_dump(a, trace); #endif case GF_ISOM_BOX_TYPE_VOID: return void_dump(a, trace); case GF_ISOM_BOX_TYPE_STSF: return stsf_dump(a, trace); case GF_ISOM_SUBTYPE_3GP_AMR: case GF_ISOM_SUBTYPE_3GP_AMR_WB: case GF_ISOM_SUBTYPE_3GP_QCELP: case GF_ISOM_SUBTYPE_3GP_EVRC: case GF_ISOM_SUBTYPE_3GP_SMV: return gppa_dump(a, trace); case GF_ISOM_SUBTYPE_3GP_H263: return gppv_dump(a, trace); case GF_ISOM_BOX_TYPE_DAMR: case GF_ISOM_BOX_TYPE_DEVC: case GF_ISOM_BOX_TYPE_DQCP: case GF_ISOM_BOX_TYPE_DSMV: case GF_ISOM_BOX_TYPE_D263: return gppc_dump(a, trace); case GF_ISOM_BOX_TYPE_AVCC: return avcc_dump(a, trace); case GF_ISOM_BOX_TYPE_BTRT: return btrt_dump(a, trace); case GF_ISOM_BOX_TYPE_M4DS: return m4ds_dump(a, trace); case GF_ISOM_BOX_TYPE_AVC1: return mp4v_dump(a, trace); case GF_ISOM_BOX_TYPE_FTAB: return ftab_dump(a, trace); case GF_ISOM_BOX_TYPE_TX3G: return tx3g_dump(a, trace); case GF_ISOM_BOX_TYPE_STYL: return styl_dump(a, trace); case GF_ISOM_BOX_TYPE_HLIT: return hlit_dump(a, trace); case GF_ISOM_BOX_TYPE_HCLR: return hclr_dump(a, trace); case GF_ISOM_BOX_TYPE_KROK: return krok_dump(a, trace); case GF_ISOM_BOX_TYPE_DLAY: return dlay_dump(a, trace); case GF_ISOM_BOX_TYPE_HREF: return href_dump(a, trace); case GF_ISOM_BOX_TYPE_TBOX: return tbox_dump(a, trace); case GF_ISOM_BOX_TYPE_BLNK: return blnk_dump(a, trace); case GF_ISOM_BOX_TYPE_TWRP: return twrp_dump(a, trace); /* ISMA 1.0 Encryption and Authentication V 1.0 */ case GF_ISOM_BOX_TYPE_IKMS: return iKMS_dump(a, trace); case GF_ISOM_BOX_TYPE_ISFM: return iSFM_dump(a, trace); /*MPEG-21 extensions*/ case GF_ISOM_BOX_TYPE_META: return meta_dump(a, trace); case GF_ISOM_BOX_TYPE_XML: return xml_dump(a, trace); case GF_ISOM_BOX_TYPE_BXML: return bxml_dump(a, trace); case GF_ISOM_BOX_TYPE_ILOC: return iloc_dump(a, trace); case GF_ISOM_BOX_TYPE_PITM: return pitm_dump(a, trace); case GF_ISOM_BOX_TYPE_IPRO: return ipro_dump(a, trace); case GF_ISOM_BOX_TYPE_INFE: return infe_dump(a, trace); case GF_ISOM_BOX_TYPE_IINF: return iinf_dump(a, trace); case GF_ISOM_BOX_TYPE_IMIF: return imif_dump(a, trace); case GF_ISOM_BOX_TYPE_IPMC: return ipmc_dump(a, trace); case GF_ISOM_BOX_TYPE_SINF: return sinf_dump(a, trace); case GF_ISOM_BOX_TYPE_FRMA: return frma_dump(a, trace); case GF_ISOM_BOX_TYPE_SCHM: return schm_dump(a, trace); case GF_ISOM_BOX_TYPE_SCHI: return schi_dump(a, trace); case GF_ISOM_BOX_TYPE_ENCA: return mp4a_dump(a, trace); case GF_ISOM_BOX_TYPE_ENCV: return mp4v_dump(a, trace); case GF_ISOM_BOX_TYPE_ENCS: return mp4s_dump(a, trace); case GF_ISOM_BOX_TYPE_0xA9NAM: case GF_ISOM_BOX_TYPE_0xA9CMT: case GF_ISOM_BOX_TYPE_0xA9DAY: case GF_ISOM_BOX_TYPE_0xA9ART: case GF_ISOM_BOX_TYPE_0xA9TRK: case GF_ISOM_BOX_TYPE_0xA9ALB: case GF_ISOM_BOX_TYPE_0xA9COM: case GF_ISOM_BOX_TYPE_0xA9WRT: case GF_ISOM_BOX_TYPE_0xA9TOO: case GF_ISOM_BOX_TYPE_0xA9CPY: case GF_ISOM_BOX_TYPE_0xA9DES: case GF_ISOM_BOX_TYPE_0xA9GEN: case GF_ISOM_BOX_TYPE_0xA9GRP: case GF_ISOM_BOX_TYPE_GNRE: case GF_ISOM_BOX_TYPE_DISK: case GF_ISOM_BOX_TYPE_TRKN: case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_COVR: case GF_ISOM_BOX_TYPE_iTunesSpecificInfo: return apple_tag_dump(a, trace); /*Apple extensions*/ case GF_ISOM_BOX_TYPE_ILST: return ilst_dump(a, trace); case GF_ISOM_BOX_TYPE_OHDR: return ohdr_dump(a, trace); case GF_ISOM_BOX_TYPE_GRPI: return grpi_dump(a, trace); case GF_ISOM_BOX_TYPE_MDRI: return mdri_dump(a, trace); case GF_ISOM_BOX_TYPE_ODTT: return odtt_dump(a, trace); case GF_ISOM_BOX_TYPE_ODRB: return odrb_dump(a, trace); case GF_ISOM_BOX_TYPE_ODKM: return odkm_dump(a, trace); case GF_ISOM_BOX_TYPE_ODAF: return iSFM_dump(a, trace); default: return defa_dump(a, trace); } } GF_Err gf_box_array_dump(GF_List *list, FILE * trace) { u32 i; GF_Box *a; if (!list) return GF_OK; i=0; while ((a = (GF_Box *)gf_list_enum(list, &i))) { gf_box_dump(a, trace); } return GF_OK; } GF_EXPORT GF_Err gf_isom_dump(GF_ISOFile *mov, FILE * trace) { GF_Err gf_box_dump(void *ptr, FILE * trace); void BadTopBoxErr(GF_Box *a, FILE * trace); u32 i; GF_Box *box; if (!mov || !trace) return GF_BAD_PARAM; fprintf(trace, "\n"); fprintf(trace, "\n"); fprintf(trace, "\n", mov->fileName); i=0; while ((box = (GF_Box *)gf_list_enum(mov->TopBoxes, &i))) { switch (box->type) { case GF_ISOM_BOX_TYPE_FTYP: case GF_ISOM_BOX_TYPE_MOOV: case GF_ISOM_BOX_TYPE_MDAT: case GF_ISOM_BOX_TYPE_FREE: case GF_ISOM_BOX_TYPE_META: case GF_ISOM_BOX_TYPE_SKIP: #ifndef GF_ISOM_NO_FRAGMENTS case GF_ISOM_BOX_TYPE_MOOF: #endif break; default: BadTopBoxErr(box, trace); break; } gf_box_dump(box, trace); } fprintf(trace, "\n"); return GF_OK; } GF_Err gf_full_box_dump(GF_Box *a, FILE * trace) { GF_FullBox *p; p = (GF_FullBox *)a; fprintf(trace, "\n", p->version, p->flags); return GF_OK; } GF_Err reftype_dump(GF_Box *a, FILE * trace) { char *s; u32 i; GF_TrackReferenceTypeBox *p; p = (GF_TrackReferenceTypeBox *)a; switch (a->type) { case GF_ISOM_BOX_TYPE_HINT: s = "Hint"; break; case GF_ISOM_BOX_TYPE_DPND: s = "Stream"; break; case GF_ISOM_BOX_TYPE_MPOD: s = "OD"; break; case GF_ISOM_BOX_TYPE_SYNC: s = "Sync"; break; case GF_ISOM_BOX_TYPE_CHAP: s = "Chapter"; break; default: s = "Unknown"; break; } fprintf(trace, "<%sTrackReferenceBox Tracks=\"", s); for (i=0; itrackIDCount; i++) fprintf(trace, " %d", p->trackIDs[i]); fprintf(trace, "\">\n"); DumpBox(a, trace); fprintf(trace, "\n", s); return GF_OK; } GF_Err free_dump(GF_Box *a, FILE * trace) { GF_FreeSpaceBox *p; p = (GF_FreeSpaceBox *)a; fprintf(trace, "\n", p->dataSize); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mdat_dump(GF_Box *a, FILE * trace) { GF_MediaDataBox *p; p = (GF_MediaDataBox *)a; fprintf(trace, "\n", LLD_CAST p->dataSize); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err moov_dump(GF_Box *a, FILE * trace) { GF_MovieBox *p; p = (GF_MovieBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); if (p->iods) gf_box_dump(p->iods, trace); if (p->meta) gf_box_dump(p->meta, trace); gf_box_dump(p->mvhd, trace); #ifndef GF_ISOM_NO_FRAGMENTS if (p->mvex) gf_box_dump(p->mvex, trace); #endif gf_box_array_dump(p->trackList, trace); if (p->udta) gf_box_dump(p->udta, trace); gf_box_array_dump(p->boxes, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mvhd_dump(GF_Box *a, FILE * trace) { GF_MovieHeaderBox *p; p = (GF_MovieHeaderBox *) a; fprintf(trace, "creationTime); fprintf(trace, "ModificationTime=\""LLD"\" ", LLD_CAST p->modificationTime); fprintf(trace, "TimeScale=\"%d\" ", p->timeScale); fprintf(trace, "Duration=\""LLD"\" ", LLD_CAST p->duration); fprintf(trace, "NextTrackID=\"%d\">\n", p->nextTrackID); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, ""); return GF_OK; } GF_Err mdhd_dump(GF_Box *a, FILE * trace) { GF_MediaHeaderBox *p; p = (GF_MediaHeaderBox *)a; fprintf(trace, "creationTime); fprintf(trace, "ModificationTime=\""LLD"\" ", LLD_CAST p->modificationTime); fprintf(trace, "TimeScale=\"%d\" ", p->timeScale); fprintf(trace, "Duration=\""LLD"\" ", LLD_CAST p->duration); fprintf(trace, "LanguageCode=\"%c%c%c\">\n", p->packedLanguage[0], p->packedLanguage[1], p->packedLanguage[2]); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err vmhd_dump(GF_Box *a, FILE * trace) { fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err smhd_dump(GF_Box *a, FILE * trace) { fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err hmhd_dump(GF_Box *a, FILE * trace) { GF_HintMediaHeaderBox *p; p = (GF_HintMediaHeaderBox *)a; fprintf(trace, "maxPDUSize); fprintf(trace, "AveragePDUSize=\"%d\" ", p->avgPDUSize); fprintf(trace, "MaxBitRate=\"%d\" ", p->maxBitrate); fprintf(trace, "AverageBitRate=\"%d\">\n", p->avgBitrate); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err nmhd_dump(GF_Box *a, FILE * trace) { fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err stbl_dump(GF_Box *a, FILE * trace) { GF_SampleTableBox *p; p = (GF_SampleTableBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_dump(p->SampleDescription, trace); gf_box_dump(p->TimeToSample, trace); if (p->CompositionOffset) gf_box_dump(p->CompositionOffset, trace); if (p->SyncSample) gf_box_dump(p->SyncSample, trace); if (p->ShadowSync) gf_box_dump(p->ShadowSync, trace); gf_box_dump(p->SampleToChunk, trace); gf_box_dump(p->SampleSize, trace); gf_box_dump(p->ChunkOffset, trace); if (p->DegradationPriority) gf_box_dump(p->DegradationPriority, trace); if (p->SampleDep) gf_box_dump(p->SampleDep, trace); if (p->PaddingBits) gf_box_dump(p->PaddingBits, trace); if (p->Fragments) gf_box_dump(p->Fragments, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err dinf_dump(GF_Box *a, FILE * trace) { GF_DataInformationBox *p; p = (GF_DataInformationBox *)a; fprintf(trace, ""); DumpBox(a, trace); gf_box_dump(p->dref, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err url_dump(GF_Box *a, FILE * trace) { GF_DataEntryURLBox *p; p = (GF_DataEntryURLBox *)a; fprintf(trace, "location) { fprintf(trace, " URL=\"%s\">\n", p->location); } else { fprintf(trace, ">\n"); if (! (p->flags & 1) ) { fprintf(trace, "\n"); } else { fprintf(trace, "\n"); } } DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err urn_dump(GF_Box *a, FILE * trace) { GF_DataEntryURNBox *p; p = (GF_DataEntryURNBox *)a; fprintf(trace, "nameURN) fprintf(trace, " URN=\"%s\"", p->nameURN); if (p->location) fprintf(trace, " URL=\"%s\"", p->location); fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err cprt_dump(GF_Box *a, FILE * trace) { GF_CopyrightBox *p; p = (GF_CopyrightBox *)a; fprintf(trace, "\n", p->packedLanguageCode, p->notice); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } static char *format_duration(u64 dur, u32 timescale, char *szDur) { u32 h, m, s, ms; dur = (u32) (( ((Double) (s64) dur)/timescale)*1000); h = (u32) (dur / 3600000); dur -= h*3600000; m = (u32) (dur / 60000); dur -= m*60000; s = (u32) (dur/1000); dur -= s*1000; ms = (u32) (dur); sprintf(szDur, "%02d:%02d:%02d.%03d", h, m, s, ms); return szDur; } GF_Err chpl_dump(GF_Box *a, FILE * trace) { u32 i, count; char szDur[20]; GF_ChapterListBox *p = (GF_ChapterListBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); count = gf_list_count(p->list); for (i=0; ilist, i); fprintf(trace, "\n", ce->name, format_duration(ce->start_time, 1000*10000, szDur)); } fprintf(trace, "\n"); return GF_OK; } GF_Err dpin_dump(GF_Box *a, FILE * trace) { u32 i; GF_ProgressiveDownloadBox *p = (GF_ProgressiveDownloadBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); for (i=0; icount; i++) { fprintf(trace, "\n", p->rates[i], p->times[i]); } fprintf(trace, "\n"); return GF_OK; } GF_Err hdlr_dump(GF_Box *a, FILE * trace) { GF_HandlerBox *p = (GF_HandlerBox *)a; if (p->nameUTF8 && (u32) p->nameUTF8[0] == strlen(p->nameUTF8+1)) { fprintf(trace, "handlerType), p->nameUTF8+1); } else { fprintf(trace, "handlerType), p->nameUTF8); } fprintf(trace, "reserved1=\"%d\" reserved2=\"", p->reserved1); DumpData(trace, p->reserved2, 12); fprintf(trace, "\""); fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err iods_dump(GF_Box *a, FILE * trace) { GF_ObjectDescriptorBox *p; p = (GF_ObjectDescriptorBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if (p->descriptor) { gf_odf_dump_desc(p->descriptor, trace, 1, 1); } else { fprintf(trace, "\n"); } fprintf(trace, "\n"); return GF_OK; } GF_Err trak_dump(GF_Box *a, FILE * trace) { GF_TrackBox *p; p = (GF_TrackBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); if (p->Header) { gf_box_dump(p->Header, trace); } else { fprintf(trace, "\n"); } if (p->References) gf_box_dump(p->References, trace); if (p->meta) gf_box_dump(p->meta, trace); if (p->editBox) gf_box_dump(p->editBox, trace); if (p->Media) gf_box_dump(p->Media, trace); if (p->udta) gf_box_dump(p->udta, trace); gf_box_array_dump(p->boxes, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mp4s_dump(GF_Box *a, FILE * trace) { GF_MPEGSampleEntryBox *p; p = (GF_MPEGSampleEntryBox *)a; fprintf(trace, "\n", p->dataReferenceIndex); DumpBox(a, trace); if (p->esd) { gf_box_dump(p->esd, trace); } else { fprintf(trace, "\n"); } if (a->type == GF_ISOM_BOX_TYPE_ENCS) { gf_box_dump(p->protection_info, trace); } fprintf(trace, "\n"); return GF_OK; } void base_visual_entry_dump(GF_VisualSampleEntryBox *p, FILE * trace) { fprintf(trace, " DataReferenceIndex=\"%d\" Width=\"%d\" Height=\"%d\"", p->dataReferenceIndex, p->Width, p->Height); //dump reserved info fprintf(trace, " XDPI=\"%d\" YDPI=\"%d\" BitDepth=\"%d\"", p->horiz_res, p->vert_res, p->bit_depth); if (strlen((const char*)p->compressor_name) ) fprintf(trace, " CompressorName=\"%s\"\n", p->compressor_name); } GF_Err mp4v_dump(GF_Box *a, FILE * trace) { GF_MPEGVisualSampleEntryBox *p = (GF_MPEGVisualSampleEntryBox *)a; const char *name = p->avc_config ? "AVCSampleEntryBox" : "MPEGVisualSampleDescriptionBox"; fprintf(trace, "<%s", name); base_visual_entry_dump((GF_VisualSampleEntryBox *)p, trace); fprintf(trace, ">\n"); if (p->esd) { gf_box_dump(p->esd, trace); } else if (p->avc_config) { if (p->avc_config) gf_box_dump(p->avc_config, trace); if (p->ipod_ext) gf_box_dump(p->ipod_ext, trace); if (p->descr) gf_box_dump(p->descr, trace); if (p->bitrate) gf_box_dump(p->bitrate, trace); } else { fprintf(trace, "\n"); } if (a->type == GF_ISOM_BOX_TYPE_ENCV) { gf_box_dump(p->protection_info, trace); } DumpBox(a, trace); fprintf(trace, "\n", name); return GF_OK; } void base_audio_entry_dump(GF_AudioSampleEntryBox *p, FILE * trace) { fprintf(trace, " DataReferenceIndex=\"%d\" SampleRate=\"%d\"", p->dataReferenceIndex, p->samplerate_hi); fprintf(trace, " Channels=\"%d\" BitsPerSample=\"%d\"", p->channel_count, p->bitspersample); } GF_Err mp4a_dump(GF_Box *a, FILE * trace) { GF_MPEGAudioSampleEntryBox *p; p = (GF_MPEGAudioSampleEntryBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); if (p->esd) { gf_box_dump(p->esd, trace); } else { fprintf(trace, "\n"); } if (a->type == GF_ISOM_BOX_TYPE_ENCA) { gf_box_dump(p->protection_info, trace); } fprintf(trace, "\n"); return GF_OK; } GF_Err gnrm_dump(GF_Box *a, FILE * trace) { GF_GenericSampleEntryBox *p = (GF_GenericSampleEntryBox *)a; fprintf(trace, "\n", p->dataReferenceIndex, p->data_size); a->type = p->EntryType; DumpBox(a, trace); a->type = GF_ISOM_BOX_TYPE_GNRM; fprintf(trace, "\n"); return GF_OK; } GF_Err gnrv_dump(GF_Box *a, FILE * trace) { GF_GenericVisualSampleEntryBox *p = (GF_GenericVisualSampleEntryBox *)a; fprintf(trace, "\n", p->dataReferenceIndex, p->version, p->revision, p->vendor, p->temporal_quality, p->spacial_quality, p->Width, p->Height, p->horiz_res, p->vert_res, p->compressor_name, p->bit_depth); a->type = p->EntryType; DumpBox(a, trace); a->type = GF_ISOM_BOX_TYPE_GNRV; fprintf(trace, "\n"); return GF_OK; } GF_Err gnra_dump(GF_Box *a, FILE * trace) { GF_GenericAudioSampleEntryBox *p = (GF_GenericAudioSampleEntryBox *)a; fprintf(trace, "\n", p->dataReferenceIndex, p->version, p->revision, p->vendor, p->channel_count, p->bitspersample, p->samplerate_hi); a->type = p->EntryType; DumpBox(a, trace); a->type = GF_ISOM_BOX_TYPE_GNRA; fprintf(trace, "\n"); return GF_OK; } GF_Err edts_dump(GF_Box *a, FILE * trace) { GF_EditBox *p; p = (GF_EditBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_dump(p->editList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err udta_dump(GF_Box *a, FILE * trace) { GF_UserDataBox *p; GF_UserDataMap *map; u32 i; p = (GF_UserDataBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); i=0; while ((map = (GF_UserDataMap *)gf_list_enum(p->recordList, &i))) { fprintf(trace, "\n", gf_4cc_to_str(map->boxType)); gf_box_array_dump(map->boxList, trace); fprintf(trace, "\n"); } fprintf(trace, "\n"); return GF_OK; } GF_Err dref_dump(GF_Box *a, FILE * trace) { GF_DataReferenceBox *p; p = (GF_DataReferenceBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); gf_box_array_dump(p->boxList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err stsd_dump(GF_Box *a, FILE * trace) { GF_SampleDescriptionBox *p; p = (GF_SampleDescriptionBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); gf_box_array_dump(p->boxList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err stts_dump(GF_Box *a, FILE * trace) { GF_TimeToSampleBox *p; u32 i; GF_SttsEntry *t; p = (GF_TimeToSampleBox *)a; fprintf(trace, "\n", gf_list_count(p->entryList)); DumpBox(a, trace); gf_full_box_dump(a, trace); i=0; while ((t = (GF_SttsEntry *)gf_list_enum(p->entryList, &i))) { fprintf(trace, "\n", t->sampleDelta, t->sampleCount); } fprintf(trace, "\n"); return GF_OK; } GF_Err ctts_dump(GF_Box *a, FILE * trace) { GF_CompositionOffsetBox *p; u32 i; GF_DttsEntry *t; p = (GF_CompositionOffsetBox *)a; fprintf(trace, "\n", gf_list_count(p->entryList)); DumpBox(a, trace); gf_full_box_dump(a, trace); i=0; while ((t = (GF_DttsEntry *)gf_list_enum(p->entryList, &i))) { fprintf(trace, "\n", t->decodingOffset, t->sampleCount); } fprintf(trace, "\n"); return GF_OK; } GF_Err stsh_dump(GF_Box *a, FILE * trace) { GF_ShadowSyncBox *p; u32 i; GF_StshEntry *t; p = (GF_ShadowSyncBox *)a; fprintf(trace, "\n", gf_list_count(p->entries)); DumpBox(a, trace); gf_full_box_dump(a, trace); i=0; while ((t = (GF_StshEntry *)gf_list_enum(p->entries, &i))) { fprintf(trace, "\n", t->shadowedSampleNumber, t->syncSampleNumber); } fprintf(trace, "\n"); return GF_OK; } GF_Err elst_dump(GF_Box *a, FILE * trace) { GF_EditListBox *p; u32 i; GF_EdtsEntry *t; p = (GF_EditListBox *)a; fprintf(trace, "\n", gf_list_count(p->entryList)); DumpBox(a, trace); gf_full_box_dump(a, trace); i=0; while ((t = (GF_EdtsEntry *)gf_list_enum(p->entryList, &i))) { fprintf(trace, "\n", LLD_CAST t->segmentDuration, LLD_CAST t->mediaTime, t->mediaRate); } fprintf(trace, "\n"); return GF_OK; } GF_Err stsc_dump(GF_Box *a, FILE * trace) { GF_SampleToChunkBox *p; u32 i; GF_StscEntry *t; p = (GF_SampleToChunkBox *)a; fprintf(trace, "\n", gf_list_count(p->entryList)); DumpBox(a, trace); gf_full_box_dump(a, trace); i=0; while ((t = (GF_StscEntry *)gf_list_enum(p->entryList, &i))) { fprintf(trace, "\n", t->firstChunk, t->samplesPerChunk, t->sampleDescriptionIndex); } fprintf(trace, "\n"); return GF_OK; } GF_Err stsz_dump(GF_Box *a, FILE * trace) { GF_SampleSizeBox *p; u32 i; p = (GF_SampleSizeBox *)a; fprintf(trace, "<%sBox SampleCount=\"%d\"", (a->type == GF_ISOM_BOX_TYPE_STSZ) ? "SampleSize" : "CompactSampleSize", p->sampleCount); if (a->type == GF_ISOM_BOX_TYPE_STSZ) { if (p->sampleSize) { fprintf(trace, " ConstantSampleSize=\"%d\"", p->sampleSize); } } else { fprintf(trace, " SampleSizeBits=\"%d\"", p->sampleSize); } fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if ((a->type != GF_ISOM_BOX_TYPE_STSZ) || !p->sampleSize) { if (!p->sizes) { fprintf(trace, "\n"); } else { for (i=0; isampleCount; i++) { fprintf(trace, "\n", p->sizes[i]); } } } fprintf(trace, "\n", (a->type == GF_ISOM_BOX_TYPE_STSZ) ? "SampleSize" : "CompactSampleSize"); return GF_OK; } GF_Err stco_dump(GF_Box *a, FILE * trace) { GF_ChunkOffsetBox *p; u32 i; p = (GF_ChunkOffsetBox *)a; fprintf(trace, "\n", p->entryCount); DumpBox(a, trace); gf_full_box_dump(a, trace); if (!p->offsets) { fprintf(trace, "\n"); } else { for (i=0; ientryCount; i++) { fprintf(trace, "\n", p->offsets[i]); } } fprintf(trace, "\n"); return GF_OK; } GF_Err stss_dump(GF_Box *a, FILE * trace) { GF_SyncSampleBox *p; u32 i; p = (GF_SyncSampleBox *)a; fprintf(trace, "\n", p->entryCount); DumpBox(a, trace); gf_full_box_dump(a, trace); if (!p->sampleNumbers) { fprintf(trace, "\n"); } else { for (i=0; ientryCount; i++) { fprintf(trace, "\n", p->sampleNumbers[i]); } } fprintf(trace, "\n"); return GF_OK; } GF_Err stdp_dump(GF_Box *a, FILE * trace) { GF_DegradationPriorityBox *p; u32 i; p = (GF_DegradationPriorityBox *)a; fprintf(trace, "\n", p->entryCount); DumpBox(a, trace); gf_full_box_dump(a, trace); if (!p->priorities) { fprintf(trace, "\n"); } else { for (i=0; ientryCount; i++) { fprintf(trace, "\n", p->priorities[i]); } } fprintf(trace, "\n"); return GF_OK; } GF_Err sdtp_dump(GF_Box *a, FILE * trace) { GF_SampleDependencyTypeBox *p; u32 i; p = (GF_SampleDependencyTypeBox*)a; fprintf(trace, "\n", p->sampleCount); DumpBox(a, trace); gf_full_box_dump(a, trace); if (!p->sample_info) { fprintf(trace, "\n"); } else { for (i=0; isampleCount; i++) { u8 flag = p->sample_info[i]; fprintf(trace, "> 4) & 3) { case 0: fprintf(trace, "dependsOnOther=\"unknown\" "); break; case 1: fprintf(trace, "dependsOnOther=\"yes\" "); break; case 2: fprintf(trace, "dependsOnOther=\"no\" "); break; case 3: fprintf(trace, "dependsOnOther=\"!! RESERVED !!\" "); break; } switch ( (flag >> 2) & 3) { case 0: fprintf(trace, "dependedOn=\"unknown\" "); break; case 1: fprintf(trace, "dependedOn=\"yes\" "); break; case 2: fprintf(trace, "dependedOn=\"no\" "); break; case 3: fprintf(trace, "dependedOn=\"!! RESERVED !!\" "); break; } switch ( flag & 3) { case 0: fprintf(trace, "hasRedundancy=\"unknown\" "); break; case 1: fprintf(trace, "hasRedundancy=\"yes\" "); break; case 2: fprintf(trace, "hasRedundancy=\"no\" "); break; case 3: fprintf(trace, "hasRedundancy=\"!! RESERVED !!\" "); break; } fprintf(trace, " />\n"); } } fprintf(trace, "\n"); return GF_OK; } GF_Err co64_dump(GF_Box *a, FILE * trace) { GF_ChunkLargeOffsetBox *p; u32 i; p = (GF_ChunkLargeOffsetBox *)a; fprintf(trace, "\n", p->entryCount); DumpBox(a, trace); gf_full_box_dump(a, trace); if (!p->offsets) { fprintf(trace, "\n"); } else { for (i=0; ientryCount; i++) fprintf(trace, "\n", LLD_CAST p->offsets[i]); } fprintf(trace, "\n"); return GF_OK; } GF_Err esds_dump(GF_Box *a, FILE * trace) { GF_ESDBox *p; p = (GF_ESDBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if (p->desc) { gf_odf_dump_desc(p->desc, trace, 1, 1); } else { fprintf(trace, "\n"); } fprintf(trace, "\n"); return GF_OK; } GF_Err minf_dump(GF_Box *a, FILE * trace) { GF_MediaInformationBox *p; p = (GF_MediaInformationBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_dump(p->InfoHeader, trace); gf_box_dump(p->dataInformation, trace); gf_box_dump(p->sampleTable, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tkhd_dump(GF_Box *a, FILE * trace) { GF_TrackHeaderBox *p; p = (GF_TrackHeaderBox *)a; fprintf(trace, "creationTime, LLD_CAST p->modificationTime, p->trackID, LLD_CAST p->duration); if (p->volume) { fprintf(trace, " Volume=\"%.2f\"", (Float)p->volume / 256); } else if (p->width || p->height) { fprintf(trace, " Width=\"%.2f\" Height=\"%.2f\"", (Float)p->width / 65536, (Float)p->height / 65536); if (p->layer) fprintf(trace, " Layer=\"%d\"", p->layer); if (p->alternate_group) fprintf(trace, " AlternateGroup=\"%d\"", p->alternate_group); } fprintf(trace, ">\n"); if (p->width || p->height) { fprintf(trace, "", p->matrix[0], p->matrix[1], p->matrix[2], p->matrix[3], p->matrix[4], p->matrix[5], p->matrix[6], p->matrix[7], p->matrix[8]); } DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tref_dump(GF_Box *a, FILE * trace) { GF_TrackReferenceBox *p; p = (GF_TrackReferenceBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_array_dump(p->boxList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mdia_dump(GF_Box *a, FILE * trace) { GF_MediaBox *p; p = (GF_MediaBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_dump(p->mediaHeader, trace); gf_box_dump(p->handler, trace); gf_box_dump(p->information, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err defa_dump(GF_Box *a, FILE * trace) { fprintf(trace, "\n"); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err void_dump(GF_Box *a, FILE * trace) { fprintf(trace, "\n"); return GF_OK; } GF_Err ftyp_dump(GF_Box *a, FILE * trace) { GF_FileTypeBox *p; u32 i; p = (GF_FileTypeBox *)a; fprintf(trace, "\n", gf_4cc_to_str(p->majorBrand), p->minorVersion); DumpBox(a, trace); for (i=0; ialtCount; i++) { fprintf(trace, "\n", gf_4cc_to_str(p->altBrand[i])); } fprintf(trace, "\n"); return GF_OK; } GF_Err padb_dump(GF_Box *a, FILE * trace) { GF_PaddingBitsBox *p; u32 i; p = (GF_PaddingBitsBox *)a; fprintf(trace, "\n", p->SampleCount); DumpBox(a, trace); for (i=0; iSampleCount; i+=1) { fprintf(trace, "\n", p->padbits[i]); } fprintf(trace, "\n"); return GF_OK; } GF_Err stsf_dump(GF_Box *a, FILE * trace) { GF_SampleFragmentBox *p; GF_StsfEntry *ent; u32 i, j, count; p = (GF_SampleFragmentBox *)a; count = gf_list_count(p->entryList); fprintf(trace, "\n", count); DumpBox(a, trace); for (i=0; ientryList, i); fprintf(trace, "\n", ent->SampleNumber, ent->fragmentCount); for (j=0;jfragmentCount;j++) fprintf(trace, "\n", ent->fragmentSizes[j]); fprintf(trace, "\n"); } fprintf(trace, "\n"); return GF_OK; } GF_Err gppa_dump(GF_Box *a, FILE * trace) { char *szName; GF_3GPPAudioSampleEntryBox *p = (GF_3GPPAudioSampleEntryBox *)a; switch (p->type) { case GF_ISOM_SUBTYPE_3GP_AMR: szName = "AMRSampleDescription"; break; case GF_ISOM_SUBTYPE_3GP_AMR_WB: szName = "AMR_WB_SampleDescription"; break; case GF_ISOM_SUBTYPE_3GP_EVRC: szName = "EVRCSampleDescription"; break; case GF_ISOM_SUBTYPE_3GP_QCELP: szName = "QCELPSampleDescription"; break; case GF_ISOM_SUBTYPE_3GP_SMV: szName = "SMVSampleDescription"; break; default: szName = "3GPAudioSampleDescription"; break; } fprintf(trace, "<%sBox", szName); base_audio_entry_dump((GF_AudioSampleEntryBox *)p, trace); fprintf(trace, ">\n"); DumpBox(a, trace); if (p->info) { gf_box_dump(p->info, trace); } else { fprintf(trace, "\n"); } fprintf(trace, "\n", szName); return GF_OK; } GF_Err gppv_dump(GF_Box *a, FILE * trace) { char *szName; GF_3GPPVisualSampleEntryBox *p = (GF_3GPPVisualSampleEntryBox *)a; switch (p->type) { case GF_ISOM_SUBTYPE_3GP_H263: szName = "H263SampleDescription"; break; default: szName = "3GPVisualSampleDescription"; break; } fprintf(trace, "<%sBox", szName); base_visual_entry_dump((GF_VisualSampleEntryBox *)p, trace); fprintf(trace, ">\n"); DumpBox(a, trace); if (p->info) { gf_box_dump(p->info, trace); } else { fprintf(trace, "\n"); } fprintf(trace, "\n", szName); return GF_OK; } GF_Err gppc_dump(GF_Box *a, FILE * trace) { GF_3GPPConfigBox *p = (GF_3GPPConfigBox *)a; const char *name = gf_4cc_to_str(p->cfg.vendor); switch (p->cfg.type) { case GF_ISOM_SUBTYPE_3GP_AMR: case GF_ISOM_SUBTYPE_3GP_AMR_WB: fprintf(trace, "cfg.decoder_version); fprintf(trace, " FramesPerSample=\"%d\" SupportedModes=\"%x\" ModeRotating=\"%d\"", p->cfg.frames_per_sample, p->cfg.AMR_mode_set, p->cfg.AMR_mode_change_period); fprintf(trace, ">\n"); DumpBox(a, trace); fprintf(trace, "\n"); break; case GF_ISOM_SUBTYPE_3GP_EVRC: fprintf(trace, "\n", name, p->cfg.decoder_version, p->cfg.frames_per_sample); DumpBox(a, trace); fprintf(trace, "\n"); break; case GF_ISOM_SUBTYPE_3GP_QCELP: fprintf(trace, "\n", name, p->cfg.decoder_version, p->cfg.frames_per_sample); DumpBox(a, trace); fprintf(trace, "\n"); break; case GF_ISOM_SUBTYPE_3GP_SMV: fprintf(trace, "\n", name, p->cfg.decoder_version, p->cfg.frames_per_sample); DumpBox(a, trace); fprintf(trace, "\n"); break; case GF_ISOM_SUBTYPE_3GP_H263: fprintf(trace, "cfg.decoder_version); fprintf(trace, " Profile=\"%d\" Level=\"%d\"", p->cfg.H263_profile, p->cfg.H263_level); fprintf(trace, ">\n"); DumpBox(a, trace); fprintf(trace, "\n"); break; default: break; } return GF_OK; } GF_Err avcc_dump(GF_Box *a, FILE * trace) { u32 i, count; GF_AVCConfigurationBox *p = (GF_AVCConfigurationBox *) a; fprintf(trace, "\n"); fprintf(trace, "\n", p->config->configurationVersion, p->config->AVCProfileIndication, p->config->profile_compatibility, p->config->AVCLevelIndication, p->config->nal_unit_size); count = gf_list_count(p->config->sequenceParameterSets); for (i=0; iconfig->sequenceParameterSets, i); fprintf(trace, "size); DumpData(trace, c->data, c->size); fprintf(trace, "\"/>\n"); } count = gf_list_count(p->config->pictureParameterSets); for (i=0; iconfig->pictureParameterSets, i); fprintf(trace, "size); DumpData(trace, c->data, c->size); fprintf(trace, "\"/>\n"); } fprintf(trace, "\n"); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err m4ds_dump(GF_Box *a, FILE * trace) { u32 i; GF_Descriptor *desc; GF_MPEG4ExtensionDescriptorsBox *p = (GF_MPEG4ExtensionDescriptorsBox *) a; fprintf(trace, "\n"); i=0; while ((desc = (GF_Descriptor *)gf_list_enum(p->descriptors, &i))) { gf_odf_dump_desc(desc, trace, 1, 1); } DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err btrt_dump(GF_Box *a, FILE * trace) { GF_MPEG4BitRateBox *p = (GF_MPEG4BitRateBox*)a; fprintf(trace, "\n", p->bufferSizeDB, p->avgBitrate, p->maxBitrate); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err ftab_dump(GF_Box *a, FILE * trace) { u32 i; GF_FontTableBox *p = (GF_FontTableBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); for (i=0; ientry_count; i++) { fprintf(trace, "\n", p->fonts[i].fontID, p->fonts[i].fontName ? p->fonts[i].fontName : "NULL"); } fprintf(trace, "\n"); return GF_OK; } static void gpp_dump_rgba(FILE * trace, char *name, u32 col) { fprintf(trace, "%s=\"%x %x %x %x\"", name, (col>>16)&0xFF, (col>>8)&0xFF, (col)&0xFF, (col>>24)&0xFF); } static void gpp_dump_box(FILE * trace, GF_BoxRecord *rec) { fprintf(trace, "\n", rec->top, rec->left, rec->bottom, rec->right); } static void gpp_dump_style(FILE * trace, GF_StyleRecord *rec) { fprintf(trace, "startCharOffset, rec->endCharOffset, rec->fontID); if (!rec->style_flags) { fprintf(trace, "Normal"); } else { if (rec->style_flags & 1) fprintf(trace, "Bold "); if (rec->style_flags & 2) fprintf(trace, "Italic "); if (rec->style_flags & 4) fprintf(trace, "Underlined "); } fprintf(trace, "\" fontSize=\"%d\" ", rec->font_size); gpp_dump_rgba(trace, "text-color", rec->text_color); fprintf(trace, "/>\n"); } GF_Err tx3g_dump(GF_Box *a, FILE * trace) { GF_TextSampleEntryBox *p = (GF_TextSampleEntryBox *)a; fprintf(trace, "dataReferenceIndex, p->displayFlags, p->horizontal_justification, p->vertical_justification); gpp_dump_rgba(trace, "background-color", p->back_color); fprintf(trace, ">\n"); DumpBox(a, trace); fprintf(trace, "\n"); gpp_dump_box(trace, &p->default_box); fprintf(trace, "\n"); fprintf(trace, "\n"); gpp_dump_style(trace, &p->default_style); fprintf(trace, "\n"); gf_box_dump(p->font_table, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err styl_dump(GF_Box *a, FILE * trace) { u32 i; GF_TextStyleBox*p = (GF_TextStyleBox*)a; fprintf(trace, "\n"); DumpBox(a, trace); for (i=0; ientry_count; i++) gpp_dump_style(trace, &p->styles[i]); fprintf(trace, "\n"); return GF_OK; } GF_Err hlit_dump(GF_Box *a, FILE * trace) { GF_TextHighlightBox*p = (GF_TextHighlightBox*)a; fprintf(trace, "\n", p->startcharoffset, p->endcharoffset); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err hclr_dump(GF_Box *a, FILE * trace) { GF_TextHighlightColorBox*p = (GF_TextHighlightColorBox*)a; fprintf(trace, "hil_color); fprintf(trace, ">\n"); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err krok_dump(GF_Box *a, FILE * trace) { u32 i; GF_TextKaraokeBox*p = (GF_TextKaraokeBox*)a; fprintf(trace, "\n", p->highlight_starttime); DumpBox(a, trace); for (i=0; ientrycount; i++) { fprintf(trace, "\n", p->records[i].highlight_endtime, p->records[i].start_charoffset, p->records[i].end_charoffset); } fprintf(trace, "\n"); return GF_OK; } GF_Err dlay_dump(GF_Box *a, FILE * trace) { GF_TextScrollDelayBox*p = (GF_TextScrollDelayBox*)a; fprintf(trace, "\n", p->scroll_delay); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err href_dump(GF_Box *a, FILE * trace) { GF_TextHyperTextBox*p = (GF_TextHyperTextBox*)a; fprintf(trace, "\n", p->startcharoffset, p->endcharoffset, p->URL ? p->URL : "NULL", p->URL_hint ? p->URL_hint : "NULL"); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tbox_dump(GF_Box *a, FILE * trace) { GF_TextBoxBox*p = (GF_TextBoxBox*)a; fprintf(trace, "\n"); gpp_dump_box(trace, &p->box); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err blnk_dump(GF_Box *a, FILE * trace) { GF_TextBlinkBox*p = (GF_TextBlinkBox*)a; fprintf(trace, "\n", p->startcharoffset, p->endcharoffset); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err twrp_dump(GF_Box *a, FILE * trace) { GF_TextWrapBox*p = (GF_TextWrapBox*)a; fprintf(trace, "\n", p->wrap_flag ? ( (p->wrap_flag>1) ? "Reserved" : "Automatic" ) : "No Wrap"); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err meta_dump(GF_Box *a, FILE * trace) { GF_MetaBox *p; p = (GF_MetaBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if (p->handler) gf_box_dump(p->handler, trace); if (p->primary_resource) gf_box_dump(p->primary_resource, trace); if (p->file_locations) gf_box_dump(p->file_locations, trace); if (p->item_locations) gf_box_dump(p->item_locations, trace); if (p->protections) gf_box_dump(p->protections, trace); if (p->item_infos) gf_box_dump(p->item_infos, trace); if (p->IPMP_control) gf_box_dump(p->IPMP_control, trace); gf_box_array_dump(p->other_boxes, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err xml_dump(GF_Box *a, FILE * trace) { GF_XMLBox *p = (GF_XMLBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "xml, p->xml_length, 1, trace); fprintf(trace, "]]>\n"); fprintf(trace, "\n"); return GF_OK; } GF_Err bxml_dump(GF_Box *a, FILE * trace) { GF_BinaryXMLBox *p = (GF_BinaryXMLBox *)a; fprintf(trace, "\n", p->data_length); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err pitm_dump(GF_Box *a, FILE * trace) { GF_PrimaryItemBox *p = (GF_PrimaryItemBox *)a; fprintf(trace, "\n", p->item_ID); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err ipro_dump(GF_Box *a, FILE * trace) { GF_ItemProtectionBox *p = (GF_ItemProtectionBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); gf_box_array_dump(p->protection_information, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err infe_dump(GF_Box *a, FILE * trace) { GF_ItemInfoEntryBox *p = (GF_ItemInfoEntryBox *)a; fprintf(trace, "\n", p->item_ID, p->item_protection_index, p->item_name, p->content_type, p->content_encoding); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err iinf_dump(GF_Box *a, FILE * trace) { GF_ItemInfoBox *p = (GF_ItemInfoBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); gf_box_array_dump(p->item_infos, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err iloc_dump(GF_Box *a, FILE * trace) { u32 i, j, count, count2; GF_ItemLocationBox *p = (GF_ItemLocationBox*)a; fprintf(trace, "\n", p->offset_size, p->length_size, p->base_offset_size); DumpBox(a, trace); gf_full_box_dump(a, trace); count = gf_list_count(p->location_entries); for (i=0;ilocation_entries, i); count2 = gf_list_count(ie->extent_entries); fprintf(trace, "\n", ie->item_ID, ie->data_reference_index, LLD_CAST ie->base_offset); for (j=0; jextent_entries, j); fprintf(trace, "\n", LLD_CAST iee->extent_offset, LLD_CAST iee->extent_length); } } fprintf(trace, "\n"); return GF_OK; } GF_Err imif_dump(GF_Box *a, FILE * trace) { u32 i, count; GF_IPMPInfoBox *p = (GF_IPMPInfoBox*)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); count = gf_list_count(p->descriptors); for (i=0; idescriptors, i); gf_odf_dump_desc(d, trace, 0, 1); } fprintf(trace, "\n"); return GF_OK; } GF_Err ipmc_dump(GF_Box *a, FILE * trace) { u32 i, count; GF_IPMPControlBox *p = (GF_IPMPControlBox*)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if (p->ipmp_tools) gf_odf_dump_desc(p->ipmp_tools, trace, 0, 1); count = gf_list_count(p->descriptors); for (i=0; idescriptors, i); gf_odf_dump_desc(d, trace, 0, 1); } fprintf(trace, "\n"); return GF_OK; } GF_Err hinf_dump(GF_Box *a, FILE * trace) { GF_HintInfoBox *p; p = (GF_HintInfoBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); gf_box_array_dump(p->boxList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err trpy_dump(GF_Box *a, FILE * trace) { GF_TRPYBox *p; p = (GF_TRPYBox *)a; fprintf(trace, "\n", LLD_CAST p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err totl_dump(GF_Box *a, FILE * trace) { GF_TOTLBox *p; p = (GF_TOTLBox *)a; fprintf(trace, "\n", p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err nump_dump(GF_Box *a, FILE * trace) { GF_NUMPBox *p; p = (GF_NUMPBox *)a; fprintf(trace, "\n", LLD_CAST p->nbPackets); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err npck_dump(GF_Box *a, FILE * trace) { GF_NPCKBox *p; p = (GF_NPCKBox *)a; fprintf(trace, "\n", p->nbPackets); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tpyl_dump(GF_Box *a, FILE * trace) { GF_NTYLBox *p; p = (GF_NTYLBox *)a; fprintf(trace, "\n", LLD_CAST p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tpay_dump(GF_Box *a, FILE * trace) { GF_TPAYBox *p; p = (GF_TPAYBox *)a; fprintf(trace, "\n", p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err maxr_dump(GF_Box *a, FILE * trace) { GF_MAXRBox *p; p = (GF_MAXRBox *)a; fprintf(trace, "\n", p->maxDataRate, p->granularity); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err dmed_dump(GF_Box *a, FILE * trace) { GF_DMEDBox *p; p = (GF_DMEDBox *)a; fprintf(trace, "\n", LLD_CAST p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err dimm_dump(GF_Box *a, FILE * trace) { GF_DIMMBox *p; p = (GF_DIMMBox *)a; fprintf(trace, "\n", LLD_CAST p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err drep_dump(GF_Box *a, FILE * trace) { GF_DREPBox *p; p = (GF_DREPBox *)a; fprintf(trace, "\n", LLD_CAST p->nbBytes); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tmin_dump(GF_Box *a, FILE * trace) { GF_TMINBox *p; p = (GF_TMINBox *)a; fprintf(trace, "\n", p->minTime); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tmax_dump(GF_Box *a, FILE * trace) { GF_TMAXBox *p; p = (GF_TMAXBox *)a; fprintf(trace, "\n", p->maxTime); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err pmax_dump(GF_Box *a, FILE * trace) { GF_PMAXBox *p; p = (GF_PMAXBox *)a; fprintf(trace, "\n", p->maxSize); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err dmax_dump(GF_Box *a, FILE * trace) { GF_DMAXBox *p; p = (GF_DMAXBox *)a; fprintf(trace, "\n", p->maxDur); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err payt_dump(GF_Box *a, FILE * trace) { GF_PAYTBox *p; p = (GF_PAYTBox *)a; fprintf(trace, "\n", p->payloadCode, p->payloadString); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err name_dump(GF_Box *a, FILE * trace) { GF_NameBox *p; p = (GF_NameBox *)a; fprintf(trace, "\n", p->string); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err rely_dump(GF_Box *a, FILE * trace) { GF_RelyHintBox *p; p = (GF_RelyHintBox *)a; fprintf(trace, "\n", p->prefered, p->required); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err snro_dump(GF_Box *a, FILE * trace) { GF_SeqOffHintEntryBox *p; p = (GF_SeqOffHintEntryBox *)a; fprintf(trace, "\n", p->SeqOffset); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tims_dump(GF_Box *a, FILE * trace) { GF_TSHintEntryBox *p; p = (GF_TSHintEntryBox *)a; fprintf(trace, "\n", p->timeScale); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tsro_dump(GF_Box *a, FILE * trace) { GF_TimeOffHintEntryBox *p; p = (GF_TimeOffHintEntryBox *)a; fprintf(trace, "\n", p->TimeOffset); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err ghnt_dump(GF_Box *a, FILE * trace) { GF_HintSampleEntryBox *p; p = (GF_HintSampleEntryBox *)a; fprintf(trace, "\n", gf_4cc_to_str(p->type), p->dataReferenceIndex, p->HintTrackVersion, p->LastCompatibleVersion, p->MaxPacketSize); DumpBox(a, trace); gf_box_array_dump(p->HintDataTable, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err hnti_dump(GF_Box *a, FILE * trace) { GF_HintTrackInfoBox *p; GF_Box *ptr; GF_RTPBox *rtp; u32 i; p = (GF_HintTrackInfoBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); i=0; while ((ptr = (GF_Box *)gf_list_enum(p->boxList, &i))) { if (ptr->type !=GF_ISOM_BOX_TYPE_RTP) { gf_box_dump(ptr, trace); } else { rtp = (GF_RTPBox *)ptr; fprintf(trace, "\n", gf_4cc_to_str(rtp->subType)); fprintf(trace, "\n", rtp->sdpText); fprintf(trace, "\n"); } } fprintf(trace, "\n"); return GF_OK; } GF_Err sdp_dump(GF_Box *a, FILE * trace) { GF_SDPBox *p; p = (GF_SDPBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); fprintf(trace, "\n", p->sdpText); fprintf(trace, "\n"); return GF_OK; } GF_Err rtpo_dump(GF_Box *a, FILE * trace) { GF_RTPOBox *p; p = (GF_RTPOBox *)a; fprintf(trace, "\n", p->timeOffset); DumpBox(a, trace); fprintf(trace, "\n"); return GF_OK; } #ifndef GF_ISOM_NO_FRAGMENTS GF_Err mvex_dump(GF_Box *a, FILE * trace) { GF_MovieExtendsBox *p; p = (GF_MovieExtendsBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); if (p->mehd) gf_box_dump(p->mehd, trace); gf_box_array_dump(p->TrackExList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mehd_dump(GF_Box *a, FILE * trace) { GF_MovieExtendsHeaderBox *p = (GF_MovieExtendsHeaderBox*)a; fprintf(trace, "\n", LLD_CAST p->fragment_duration); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err trex_dump(GF_Box *a, FILE * trace) { GF_TrackExtendsBox *p; p = (GF_TrackExtendsBox *)a; fprintf(trace, "trackID); fprintf(trace, " SampleDescriptionIndex=\"%d\" SampleDuration=\"%d\" SampleSize=\"%d\"", p->def_sample_desc_index, p->def_sample_duration, p->def_sample_size); fprintf(trace, " SamplePadding=\"%d\" SampleSync=\"%d\" SampleDegradationPriority=\"%d\"", GF_ISOM_GET_FRAG_PAD(p->def_sample_flags), GF_ISOM_GET_FRAG_SYNC(p->def_sample_flags), GF_ISOM_GET_FRAG_DEG(p->def_sample_flags)); fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err moof_dump(GF_Box *a, FILE * trace) { GF_MovieFragmentBox *p; p = (GF_MovieFragmentBox *)a; fprintf(trace, "\n", gf_list_count(p->TrackList)); DumpBox(a, trace); if (p->mfhd) gf_box_dump(p->mfhd, trace); gf_box_array_dump(p->TrackList, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err mfhd_dump(GF_Box *a, FILE * trace) { GF_MovieFragmentHeaderBox *p; p = (GF_MovieFragmentHeaderBox *)a; fprintf(trace, "\n", p->sequence_number); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err traf_dump(GF_Box *a, FILE * trace) { GF_TrackFragmentBox *p; p = (GF_TrackFragmentBox *)a; fprintf(trace, "\n"); DumpBox(a, trace); if (p->tfhd) gf_box_dump(p->tfhd, trace); gf_box_array_dump(p->TrackRuns, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err tfhd_dump(GF_Box *a, FILE * trace) { GF_TrackFragmentHeaderBox *p; p = (GF_TrackFragmentHeaderBox *)a; fprintf(trace, "trackID); if (p->flags & GF_ISOM_TRAF_BASE_OFFSET) { fprintf(trace, " BaseDataOffset=\""LLD"\"", LLD_CAST p->base_data_offset); } if (p->flags & GF_ISOM_TRAF_SAMPLE_DESC) fprintf(trace, "SampleDescriptionIndex=\"%d\"", p->sample_desc_index); if (p->flags & GF_ISOM_TRAF_SAMPLE_DUR) fprintf(trace, " SampleDuration=\"%d\"", p->def_sample_duration); if (p->flags & GF_ISOM_TRAF_SAMPLE_SIZE) fprintf(trace, " SampleSize=\"%d\"", p->def_sample_size); if (p->flags & GF_ISOM_TRAF_SAMPLE_FLAGS) { fprintf(trace, " SamplePadding=\"%d\"", GF_ISOM_GET_FRAG_PAD(p->def_sample_flags)); fprintf(trace, " SampleSync=\"%d\"", GF_ISOM_GET_FRAG_SYNC(p->def_sample_flags)); fprintf(trace, " SampleDegradationPriority=\"%d\"", GF_ISOM_GET_FRAG_DEG(p->def_sample_flags)); } fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); fprintf(trace, "\n"); return GF_OK; } GF_Err trun_dump(GF_Box *a, FILE * trace) { u32 i; GF_TrunEntry *ent; GF_TrackFragmentRunBox *p; p = (GF_TrackFragmentRunBox *)a; fprintf(trace, "sample_count); if (p->flags & GF_ISOM_TRUN_DATA_OFFSET) fprintf(trace, " DataOffset=\"%d\"", p->data_offset); if (p->flags & GF_ISOM_TRUN_FIRST_FLAG) { fprintf(trace, " FirstSamplePadding=\"%d\" FirstSampleSync=\"%d\" FirstSampleDegradationPriority=\"%d\"", GF_ISOM_GET_FRAG_PAD(p->first_sample_flags), GF_ISOM_GET_FRAG_SYNC(p->first_sample_flags), GF_ISOM_GET_FRAG_DEG(p->first_sample_flags)); } fprintf(trace, ">\n"); DumpBox(a, trace); gf_full_box_dump(a, trace); if (p->flags & (GF_ISOM_TRUN_DURATION|GF_ISOM_TRUN_SIZE|GF_ISOM_TRUN_CTS_OFFSET|GF_ISOM_TRUN_FLAGS)) { i=0; while ((ent = (GF_TrunEntry *)gf_list_enum(p->entries, &i))) { fprintf(trace, "flags & GF_ISOM_TRUN_DURATION) fprintf(trace, " Duration=\"%d\"", ent->Duration); if (p->flags & GF_ISOM_TRUN_SIZE) fprintf(trace, " Size=\"%d\"", ent->size); if (p->flags & GF_ISOM_TRUN_CTS_OFFSET) fprintf(trace, " CTSOffset=\"%d\"", ent->CTS_Offset); if (p->flags & GF_ISOM_TRUN_FLAGS) { fprintf(trace, " SamplePadding=\"%d\" Sync=\"%d\" DegradationPriority=\"%d\"", GF_ISOM_GET_FRAG_PAD(ent->flags), GF_ISOM_GET_FRAG_SYNC(ent->flags), GF_ISOM_GET_FRAG_DEG(ent->flags)); } fprintf(trace, "/>\n"); } } else { fprintf(trace, "\n"); } fprintf(trace, "\n"); return GF_OK; } #endif GF_Err DTE_Dump(GF_List *dte, FILE * trace) { GF_GenericDTE *p; GF_ImmediateDTE *i_p; GF_SampleDTE *s_p; GF_StreamDescDTE *sd_p; u32 i, count; count = gf_list_count(dte); for (i=0; isource) { case 0: fprintf(trace, "\n"); break; case 1: i_p = (GF_ImmediateDTE *) p; fprintf(trace, "\n", i_p->dataLength); break; case 2: s_p = (GF_SampleDTE *) p; fprintf(trace, "\n", s_p->dataLength, s_p->byteOffset, s_p->sampleNumber, s_p->trackRefIndex); break; case 3: sd_p = (GF_StreamDescDTE *) p; fprintf(trace, "\n", sd_p->dataLength, sd_p->byteOffset, sd_p->streamDescIndex, sd_p->trackRefIndex); break; default: fprintf(trace, "\n"); break; } } return GF_OK; } GF_EXPORT GF_Err gf_isom_dump_hint_sample(GF_ISOFile *the_file, u32 trackNumber, u32 SampleNum, FILE * trace) { GF_ISOSample *tmp; GF_HintSampleEntryBox *entry; u32 descIndex, count, count2, i; GF_Err e; GF_BitStream *bs; GF_HintSample *s; GF_TrackBox *trak; GF_RTPPacket *pck; trak = gf_isom_get_track_from_file(the_file, trackNumber); if (!trak || !IsHintTrack(trak)) return GF_BAD_PARAM; tmp = gf_isom_get_sample(the_file, trackNumber, SampleNum, &descIndex); if (!tmp) return GF_BAD_PARAM; e = Media_GetSampleDesc(trak->Media, descIndex, (GF_SampleEntryBox **) &entry, &count); if (e) { gf_isom_sample_del(&tmp); return e; } //check we can read the sample switch (entry->type) { case GF_ISOM_BOX_TYPE_RTP_STSD: break; default: gf_isom_sample_del(&tmp); return GF_NOT_SUPPORTED; } bs = gf_bs_new(tmp->data, tmp->dataLength, GF_BITSTREAM_READ); s = gf_isom_hint_sample_new(entry->type); gf_isom_hint_sample_read(s, bs, tmp->dataLength); gf_bs_del(bs); count = gf_list_count(s->packetTable); fprintf(trace, "\n", SampleNum, LLD_CAST tmp->DTS, tmp->IsRAP, count); for (i=0; ipacketTable, i); fprintf(trace, "P_bit, pck->X_bit, pck->M_bit, pck->payloadType); fprintf(trace, " SequenceNumber=\"%d\" RepeatedPacket=\"%d\" DropablePacket=\"%d\" RelativeTransmissionTime=\"%d\" FullPacketSize=\"%d\">\n", pck->SequenceNumber, pck->R_bit, pck->B_bit, pck->relativeTransTime, gf_isom_hint_rtp_length(pck)); //TLV is made of Boxes count2 = gf_list_count(pck->TLV); if (count2) { fprintf(trace, "\n", count2); gf_box_array_dump(pck->TLV, trace); fprintf(trace, "\n"); } //DTE is made of NON boxes count2 = gf_list_count(pck->DataTable); if (count2) { fprintf(trace, "\n", count2); DTE_Dump(pck->DataTable, trace); fprintf(trace, "\n"); } fprintf(trace, "\n"); } fprintf(trace, "\n"); gf_isom_sample_del(&tmp); gf_isom_hint_sample_del(s); return GF_OK; } static void gpp_dump_box_nobox(FILE * trace, GF_BoxRecord *rec) { fprintf(trace, "\n", rec->top, rec->left, rec->bottom, rec->right); } static void gpp_print_char_offsets(FILE * trace, u32 start, u32 end, u32 *shift_offset, u32 so_count) { u32 i; if (shift_offset) { for (i=0; ishift_offset[i]) { start --; break; } } for (i=0; ishift_offset[i]) { end --; break; } } } if (start || end) fprintf(trace, "fromChar=\"%d\" toChar=\"%d\" ", start, end); } static void gpp_dump_style_nobox(FILE * trace, GF_StyleRecord *rec, u32 *shift_offset, u32 so_count) { fprintf(trace, "