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

📄 odf_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 / MPEG-4 ObjectDescriptor 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/odf_dev.h>#include <gpac/constants.h>/*for import flags*/#include <gpac/media_tools.h>#define OD_MAX_TREE		100#define OD_FORMAT_INDENT( ind_buf, indent ) \	{ \		u32 z;	\		assert(OD_MAX_TREE>indent);	\		for (z=0; z<indent; z++) ind_buf[z] = ' '; \		ind_buf[z] = 0; \	} \GF_EXPORTGF_Err gf_odf_dump_com(void *p, FILE *trace, u32 indent, Bool XMTDump){	GF_ODCom *com = (GF_ODCom *)p;	switch (com->tag) {	case GF_ODF_OD_UPDATE_TAG:		return gf_odf_dump_od_update((GF_ODUpdate *)com, trace, indent, XMTDump);	case GF_ODF_OD_REMOVE_TAG:		return gf_odf_dump_od_remove((GF_ODRemove *)com, trace, indent, XMTDump);	case GF_ODF_ESD_UPDATE_TAG:		return gf_odf_dump_esd_update((GF_ESDUpdate *)com, trace, indent, XMTDump);	case GF_ODF_ESD_REMOVE_TAG:		return gf_odf_dump_esd_remove((GF_ESDRemove *)com, trace, indent, XMTDump);	case GF_ODF_IPMP_UPDATE_TAG:		return gf_odf_dump_ipmp_update((GF_IPMPUpdate *)com, trace, indent, XMTDump);	case GF_ODF_IPMP_REMOVE_TAG:		return gf_odf_dump_ipmp_remove((GF_IPMPRemove *)com, trace, indent, XMTDump);	default:		return gf_odf_dump_base_command((GF_BaseODCom *) com, trace, indent, XMTDump);	}}GF_EXPORTGF_Err gf_odf_dump_au(char *data, u32 dataLength, FILE *trace, u32 indent, Bool XMTDump){	GF_ODCom *com;	GF_ODCodec *odread = gf_odf_codec_new();	gf_odf_codec_set_au(odread, data, dataLength);	gf_odf_codec_decode(odread);	while (1) {		com = gf_odf_codec_get_com(odread);		if (!com) break;		gf_odf_dump_com(com, trace, indent, XMTDump);		gf_odf_com_del(&com);	}	gf_odf_codec_del(odread);	return GF_OK;}GF_EXPORTGF_Err gf_odf_dump_com_list(GF_List *commandList, FILE *trace, u32 indent, Bool XMTDump){	GF_ODCom *com;	u32 i;	i=0;	while ((com = (GF_ODCom *)gf_list_enum(commandList, &i))) {		gf_odf_dump_com(com, trace, indent, XMTDump);	}	return GF_OK;}GF_EXPORTGF_Err gf_odf_dump_desc(void *ptr, FILE *trace, u32 indent, Bool XMTDump){	GF_Descriptor *desc = (GF_Descriptor *)ptr;	switch (desc->tag) {	case GF_ODF_IOD_TAG :		return gf_odf_dump_iod((GF_InitialObjectDescriptor *)desc, trace, indent, XMTDump);	case GF_ODF_ESD_TAG :		return gf_odf_dump_esd((GF_ESD *)desc, trace, indent, XMTDump);	case GF_ODF_DCD_TAG :		return gf_odf_dump_dcd((GF_DecoderConfig *)desc, trace, indent, XMTDump);	case GF_ODF_SLC_TAG:		return gf_odf_dump_slc((GF_SLConfig *)desc, trace, indent, XMTDump);	case GF_ODF_CC_TAG:		return gf_odf_dump_cc((GF_CCDescriptor *)desc, trace, indent, XMTDump);	case GF_ODF_CC_DATE_TAG:		return gf_odf_dump_cc_date((GF_CC_Date *)desc, trace, indent, XMTDump);	case GF_ODF_CC_NAME_TAG:		return gf_odf_dump_cc_name((GF_CC_Name *)desc, trace, indent, XMTDump);	case GF_ODF_CI_TAG:		return gf_odf_dump_ci((GF_CIDesc *)desc, trace, indent, XMTDump);	case GF_ODF_ESD_INC_TAG:		return gf_odf_dump_esd_inc((GF_ES_ID_Inc *)desc, trace, indent, XMTDump);	case GF_ODF_ESD_REF_TAG:		return gf_odf_dump_esd_ref((GF_ES_ID_Ref *)desc, trace, indent, XMTDump);	case GF_ODF_TEXT_TAG:		return gf_odf_dump_exp_text((GF_ExpandedTextual *)desc, trace, indent, XMTDump);	case GF_ODF_EXT_PL_TAG:		return gf_odf_dump_pl_ext((GF_PLExt *)desc, trace, indent, XMTDump);	case GF_ODF_IPI_PTR_TAG:	case GF_ODF_ISOM_IPI_PTR_TAG:		return gf_odf_dump_ipi_ptr((GF_IPIPtr *)desc, trace, indent, XMTDump);	case GF_ODF_IPMP_TAG:		return gf_odf_dump_ipmp((GF_IPMP_Descriptor *)desc, trace, indent, XMTDump);	case GF_ODF_IPMP_PTR_TAG:		return gf_odf_dump_ipmp_ptr((GF_IPMPPtr *)desc, trace, indent, XMTDump);	case GF_ODF_KW_TAG:		return gf_odf_dump_kw((GF_KeyWord *)desc, trace, indent, XMTDump);	case GF_ODF_LANG_TAG:		return gf_odf_dump_lang((GF_Language *)desc, trace, indent, XMTDump);	case GF_ODF_ISOM_IOD_TAG:		return gf_odf_dump_isom_iod((GF_IsomInitialObjectDescriptor *)desc, trace, indent, XMTDump);	case GF_ODF_ISOM_OD_TAG:		return gf_odf_dump_isom_od((GF_IsomObjectDescriptor *)desc, trace, indent, XMTDump);	case GF_ODF_OD_TAG:		return gf_odf_dump_od((GF_ObjectDescriptor *)desc, trace, indent, XMTDump);	case GF_ODF_OCI_DATE_TAG:		return gf_odf_dump_oci_date((GF_OCI_Data *)desc, trace, indent, XMTDump);	case GF_ODF_OCI_NAME_TAG:		return gf_odf_dump_oci_name((GF_OCICreators *)desc, trace, indent, XMTDump);	case GF_ODF_PL_IDX_TAG:		return gf_odf_dump_pl_idx((GF_PL_IDX *)desc, trace, indent, XMTDump);	case GF_ODF_QOS_TAG:		return gf_odf_dump_qos((GF_QoS_Descriptor *)desc, trace, indent, XMTDump);	case GF_ODF_RATING_TAG:		return gf_odf_dump_rating((GF_Rating *)desc, trace, indent, XMTDump);	case GF_ODF_REG_TAG:		return gf_odf_dump_reg((GF_Registration *)desc, trace, indent, XMTDump);	case GF_ODF_SHORT_TEXT_TAG:		return gf_odf_dump_short_text((GF_ShortTextual *)desc, trace, indent, XMTDump);	case GF_ODF_SMPTE_TAG:		return gf_odf_dump_smpte_camera((GF_SMPTECamera *)desc, trace, indent, XMTDump);	case GF_ODF_SCI_TAG:		return gf_odf_dump_sup_cid((GF_SCIDesc *)desc, trace, indent, XMTDump);	case GF_ODF_SEGMENT_TAG:		return gf_odf_dump_segment((GF_Segment *)desc, trace, indent, XMTDump);	case GF_ODF_MEDIATIME_TAG:		return gf_odf_dump_mediatime((GF_MediaTime *)desc, trace, indent, XMTDump);	case GF_ODF_TEXT_CFG_TAG:		return gf_odf_dump_txtcfg((GF_TextConfig *)desc, trace, indent, XMTDump);	case GF_ODF_MUXINFO_TAG:		return gf_odf_dump_muxinfo((GF_MuxInfo *)desc, trace, indent, XMTDump);	case GF_ODF_BIFS_CFG_TAG:		return gf_odf_dump_bifs_cfg((GF_BIFSConfig *)desc, trace, indent, XMTDump);	case GF_ODF_LASER_CFG_TAG:		return gf_odf_dump_laser_cfg((GF_LASERConfig *)desc, trace, indent, XMTDump);	case GF_ODF_UI_CFG_TAG:		return gf_odf_dump_ui_cfg((GF_UIConfig *)desc, trace, indent, XMTDump);	case GF_ODF_IPMP_TL_TAG:		return gf_odf_dump_ipmp_tool_list((GF_IPMP_ToolList*)desc, trace, indent, XMTDump);	case GF_ODF_IPMP_TOOL_TAG:		return gf_odf_dump_ipmp_tool((GF_IPMP_Tool*)desc, trace, indent, XMTDump);	default:		return gf_odf_dump_default((GF_DefaultDescriptor *)desc, trace, indent, XMTDump);	}	return GF_OK;}static void StartDescDump(FILE *trace, const char *descName, u32 indent, Bool XMTDump){	char ind_buf[OD_MAX_TREE];	OD_FORMAT_INDENT(ind_buf, indent);	if (!XMTDump) {		fprintf(trace, "%s {\n", descName);	} else {		fprintf(trace, "%s<%s ", ind_buf, descName);	}}static void EndDescDump(FILE *trace, const char *descName, u32 indent, Bool XMTDump){	char ind_buf[OD_MAX_TREE];	OD_FORMAT_INDENT(ind_buf, indent);	if (!XMTDump) {		fprintf(trace, "%s}\n", ind_buf);	} else {		fprintf(trace, "%s</%s>\n", ind_buf, descName);	}}/*special element open for XML only, appends "<eltName " - used because XMT-A OD representations use lots of subdescs not present in BT*/static void StartSubElement(FILE *trace, const char *eltName, u32 indent, Bool XMTDump){	if (XMTDump) {		char ind_buf[OD_MAX_TREE];		OD_FORMAT_INDENT(ind_buf, indent);		fprintf(trace, "%s<%s ", ind_buf, eltName);	}}/*special close for XML only, appends "/>" - used because XMT-A OD representations use lots of subdescs not present in BT*/static void EndSubElement(FILE *trace, u32 indent, Bool XMTDump){	if (XMTDump) fprintf(trace, "/>\n");}static void EndAttributes(FILE *trace, u32 indent, Bool XMTDump){	if (XMTDump) fprintf(trace, ">\n");}static void StartElement(FILE *trace, const char *attName, u32 indent, Bool XMTDump, Bool IsList){	char ind_buf[OD_MAX_TREE];	OD_FORMAT_INDENT(ind_buf, indent);	if (!XMTDump) {		if (IsList) 			fprintf(trace, "%s%s [\n", ind_buf, attName);		else			fprintf(trace, "%s%s ", ind_buf, attName);	} else {		fprintf(trace, "%s<%s>\n", ind_buf, attName);	}}static void EndElement(FILE *trace, const char *attName, u32 indent, Bool XMTDump, Bool IsList){	char ind_buf[OD_MAX_TREE];	OD_FORMAT_INDENT(ind_buf, indent);	if (!XMTDump) {		if (IsList) fprintf(trace, "%s]\n", ind_buf);	} else {		fprintf(trace, "%s</%s>\n", ind_buf, attName);	}}static void StartAttribute(FILE *trace, const char *attName, u32 indent, Bool XMTDump){	char ind_buf[OD_MAX_TREE];	OD_FORMAT_INDENT(ind_buf, indent);	if (!XMTDump) {		fprintf(trace, "%s%s ", ind_buf, attName);	} else {		fprintf(trace, "%s=\"", attName);	}}static void EndAttribute(FILE *trace, u32 indent, Bool XMTDump){	if (!XMTDump) {		fprintf(trace, "\n");	} else {		fprintf(trace, "\" ");	}}static void DumpInt(FILE *trace, const char *attName, u32  val, u32 indent, Bool XMTDump){	if (!val) return;	StartAttribute(trace, attName, indent, XMTDump);	fprintf(trace, "%d", val);	EndAttribute(trace, indent, XMTDump);}static void DumpIntHex(FILE *trace, const char *attName, u32  val, u32 indent, Bool XMTDump, Bool single_byte){	StartAttribute(trace, attName, indent, XMTDump);	if (single_byte) {		fprintf(trace, "0x%02X", val);	} else {		fprintf(trace, "0x%08X", val);	}	EndAttribute(trace, indent, XMTDump);}static void DumpFloat(FILE *trace, const char *attName, Float val, u32 indent, Bool XMTDump){	StartAttribute(trace, attName, indent, XMTDump);	fprintf(trace, "%g", val);	EndAttribute(trace, indent, XMTDump);}static void DumpDouble(FILE *trace, const char *attName, Double val, u32 indent, Bool XMTDump){	StartAttribute(trace, attName, indent, XMTDump);	fprintf(trace, "%g", val);	EndAttribute(trace, indent, XMTDump);}static void DumpBool(FILE *trace, const char *attName, u32  val, u32 indent, Bool XMTDump){	if (!val) return;	StartAttribute(trace, attName, indent, XMTDump);	fprintf(trace, "%s", val ? "true" : "false");	EndAttribute(trace, indent, XMTDump);}static void DumpString(FILE *trace, const char *attName, char *val, u32 indent, Bool XMTDump){	if (!val) return;	StartAttribute(trace, attName, indent, XMTDump);	if (!XMTDump) fprintf(trace, "\"");	fprintf(trace, "%s", val);	if (!XMTDump) fprintf(trace, "\"");	EndAttribute(trace, indent, XMTDump);}static void DumpData(FILE *trace, const char *name, char *data, u32 dataLength, u32 indent, Bool XMTDump){	u32 i;	if (!name ||!data) return;	StartAttribute(trace, name, indent, XMTDump);	if (XMTDump) fprintf(trace, "data:application/octet-string,");	for (i=0; i<dataLength; i++) {		fprintf(trace, "%%");		fprintf(trace, "%02X", (unsigned char) data[i]);	}	EndAttribute(trace, indent, XMTDump);}static void DumpBin128(FILE *trace, const char *name, char *data, u32 indent, Bool XMTDump){	u32 i;	if (!name ||!data) return;	StartAttribute(trace, name, indent, XMTDump);	fprintf(trace, "0x");	i=0;	while (!data[i] && (i<16)) i++;	if (i==16) {		fprintf(trace, "00");	} else {		for (; i<16; i++) fprintf(trace, "%02X", (unsigned char) data[i]);	}	EndAttribute(trace, indent, XMTDump);}GF_Err DumpDescList(GF_List *list, FILE *trace, u32 indent, const char *ListName, Bool XMTDump, Bool no_skip_empty){	u32 i, count;	GF_Descriptor *desc;	char ind_buf[OD_MAX_TREE];	if (!list) return GF_OK;	count = gf_list_count(list);	if (!no_skip_empty && !count) return GF_OK;	StartElement(trace, ListName, indent, XMTDump, 1);	indent++;	OD_FORMAT_INDENT(ind_buf, indent);	for (i=0; i<count; i++) {		desc = (GF_Descriptor *)gf_list_get(list, i);		//add offset if not XMT		if (!XMTDump) fprintf(trace, "%s", ind_buf);		gf_odf_dump_desc(desc, trace, indent, XMTDump);	}

⌨️ 快捷键说明

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