⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 box_dump.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
/* *			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 <gpac/internal/isomedia_dev.h>#include <gpac/utf.h>static GF_Err apple_tag_dump(GF_Box *a, FILE * trace);void NullBoxErr(FILE * trace){	fprintf(trace, "<!--ERROR: NULL Box Found-->\n");}void BadTopBoxErr(GF_Box *a, FILE * trace){	fprintf(trace, "<!--ERROR: Invalid Top-level Box Found (\"%s\")-->\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; i<dataLength; i++) {		fprintf(trace, "%%");		fprintf(trace, "%02X", (unsigned char) data[i]);	}}GF_Err DumpBox(GF_Box *a, FILE * trace){	if (a->size > 0xFFFFFFFF) {		fprintf(trace, "<BoxInfo LargeSize=\""LLD"\" ", LLD_CAST a->size);	} else {		fprintf(trace, "<BoxInfo Size=\"%d\" ", (u32) a->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_EXPORTGF_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, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");	fprintf(trace, "<!--MP4Box dump trace-->\n");	fprintf(trace, "<IsoMediaFile Name=\"%s\">\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, "</IsoMediaFile>\n");	return GF_OK;}GF_Err gf_full_box_dump(GF_Box *a, FILE * trace){	GF_FullBox *p;	p = (GF_FullBox *)a;	fprintf(trace, "<FullBoxInfo Version=\"%d\" Flags=\"%d\"/>\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; i<p->trackIDCount; i++) fprintf(trace, " %d", p->trackIDs[i]);	fprintf(trace, "\">\n");	DumpBox(a, trace);	fprintf(trace, "</%sTrackReferenceBox>\n", s);	return GF_OK;}GF_Err free_dump(GF_Box *a, FILE * trace){	GF_FreeSpaceBox *p;	p = (GF_FreeSpaceBox *)a;	fprintf(trace, "<FreeSpaceBox size=\"%d\">\n", p->dataSize);	DumpBox(a, trace);	fprintf(trace, "</FreeSpaceBox>\n");	return GF_OK;}GF_Err mdat_dump(GF_Box *a, FILE * trace){	GF_MediaDataBox *p;	p = (GF_MediaDataBox *)a;	fprintf(trace, "<MediaDataBox dataSize=\""LLD"\">\n", LLD_CAST p->dataSize);	DumpBox(a, trace);	fprintf(trace, "</MediaDataBox>\n");	return GF_OK;}GF_Err moov_dump(GF_Box *a, FILE * trace){	GF_MovieBox *p;	p = (GF_MovieBox *)a;	fprintf(trace, "<MovieBox>\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, "</MovieBox>\n");	return GF_OK;}GF_Err mvhd_dump(GF_Box *a, FILE * trace){	GF_MovieHeaderBox *p;	p = (GF_MovieHeaderBox *) a;	fprintf(trace, "<MovieHeaderBox ");	fprintf(trace, "CreationTime=\""LLD"\" ", LLD_CAST p->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, "</MovieHeaderBox>");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -