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

📄 main.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 4 页
字号:
void PrintWorldInfo(GF_Terminal *term){	u32 i;	const char *title;	GF_List *descs;	descs = gf_list_new();	title = gf_term_get_world_info(term, NULL, descs);	if (!title && !gf_list_count(descs)) {		fprintf(stdout, "No World Info available\n");	} else {		fprintf(stdout, "\t%s\n", title ? title : "No title available");		for (i=0; i<gf_list_count(descs); i++) {			char *str = gf_list_get(descs, i);			fprintf(stdout, "%s\n", str);		}	}	gf_list_del(descs);}void PrintODList(GF_Terminal *term){	ODInfo odi;	u32 i, count;	GF_ObjectManager *odm, *root_odm = gf_term_get_root_object(term);	if (!root_odm) return;	if (gf_term_get_object_info(term, root_odm, &odi) != GF_OK) return;	if (!odi.od) {		fprintf(stdout, "Service not attached\n");		return;	}	fprintf(stdout, "Currently loaded objects:\n");	fprintf(stdout, "\tRootOD ID %d\n", odi.od->objectDescriptorID);	count = gf_term_get_object_count(term, root_odm);	for (i=0; i<count; i++) {		odm = gf_term_get_object(term, root_odm, i);		if (!odm) break;		if (gf_term_get_object_info(term, odm, &odi) == GF_OK) 			fprintf(stdout, "\t\tOD %d - ID %d (%s)\n", i+1, odi.od->objectDescriptorID, 			(odi.od_type==GF_STREAM_VISUAL) ? "Video" : (odi.od_type==GF_STREAM_AUDIO) ? "Audio" : "Systems");	}}void ViewOD(GF_Terminal *term, u32 OD_ID){	ODInfo odi;	u32 i, j, count, d_enum,id;	GF_Err e;	char code[5];	NetStatCommand com;	GF_ObjectManager *odm, *root_odm = gf_term_get_root_object(term);	if (!root_odm) return;	odm = NULL;	if (!OD_ID) {		odm = root_odm;		if ((gf_term_get_object_info(term, odm, &odi) != GF_OK)) odm=NULL;	} else {		count = gf_term_get_object_count(term, root_odm);		for (i=0; i<count; i++) {			odm = gf_term_get_object(term, root_odm, i);			if (!odm) break;			if ((gf_term_get_object_info(term, odm, &odi) == GF_OK) && (odi.od->objectDescriptorID == OD_ID)) break;			odm = NULL;		}	}	if (!odm) {		fprintf(stdout, "cannot find OD with ID %d\n", OD_ID);		return;	}	if (!odi.od) {		fprintf(stdout, "Object %d not attached yet\n", OD_ID);		return;	}	if (!odi.od) {		fprintf(stdout, "Service not attached\n");		return;	}	if (odi.od->tag==GF_ODF_IOD_TAG) {		fprintf(stdout, "InitialObjectDescriptor %d\n", odi.od->objectDescriptorID);		fprintf(stdout, "Profiles and Levels: Scene %x - Graphics %x - Visual %x - Audio %x - OD %x\n", 			odi.scene_pl, odi.graphics_pl, odi.visual_pl, odi.audio_pl, odi.OD_pl);		fprintf(stdout, "Inline Profile Flag %d\n", odi.inline_pl);	} else {		fprintf(stdout, "ObjectDescriptor %d\n", odi.od->objectDescriptorID);	}	fprintf(stdout, "Object Duration: ");	if (odi.duration) {	  PrintTime((u32) (odi.duration*1000));	} else {	  fprintf(stdout, "unknown");	}	fprintf(stdout, "\n");	if (odi.owns_service) {		fprintf(stdout, "Service Handler: %s\n", odi.service_handler);		fprintf(stdout, "Service URL: %s\n", odi.service_url);	}			if (odi.codec_name) {		Float avg_dec_time;		switch (odi.od_type) {		case GF_STREAM_VISUAL:			fprintf(stdout, "Video Object: Width %d - Height %d\r\n", odi.width, odi.height);			fprintf(stdout, "Media Codec: %s\n", odi.codec_name);			if (odi.par) fprintf(stdout, "Pixel Aspect Ratio: %d:%d\n", (odi.par>>16)&0xFF, (odi.par)&0xFF);			break;		case GF_STREAM_AUDIO:			fprintf(stdout, "Audio Object: Sample Rate %d - %d channels\r\n", odi.sample_rate, odi.num_channels);			fprintf(stdout, "Media Codec: %s\n", odi.codec_name);			break;		case GF_STREAM_SCENE:		case GF_STREAM_PRIVATE_SCENE:			if (odi.width && odi.height) {				fprintf(stdout, "Scene Description - Width %d - Height %d\n", odi.width, odi.height);			} else {				fprintf(stdout, "Scene Description - no size specified\n");			}			fprintf(stdout, "Scene Codec: %s\n", odi.codec_name);			break;		case GF_STREAM_TEXT:			if (odi.width && odi.height) {				fprintf(stdout, "Text Object: Width %d - Height %d\n", odi.width, odi.height);			} else {				fprintf(stdout, "Text Object: No size specified\n");			}			fprintf(stdout, "Text Codec %s\n", odi.codec_name);			break;		}			avg_dec_time = 0;		if (odi.nb_dec_frames) { 			avg_dec_time = (Float) odi.total_dec_time; 			avg_dec_time /= odi.nb_dec_frames; 		}		fprintf(stdout, "\tBitrate over last second: %d kbps\n\tMax bitrate over one second: %d kbps\n\tAverage Decoding Time %.2f ms (%d max)\n\tTotal decoded frames %d\n", 			(u32) odi.avg_bitrate/1024, odi.max_bitrate/1024, avg_dec_time, odi.max_dec_time, odi.nb_dec_frames);	}	if (odi.protection) fprintf(stdout, "Encrypted Media%s\n", (odi.protection==2) ? " NOT UNLOCKED" : "");	count = gf_list_count(odi.od->ESDescriptors);	fprintf(stdout, "%d streams in OD\n", count);	for (i=0; i<count; i++) {		GF_ESD *esd = (GF_ESD *) gf_list_get(odi.od->ESDescriptors, i);		fprintf(stdout, "\nStream ID %d - Clock ID %d\n", esd->ESID, esd->OCRESID);		if (esd->dependsOnESID) fprintf(stdout, "\tDepends on Stream ID %d for decoding\n", esd->dependsOnESID);		switch (esd->decoderConfig->streamType) {		case GF_STREAM_OD: fprintf(stdout, "\tOD Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_OCR: fprintf(stdout, "\tOCR Stream\n"); break;		case GF_STREAM_SCENE: fprintf(stdout, "\tScene Description Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_VISUAL:			fprintf(stdout, "\tVisual Stream - media type: ");			switch (esd->decoderConfig->objectTypeIndication) {			case 0x20: fprintf(stdout, "MPEG-4\n"); break;			case 0x60: fprintf(stdout, "MPEG-2 Simple Profile\n"); break;			case 0x61: fprintf(stdout, "MPEG-2 Main Profile\n"); break;			case 0x62: fprintf(stdout, "MPEG-2 SNR Profile\n"); break;			case 0x63: fprintf(stdout, "MPEG-2 Spatial Profile\n"); break;			case 0x64: fprintf(stdout, "MPEG-2 High Profile\n"); break;			case 0x65: fprintf(stdout, "MPEG-2 422 Profile\n"); break;			case 0x6A: fprintf(stdout, "MPEG-1\n"); break;			case 0x6C: fprintf(stdout, "JPEG\n"); break;			case 0x6D: fprintf(stdout, "PNG\n"); break;			case 0x80:				memcpy(code, esd->decoderConfig->decoderSpecificInfo->data, 4);				code[4] = 0;				fprintf(stdout, "GPAC Intern (%s)\n", code);				break;			default:				fprintf(stdout, "Private Type (0x%x)\n", esd->decoderConfig->objectTypeIndication);				break;			}			break;		case GF_STREAM_AUDIO:			fprintf(stdout, "\tAudio Stream - media type: ");			switch (esd->decoderConfig->objectTypeIndication) {			case 0x40: fprintf(stdout, "MPEG-4\n"); break;			case 0x66: fprintf(stdout, "MPEG-2 AAC Main Profile\n"); break;			case 0x67: fprintf(stdout, "MPEG-2 AAC LowComplexity Profile\n"); break;			case 0x68: fprintf(stdout, "MPEG-2 AAC Scalable Sampling Rate Profile\n"); break;			case 0x69: fprintf(stdout, "MPEG-2 Audio\n"); break;			case 0x6B: fprintf(stdout, "MPEG-1 Audio\n"); break;			case 0xA0: fprintf(stdout, "EVRC Audio\n"); break;			case 0xA1: fprintf(stdout, "SMV Audio\n"); break;			case 0xE1: fprintf(stdout, "QCELP Audio\n"); break;			case 0x80:				memcpy(code, esd->decoderConfig->decoderSpecificInfo->data, 4);				code[4] = 0;				fprintf(stdout, "GPAC Intern (%s)\n", code);				break;			default:				fprintf(stdout, "Private Type (0x%x)\n", esd->decoderConfig->objectTypeIndication);				break;			}			break;		case GF_STREAM_MPEG7: fprintf(stdout, "\tMPEG-7 Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_IPMP: fprintf(stdout, "\tIPMP Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_OCI: fprintf(stdout, "\tOCI Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_MPEGJ: fprintf(stdout, "\tMPEGJ Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_INTERACT: fprintf(stdout, "\tUser Interaction Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		case GF_STREAM_TEXT: fprintf(stdout, "\tStreaming Text Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break;		default: fprintf(stdout, "Unknown Stream\r\n"); break;		}		fprintf(stdout, "\tBuffer Size %d\n\tAverage Bitrate %d bps\n\tMaximum Bitrate %d bps\n", esd->decoderConfig->bufferSizeDB, esd->decoderConfig->avgBitrate, esd->decoderConfig->maxBitrate);		if (esd->slConfig->predefined==SLPredef_SkipSL) {			fprintf(stdout, "\tNot using MPEG-4 Synchronization Layer\n");		} else {			fprintf(stdout, "\tStream Clock Resolution %d\n", esd->slConfig->timestampResolution);		}		if (esd->URLString) fprintf(stdout, "\tStream Location: %s\n", esd->URLString);		/*check language*/		if (esd->langDesc) {			u32 i=0;			char lan[4], *szLang;			lan[0] = esd->langDesc->langCode>>16;			lan[1] = (esd->langDesc->langCode>>8)&0xFF;			lan[2] = (esd->langDesc->langCode)&0xFF;			lan[3] = 0;			if ((lan[0]=='u') && (lan[1]=='n') && (lan[2]=='d')) szLang = "Undetermined";			else {				szLang = lan;				while (GF_ISO639_Lang[i]) {					if (GF_ISO639_Lang[i+2][0] && strstr(GF_ISO639_Lang[i+1], lan)) {						szLang = (char*) GF_ISO639_Lang[i];						break;					}					i+=3;				}			}			fprintf(stdout, "\tStream Language: %s\n", szLang);		}	}	fprintf(stdout, "\n");	/*check OCI (not everything interests us) - FIXME: support for unicode*/	count = gf_list_count(odi.od->OCIDescriptors);	if (count) {		fprintf(stdout, "%d Object Content Information descriptors in OD\n", count);		for (i=0; i<count; i++) {			GF_Descriptor *desc = (GF_Descriptor *) gf_list_get(odi.od->OCIDescriptors, i);			switch (desc->tag) {			case GF_ODF_SEGMENT_TAG:			{				GF_Segment *sd = (GF_Segment *) desc;				fprintf(stdout, "Segment Descriptor: Name: %s - start time %g sec - duration %g sec\n", sd->SegmentName, sd->startTime, sd->Duration);			}				break;			case GF_ODF_CC_NAME_TAG:			{				GF_CC_Name *ccn = (GF_CC_Name *)desc;				fprintf(stdout, "Content Creators:\n");				for (j=0; j<gf_list_count(ccn->ContentCreators); j++) {					GF_ContentCreatorInfo *ci = (GF_ContentCreatorInfo *) gf_list_get(ccn->ContentCreators, j);					if (!ci->isUTF8) continue;					fprintf(stdout, "\t%s\n", ci->contentCreatorName);				}			}				break;			case GF_ODF_SHORT_TEXT_TAG:				{					GF_ShortTextual *std = (GF_ShortTextual *)desc;					fprintf(stdout, "Description:\n\tEvent: %s\n\t%s\n", std->eventName, std->eventText);				}				break;			default:				break;			}		}		fprintf(stdout, "\n");	}	switch (odi.status) {	case 0: fprintf(stdout, "Stoped - "); break;	case 1: fprintf(stdout, "Playing - "); break;	case 2: fprintf(stdout, "Paused - "); break;	case 3: fprintf(stdout, "Not setup yet\n"); return;	default: fprintf(stdout, "Setup Failed\n"); return;	}	if (odi.buffer>=0) fprintf(stdout, "Buffer: %d ms - ", odi.buffer);	else fprintf(stdout, "Not buffering - ");	fprintf(stdout, "Clock drift: %d ms\n", odi.clock_drift);	if (odi.db_unit_count) fprintf(stdout, "%d AU in DB\n", odi.db_unit_count);	if (odi.cb_max_count) fprintf(stdout, "Composition Buffer: %d CU (%d max)\n", odi.cb_unit_count, odi.cb_max_count);	fprintf(stdout, "\n");	if (odi.owns_service) {		const char *url;		u32 done, total, bps;		d_enum = 0;		while (gf_term_get_download_info(term, odm, &d_enum, &url, NULL, &done, &total, &bps)) {			if (d_enum==1) fprintf(stdout, "Current Downloads in service:\n");			if (done && total) {				fprintf(stdout, "%s: %d / %d bytes (%.2f %%) - %.2f kBps\n", url, done, total, (100.0f*done)/total, ((Float)bps)/1024.0f);			} else {				fprintf(stdout, "%s: %.2f kbps\n", url, ((Float)8*bps)/1024.0f);			}		}		if (!d_enum) fprintf(stdout, "No Downloads in service\n");		fprintf(stdout, "\n");	}	d_enum = 0;	while (gf_term_get_channel_net_info(term, odm, &d_enum, &id, &com, &e)) {		if (e) continue;		if (!com.bw_down && !com.bw_up) continue;		fprintf(stdout, "Stream ID %d statistics:\n", id);		if (com.multiplex_port) {			fprintf(stdout, "\tMultiplex Port %d - multiplex ID %d\n", com.multiplex_port, com.port);		} else {			fprintf(stdout, "\tPort %d\n", com.port);		}		fprintf(stdout, "\tPacket Loss Percentage: %.4f\n", com.pck_loss_percentage);		fprintf(stdout, "\tDown Bandwidth: %d bps\n", com.bw_down);		if (com.bw_up) fprintf(stdout, "\tUp Bandwidth: %d bps\n", com.bw_up);		if (com.ctrl_port) {			if (com.multiplex_port) {				fprintf(stdout, "\tControl Multiplex Port: %d - Control Multiplex ID %d\n", com.multiplex_port, com.ctrl_port);			} else {				fprintf(stdout, "\tControl Port: %d\n", com.ctrl_port);			}			fprintf(stdout, "\tDown Bandwidth: %d bps\n", com.ctrl_bw_down);			fprintf(stdout, "\tUp Bandwidth: %d bps\n", com.ctrl_bw_up);		}		fprintf(stdout, "\n");	}}void PrintODTiming(GF_Terminal *term, GF_ObjectManager *odm){	ODInfo odi;	if (!odm) return;	if (gf_term_get_object_info(term, odm, &odi) != GF_OK) return;	if (!odi.od) {		fprintf(stdout, "Service not attached\n");		return;	}	fprintf(stdout, "OD %d: ", odi.od->objectDescriptorID);	switch (odi.status) {	case 1: fprintf(stdout, "Playing - "); break;	case 2: fprintf(stdout, "Paused - "); break;	default: fprintf(stdout, "Stoped - "); break;	}	if (odi.buffer>=0) fprintf(stdout, "Buffer: %d ms - ", odi.buffer);	else fprintf(stdout, "Not buffering - ");	fprintf(stdout, "Clock drift: %d ms", odi.clock_drift);	fprintf(stdout, " - time: ");	PrintTime((u32) (odi.current_time*1000));	fprintf(stdout, "\n");}void PrintODBuffer(GF_Terminal *term, GF_ObjectManager *odm){	Float avg_dec_time;	ODInfo odi;	if (!odm) return;	if (gf_term_get_object_info(term, odm, &odi) != GF_OK) return;	if (!odi.od) {		fprintf(stdout, "Service not attached\n");		return;	}	fprintf(stdout, "OD %d: ", odi.od->objectDescriptorID);	switch (odi.status) {	case 1: fprintf(stdout, "Playing"); break;	case 2: fprintf(stdout, "Paused"); break;	default: fprintf(stdout, "Stoped"); break;	}	if (odi.buffer>=0) fprintf(stdout, " - Buffer: %d ms", odi.buffer);	if (odi.db_unit_count) fprintf(stdout, " - DB: %d AU", odi.db_unit_count);	if (odi.cb_max_count) fprintf(stdout, " - CB: %d/%d CUs", odi.cb_unit_count, odi.cb_max_count);		fprintf(stdout, "\n * %d decoded frames - %d dropped frames\n", odi.nb_dec_frames, odi.nb_droped);	avg_dec_time = 0;	if (odi.nb_dec_frames) { avg_dec_time = (Float) odi.total_dec_time; avg_dec_time /= odi.nb_dec_frames; }	fprintf(stdout, " * Avg Bitrate %d kbps (%d max) - Avg Decoding Time %.2f ms (%d max)\n",								(u32) odi.avg_bitrate/1024, odi.max_bitrate/1024, avg_dec_time, odi.max_dec_time);}void ViewODs(GF_Terminal *term, Bool show_timing){	u32 i, count;	GF_ObjectManager *odm, *root_odm = gf_term_get_root_object(term);	if (!root_odm) return;	if (show_timing) {		PrintODTiming(term, root_odm);	} else {		PrintODBuffer(term, root_odm);	}	count = gf_term_get_object_count(term, root_odm);	for (i=0; i<count; i++) {		odm = gf_term_get_object(term, root_odm, i);		if (show_timing) {			PrintODTiming(term, odm);		} else {			PrintODBuffer(term, odm);		}	}	fprintf(stdout, "\n");}void PrintGPACConfig(){	u32 i, j, cfg_count, key_count;	char szName[200];	char *secName = NULL;	fprintf(stdout, "Enter section name (\"*\" for complete dump):\n");	scanf("%s", szName);	if (strcmp(szName, "*")) secName = szName;	fprintf(stdout, "\n\n*** GPAC Configuration ***\n\n");	cfg_count = gf_cfg_get_section_count(cfg_file);	for (i=0; i<cfg_count; i++) {		const char *sec = gf_cfg_get_section_name(cfg_file, i);		if (secName) {			if (stricmp(sec, secName)) continue;		} else {			if (!stricmp(sec, "General")) continue;			if (!stricmp(sec, "MimeTypes")) continue;			if (!stricmp(sec, "RecentFiles")) continue;		}		fprintf(stdout, "[%s]\n", sec);		key_count = gf_cfg_get_key_count(cfg_file, sec);		for (j=0; j<key_count; j++) {			const char *key = gf_cfg_get_key_name(cfg_file, sec, j);			const char *val = gf_cfg_get_key(cfg_file, sec, key);			fprintf(stdout, "%s=%s\n", key, val);		}		fprintf(stdout, "\n");	}}

⌨️ 快捷键说明

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