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

📄 loadcompare.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
	u32 i, starttime, endtime;	void *p;		u32 nb;	if (lc->spread_repeat) nb = 1;	else nb = lc->nbloads ;	*loadtime = 0;	for (i = 0; i<nb; i++) {		sg = gf_sg_new();		starttime = gf_sys_clock();		p = DANAE_NewSVGParser(item_path, sg);		DANAE_SVGParser_Parse(p);		DANAE_SVGParser_Terminate();		endtime = gf_sys_clock();		if (lc->verbose) fprintf(stdout, "LibXML single parsing: %d\n", endtime-starttime);		*loadtime += endtime-starttime;		gf_sg_del(sg);	}	return e;}GF_Err get_size(GF_LoadCompare *lc, char *item_name, char *item_path, u32 *size){	GF_Err e = GF_OK;	FILE *file = NULL;	*size = 0;	file = fopen(item_path, "rt");	if (!file) {		if (lc->verbose) fprintf(stdout, "Could not open file %s\n", item_path);		e = GF_IO_ERR;	} else {		fseek(file, 0, SEEK_END);		*size = (u32)ftell(file);		fclose(file);		if (*size == 0) {			if (lc->verbose) fprintf(stdout, "File %s has a size of 0\n", item_path);			e = GF_IO_ERR;		} 			}	return e;}GF_Err get_decoded_svg_loadtime_and_size(GF_LoadCompare *lc, char *item_name, char *item_path, u32 *loadtime, u32 *size){	GF_Err e = GF_OK;	char svg_out_name[256];	char *ext;	strcpy(svg_out_name, item_name);	ext = strrchr(svg_out_name, '.');	strcpy(ext, "_out.svg");	*size = 0;	*loadtime = 0;	e = decode_svg(lc, item_name, item_path, svg_out_name);	if (!e) {		e = get_size(lc, svg_out_name, svg_out_name, size);		if (e) {			return e;		}		e = gpacctx_load_file(lc, svg_out_name, loadtime);	}	return e;}GF_Err create_gz_file(GF_LoadCompare *lc, char *item_name, char *item_path, u32 *size){	char buffer[100];	char gz_path[256];	GF_Err e = GF_OK;	FILE *file = NULL;	void *gz = NULL;	u32 read;	*size = 0;	strcpy(gz_path, item_name);	strcat(gz_path, "z");	gz = gzopen(gz_path, "wb");	file = fopen(item_path, "rt");	if (!gz || !file) {		if (lc->verbose) fprintf(stdout, "Could not open file %s or %s\n", item_path, gz_path);		e = GF_IO_ERR;	} else {		while ((read = fread(buffer, 1, 100, file))) gzwrite(gz, buffer, read);		fclose(file);		gzclose(gz);		file = fopen(gz_path, "rb");		fseek(file, 0, SEEK_END);		*size = (u32)ftell(file);		fclose(file);		if (*size == 0) {			if (lc->verbose) fprintf(stdout, "File %s has a size of 0\n", gz_path);			e = GF_IO_ERR;		} 	}	return e;}GF_Err get_gz_loadtime(GF_LoadCompare *lc, char *item_name, char *item_path, u32 *loadtime, Bool useLibXML){	char gz_path[256];	GF_Err e = GF_OK;	*loadtime = 0;	strcpy(gz_path, item_name);	strcat(gz_path, "z");	if (useLibXML) {		e = libxml_load_svg(lc, gz_path, loadtime);	} else {		e = gpacctx_load_file(lc, gz_path, loadtime);	}	return e;}void print_load_data(GF_LoadCompare *lc, LoadData *ld){	if (lc->verbose) fprintf(stdout, "Processing %s\n", ld->filename);	fprintf(lc->out, "%s\t", ld->filename);	if (lc->verbose) fprintf(stdout, "File Size %d\n", ld->size);	fprintf(lc->out, "%d\t", ld->size);	if (lc->verbose) fprintf(stdout, "GPAC XML Load Time %d\n", ld->gpacxml_loadtime);	fprintf(lc->out, "%d\t", ld->gpacxml_loadtime);	if (lc->verbose) fprintf(stdout, "LibXML Load Time %d \n", ld->libxml_loadtime);	fprintf(lc->out, "%d\t", ld->libxml_loadtime);	if (lc->verbose) fprintf(stdout, "GZ Size %d\n", ld->gz_size);	fprintf(lc->out, "%d\t", ld->gz_size);	if (lc->verbose) fprintf(stdout, "GZ Load Time %d\n", ld->gpacxml_gz_loadtime);	fprintf(lc->out, "%d\t", ld->gpacxml_gz_loadtime);	if (lc->verbose) fprintf(stdout, "LibXML GZ Load Time %d\n", ld->libxml_gz_loadtime);	fprintf(lc->out, "%d\t", ld->libxml_gz_loadtime);	if (lc->verbose) fprintf(stdout, "MP4 Track Size %d\n", ld->track_size);	fprintf(lc->out, "%d\t", ld->track_size);	if (lc->verbose) fprintf(stdout, "MP4 Track Load Time %d\n", ld->track_loadtime);	fprintf(lc->out, "%d\t", ld->track_loadtime);	if (lc->verbose) fprintf(stdout, "Decoded Size %d\n", ld->decoded_size);	fprintf(lc->out, "%d\t", ld->decoded_size);	if (lc->verbose) fprintf(stdout, "Decoded Load Time %d \n", ld->decoded_loadtime);	fprintf(lc->out, "%d\t", ld->decoded_loadtime);	if (lc->verbose) fprintf(stdout, "Done %s\n", ld->filename);	fprintf(lc->out, "\n");	fflush(lc->out);}Bool loadcompare_one(void *cbck, char *item_name, char *item_path){	GF_Err e;	GF_LoadCompare *lc = cbck;	u32 loadtime;	LoadData *ld;	if (lc->repeat_index == 0) {		GF_SAFEALLOC(ld, sizeof(LoadData));		gf_list_add(lc->data, ld);		strcpy(ld->filename, item_name);		e = get_size(lc, item_name, item_path, &ld->size);		if (e) return 1;		e = create_gz_file(lc, item_name, item_path, &ld->gz_size);		if (e) return 1;		e = create_laser_mp4(lc, item_name, item_path, &ld->track_size);		if (e) return 1;	} else {		LoadData *tmp;		u32 pos = 0;		ld = NULL;		while (tmp = gf_list_enum(lc->data, &pos)) {			if (!strcmp(tmp->filename, item_name)) {				ld = tmp;				break;			}		}		if (ld == NULL) return 1;	}	if (lc->type == SVG) {		/* GPAC XML loader */		e = gpacctx_load_file(lc, item_path, &loadtime);		if (e) return 1;		ld->gpacxml_loadtime += loadtime;		e = get_gz_loadtime(lc, item_name, item_path, &loadtime, 0);		if (e) return 1;		ld->gpacxml_gz_loadtime += loadtime;		/* LibXML and LibXML GZ loadings */		e = libxml_load_svg(lc, item_path, &loadtime);		if (e) return 1;		ld->libxml_loadtime += loadtime;		e = get_gz_loadtime(lc, item_name, item_path, &loadtime, 1);		if (e) return 1;		ld->libxml_gz_loadtime += loadtime;		/* MP4 Loading */		e = get_mp4_loadtime(lc, item_name, item_path, &loadtime);		if (e) return 1;		ld->track_loadtime += loadtime;/*		e = get_decoded_svg_loadtime_and_size(lc, item_name, item_path, &loadtime, &ld->decoded_size);		if (e) return 1;		ld->decoded_loadtime += loadtime;*/	} else if (lc->type == XMT) {		e = gpacctx_load_file(lc, item_path, &loadtime);		if (e) return 1;		ld->gpacxml_loadtime += loadtime;	}	if (!lc->spread_repeat) {		print_load_data(lc, ld);		free(ld);	}	return 0;}void usage() {	fprintf(stdout, "Compare LASeR and SVG encoding size and loading time\n");	fprintf(stdout, "usage: (-out output_result) (-single input.svg | -dir dir) (-nloads X) (-verbose X)\n");	fprintf(stdout, "defaults are: stdout, dir=. and X = 1");}int main(int argc, char **argv){	u32 i;	char *arg;	GF_LoadCompare lc;	Bool single = 0;	char *out = NULL;	char in[256] = ".";	fprintf(stdout, "LASeR and SVG Comparison tool\n");	memset(&lc, 0, sizeof(GF_LoadCompare));	lc.nbloads = 1;	lc.out = stdout;		for (i = 1; i < (u32) argc ; i++) {		arg = argv[i];		if (!stricmp(arg, "-out")) {			out = argv[i+1];			i++;		} else if (!stricmp(arg, "-single")) {			single = 1;			strcpy(in, argv[i+1]);			i++;		} else if (!stricmp(arg, "-dir")) {			strcpy(in, argv[i+1]);			i++;		} else if (!stricmp(arg, "-nloads")) {			lc.nbloads = (u32)atoi(argv[i+1]);			i++;		} else if (!stricmp(arg, "-regenerate")) {			lc.regenerate = 1;		} else if (!stricmp(arg, "-xmt")) {			lc.type = XMT;		} else if (!stricmp(arg, "-svg")) {			lc.type = SVG;		} else if (!stricmp(arg, "-spread_repeat")) {			lc.spread_repeat = 1;		} else if (!stricmp(arg, "-verbose")) {			lc.verbose = (u32)atoi(argv[i+1]);			i++;		} else {			usage();			return -1;		}		}	gf_sys_init();	if (out) lc.out = fopen(out, "wt");	if (!lc.out) {		fprintf(stderr, "Cannot open output file %s\n", out);		return -1;	}	if (lc.type == SVG) {		fprintf(lc.out,"File Name\tSVG Size\tSVG Load Time\tLibXML Load Time\tSVGZ Size\tSVGZ Load Time\tLibXML GZ Load Time\tMP4 Size\tMP4 Load Time\tDecoded SVG Size\tDecoded SVG Load Time\n");	} else if (lc.type == XMT) {		fprintf(lc.out,"File Name\tXMT Size\tXMT Load Time\tBT Size\tBT Load Time\n");	}	lc.data = gf_list_new();	if (single) {		LoadData *ld;		char *tmp = strrchr(in, GF_PATH_SEPARATOR);		loadcompare_one(&lc, tmp+1, in);		ld = gf_list_get(lc.data, 0);		print_load_data(&lc, ld);		free(ld);	} else {		if (lc.spread_repeat) {			for (lc.repeat_index = 0; lc.repeat_index < lc.nbloads; lc.repeat_index ++) {				if (lc.verbose) fprintf(stdout, "Loop %d\n", lc.repeat_index);				if (lc.type == SVG) {					gf_enum_directory(in, 0, loadcompare_one, &lc, "svg");				} else if (lc.type == XMT) {					gf_enum_directory(in, 0, loadcompare_one, &lc, "xmt");				}			}			for (i=0; i<gf_list_count(lc.data); i++) {				LoadData *ld = gf_list_get(lc.data, i);				print_load_data(&lc, ld);				free(ld);			}		} else {			if (lc.type == SVG) {				gf_enum_directory(in, 0, loadcompare_one, &lc, "svg");			} else if (lc.type == XMT) {				gf_enum_directory(in, 0, loadcompare_one, &lc, "xmt");			}		}	}	gf_list_del(lc.data);			if (lc.out) fclose(lc.out);	gf_sys_close();	return 0;}

⌨️ 快捷键说明

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