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

📄 mono.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 3 页
字号:
		break;	case eAudioFormat_UNKNOWN:		audio_type_string = "Unknown";		break;	}	prop.lineWidth = 0;	prop.fgColor = MONO_DEFAULT_RECT_FORGROUND_COLOR;	RMFRTKDrawRect(mono_opt.rtk, &mono_opt.osd_rect, &prop);	point.x = 64;	point.y = 90;	RMFRTKDrawString(mono_opt.rtk, "Now playing file:", &point, &info_face, NULL);	point.y += info_face.scale;	RMFRTKDrawString(mono_opt.rtk, basename, &point, &data_face, NULL);	point.y += data_face.scale;	RMFRTKDrawString(mono_opt.rtk, "Audio Type:", &point, &info_face, NULL);	point.y += info_face.scale;	RMFRTKDrawString(mono_opt.rtk, audio_type_string, &point, &data_face, NULL);	point.y += data_face.scale;	/* for mp3, try to display the id3 tag fields */	if((stream_info->system_type == RM_SYSTEM_ELEMENTARY_AUDIO) &&	   (stream_info->audio_type == eAudioFormat_MPEG1_LAYER3)){		RMID3v1Tag id3_tag;		RMuint8 buf[1024];		RMuint32 count;		RMfile file;		struct stream_options_s stream_options;		init_stream_options(&stream_options);			file = open_stream(filename, RM_FILE_OPEN_READ, &stream_options);		if (file == NULL) {			RMDBGLOG((ENABLE, "Cannot open file %s\n", filename));			return RM_ERROR;		}			if (RMSeekFile(file, -512, RM_FILE_SEEK_END) != RM_OK) {			RMDBGLOG((ENABLE, "seeking file to the last 1Kb\n"));			return RM_ERROR;		}		err = RMReadFile(file, buf, 512, &count);		if(RMFAILED(err)){			RMDBGLOG((ENABLE, "Cannot read form file\n"));			return RM_ERROR;		}		RMCloseFile(file);		err = RMReadID3v1(buf, 512, &id3_tag);		if(err == RM_OK){			RMFRTKDrawString(mono_opt.rtk, "Song Title:", &point, &info_face, NULL);			point.y += info_face.scale;			RMFRTKDrawString(mono_opt.rtk, id3_tag.Title, &point, &data_face, NULL);			point.y += data_face.scale;			RMFRTKDrawString(mono_opt.rtk, "Artist:", &point, &info_face, NULL);			point.y += info_face.scale;			RMFRTKDrawString(mono_opt.rtk, id3_tag.Artist, &point, &data_face, NULL);			point.y += data_face.scale;			RMFRTKDrawString(mono_opt.rtk, "Album:", &point, &info_face, NULL);			point.y += info_face.scale;			RMFRTKDrawString(mono_opt.rtk, id3_tag.Album, &point, &data_face, NULL);			point.y += data_face.scale;			RMFRTKDrawString(mono_opt.rtk, "Comment:", &point, &info_face, NULL);			point.y += info_face.scale;			RMFRTKDrawString(mono_opt.rtk, id3_tag.Comment, &point, &data_face, NULL);			point.y += data_face.scale;		}		if(err == RM_OK){			fprintf(stderr, "title %s\nartist %s\nalbum %s\ntrack %d\nyear %s\ngenre %d\ncomment %s\n", 				id3_tag.Title, 				id3_tag.Artist, 				id3_tag.Album,				id3_tag.Track, 				id3_tag.Year, 				id3_tag.Genre, 				id3_tag.Comment);		}	}	return RM_OK;}	static inline void gui_show_filename(){	RtkPoint point;	RtkProp prop;	RMascii filename_copy[256], *basename,  *tmp;		/* erase last filename */	prop.lineWidth = 0;	prop.fgColor = MONO_DEFAULT_RECT_FORGROUND_COLOR;	RMFRTKDrawRect(mono_opt.rtk, &mono_opt.osd_rect, &prop);	RMCopyAscii(filename_copy, play_opt.filename); /* if too long, will need to be modified */	basename = filename_copy;	while(RMFindAsciiCharacter (basename, '/', &tmp))		basename = ++tmp;	if(RMasciiLength(basename)>30){		basename[27] = '\0';		RMAppendAscii (basename, "...");	}	point.x = 64;	point.y = 300;	RMFRTKDrawString(mono_opt.rtk , basename, &point, &data_face, NULL);	RMDBGLOG((MONODBG, "-----> about to play %s\n", basename));	point.x = 64;	point.y = 256;	RMFRTKDrawString(mono_opt.rtk , "Press q to quit, N to skip, p to play:", &point,  &info_face, NULL);}static inline RMstatus gui_init_osd(){	Rtk86Handle handle;	RMstatus err;	struct osd_picture_info osd_picture = {0};	osd_picture.scaler = 0;	osd_picture.route = DCCRoute_Main;	osd_picture.enable = TRUE;	osd_picture.filename = "mono.bmp";	osd_picture.dramblock = 0;	osd_picture.alpha = 128;	osd_picture.alpha_merge = FALSE;	osd_picture.zoom = FALSE;	osd_picture.color_space = EMhwlibColorSpace_None;	osd_picture.orientation = FRTop_FCLeft;	set_default_out_window(&(osd_picture.source_window));	set_default_out_window(&(osd_picture.output_window));		err = DCCGetScalerModuleID(dcc_info.pDCC, osd_picture.route, DCCSurface_OSD, osd_picture.scaler, &(mono_opt.osd_scaler));	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot get surface to display OSD source %d\n", err));		return err;	}			err = apply_osd_picture(&dcc_info, &osd_picture, NULL, &(mono_opt.osd_source));	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot open osd source %s\n", RMstatusToString(err)));		return err;	}	handle.pOSDSource = mono_opt.osd_source;	handle.pRUA = dcc_info.pRUA;	mono_opt.rtk = RMFRTKOpen(&handle);	{		RMnonAscii *naname = RMnonAsciiFromAscii("Vera.ttf");		err = RMFRTKLoadFontFile( mono_opt.rtk, naname);		RMFreeNonAscii(naname);		if (RMFAILED(err)) {			fprintf(stderr, "Cannot load font file \'Vera.ttf\': %s\n", RMstatusToString(err));			return err;		}	}	mono_opt.osd_rect.x = 50;	mono_opt.osd_rect.y = 90;	mono_opt.osd_rect.width = 620;	mono_opt.osd_rect.height = 350;	osd_enabled = TRUE;	return RM_OK;}static inline RMstatus init_dcc_info(){	RMstatus err;	err = RUACreateInstance(&(dcc_info.pRUA), play_opt.chip_num);	if (RMFAILED(err)) {		RMDBGLOG((MONODBG, "Error creating RUA instance! %d\n", err));		return err;	}	err = DCCOpen(dcc_info.pRUA, &(dcc_info.pDCC));	if (RMFAILED(err)) {		RMDBGLOG((MONODBG, "Error Opening DCC! %d\n", err));		return err;	}	if (!play_opt.noucode) {		err = DCCInitMicroCodeEx(dcc_info.pDCC, disp_opt.init_mode);		if (RMFAILED(err)) {			RMDBGLOG((MONODBG, "Cannot initialize microcode %d\n", err));			return err;		}	}	dcc_info.chip_num = play_opt.chip_num;	dcc_info.route = DCCRoute_Main;	// comment the following line to compile this file under em8620branch	disp_opt.dh_info->pDH = NULL;	return RM_OK;}static void show_usage(char *progname){	fprintf(stderr, "MONO OPTIONS\n"		"\t-forceSD: SD profile used instead of HD\n"		"\t-R: If filename is a directory, play its sub-directories recursively\n"		"\t-nogui: don't display the GUI (defaut is yes)\n"		"\t-demux <soft|hard|auto>: Set demuxing method (default is auto)\n"		"\t-jpeg <soft|hard|auto>: Set jpeg decompression method (default is auto)\n"		"\t-cc <tv|soft|608soft|708soft>: Selects the closed caption display mode.\n"		"\t-sat: send audio while in trickmode (default is not to send it)\n"		"\t-displayerror <threshold>: sets display error threshold [0]\n"		"\t-err_prop_threshold <threshold> : sets anchor error propagation threshold\n"		"\t-err_prop_length <length> : sets anchor error propagation length\n"		);	show_playback_options();	show_display_options();	fprintf(stderr, "------------------------------------------------m-0-n-o-----\n");	fprintf(stderr, "Minimum cmd line: %s filename [remote control device (Ex: /dev/ttyS0)] \n", progname);	fprintf(stderr, "------------------------------------------------------------\n");	exit(1);}static void parse_cmdline(int argc, char *argv[], struct mono_info *opts){	int i;	RMstatus err;	// FIXME: temp soln to "internal error--unrecognizable insn"	// moved 'app_params.noDolby = FALSE' from main() to here	opts->noDolby = FALSE;	if (argc < 2) 		show_usage(argv[0]);	i = 1;	while ((argc > i)) {		/* RMDBGLOG((ENABLE,"Arg %d : %s\n", i, argv[i])); */		err = RM_OK;		if (argv[i][0] != '-') {			if (filename == NULL) {				filename = argv[i];				i++;			}			else if (remote_dev == NULL) {				remote_dev = argv[i];				i++;			}			else				show_usage(argv[0]);		}		else if ( ! strcmp(argv[i], "-R")) {			mono_opt.recurse_dirs = TRUE;			i++;		}		else if ( ! strcmp(argv[i], "-nogui")) {			mono_opt.use_gui = FALSE;			i++;		}		else if ( ! strcmp(argv[i], "-automode")) {			setMonoAuto();	// set to auto mode			i++;		}		else if ( ! strcmp(argv[i], "-use_multiple_audio")) {			if (argc > i+1) {				RMuint32 instances;				RMasciiToUInt32(argv[i+1], &instances);				i += 2;				if ((instances > MAX_AUDIO_DECODER_INSTANCES) || (instances <= 0))					show_usage(argv[0]);				mono_opt.audio_instances = instances;			}			else				show_usage(argv[0]);		}		else if ( ! strcmp(argv[i], "-demux")) {			if (argc > i+1) {				if( ! strcmp(argv[i+1], "soft")) {					mono_opt.demux_decode = mono_decode_soft;				}				else if( ! strcmp(argv[i+1], "hard")) {					mono_opt.demux_decode = mono_decode_hard;				}				else if( ! strcmp(argv[i+1], "auto")) {					mono_opt.demux_decode = mono_decode_auto;				}				else{					show_usage(argv[0]);				}				i+=2;			}		}		else if ( ! strcmp(argv[i], "-jpeg")) {			RMDBGLOG((ENABLE, "jpeg, and next is %s\n", argv[i+1]));			if (argc > i+1) {				if( ! strcmp(argv[i+1], "soft")) {					mono_opt.jpeg_decode = mono_decode_soft;				}				else if( ! strcmp(argv[i+1], "hard")) {					mono_opt.jpeg_decode = mono_decode_hard;				}				else if( ! strcmp(argv[i+1], "auto")) {					mono_opt.jpeg_decode = mono_decode_auto;				}				else{					show_usage(argv[0]);				}				i+=2;			}			else{				show_usage(argv[0]);			}		}		else if ( ! strcmp(argv[i], "-sw")) {			mono_opt.demux_decode = mono_decode_soft;			i++;		}		else if ( ! strcmp(argv[i], "-forceSD")) {			mono_opt.force_sd = TRUE;			i++;		}		else if (! strcmp(argv[i], "-nodolby")) {			 opts->noDolby = TRUE; 			 i++;		}		else if ( ! strcmp(argv[i], "-past")) {			opts->play_opt->require_video_audio = FALSE;			i++;		}		else if ( ! strcmp(argv[i], "-disk_control")) {			/* from bug #4005 comment #18:			   for disk_ctrl_low_level i assume that i takes about 1 second to resume the harddisk, which gives 16			   blocks at a blocksize of 128 kb at 2 mb/s stream.			*/			opts->play_opt->disk_ctrl_state = DISK_CONTROL_STATE_RUNNING;			opts->play_opt->disk_ctrl_low_level = 16;			opts->play_opt->prebuf_max = 1024 * 1024;			fprintf(stderr, ">> disk control enabled, low level is %lu, prebuf_max is %lu bytes\n",				opts->play_opt->disk_ctrl_low_level,				opts->play_opt->prebuf_max);			i++;		}		else if ( ! strcmp(argv[i], "-max_mem")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(opts->play_opt->disk_ctrl_max_mem));				opts->play_opt->disk_ctrl_max_mem *= 1024;				i += 2;			}			else				show_usage(argv[0]);		}		else if ( ! strcmp(argv[i], "-max_usable_RUA_mem")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(opts->play_opt->max_usable_RUA_mem));				opts->play_opt->max_usable_RUA_mem *= 1024;				i += 2;			}			else				show_usage(argv[0]);		}		else if ( ! strcmp(argv[i], "-block_size")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(opts->play_opt->disk_ctrl_log2_block_size));				i += 2;			}			else				show_usage(argv[0]);		}		else if (! strcmp(argv[i], "-cc")) {			if (argc > i+1) {				if (RMCompareAscii(argv[i+1], "tv")) {					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 0;				}				else if (RMCompareAscii(argv[i+1], "soft") || 					 RMCompareAscii(argv[i+1], "608soft") ||					 RMCompareAscii(argv[i+1], "cc1")) {					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 1;					mono_opt.cc_select = EMhwlibCCSelect_CC1;				}				else if(RMCompareAscii(argv[i+1], "cc2") ){					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 1;					mono_opt.cc_select = EMhwlibCCSelect_CC2;				}				else if(RMCompareAscii(argv[i+1], "cc3") ){					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 1;					mono_opt.cc_select = EMhwlibCCSelect_CC3;				}				else if(RMCompareAscii(argv[i+1], "cc4") ){					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 1;					mono_opt.cc_select = EMhwlibCCSelect_CC4;				}				else if(RMCompareAscii(argv[i+1], "708soft")) {					mono_opt.display_cc = TRUE;					mono_opt.use_soft_cc_decoder = 2;				}				else if(RMCompareAscii(argv[i+1], "off")) {					mono_opt.display_cc = FALSE;				}				else {					show_usage(argv[0]);				}								i += 2;			}			else 				show_usage(argv[0]);		}		else if (!strcmp(argv[i], "-displayerror")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(mono_opt.display_error_threshold));				i += 2;			}			else 				show_usage(argv[0]);		}		else if (!strcmp(argv[i], "-err_prop_threshold")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(mono_opt.AnchorErrPropagationThreshold));				i += 2;			}			else 				show_usage(argv[0]);		}		else if (!strcmp(argv[i], "-err_prop_length")) {			if (argc > i+1) {				RMasciiToUInt32(argv[i+1], &(mono_opt.AnchorErrPropagationLength));				i += 2;			}			else 				show_usage(argv[0]);		}		else {			err = parse_playback_cmdline(argc, argv, &i, &play_opt);			if (err == RM_ERROR)				show_usage(argv[0]);			if (err != RM_PENDING)				continue;			err = parse_display_cmdline(argc, argv, &i, &disp_opt);			if (err == RM_ERROR)				show_usage(argv[0]);			if (err != RM_PENDING)				continue;			err = parse_video_cmdline(argc, argv, &i, &video_opt);			if (err == RM_ERROR)				show_usage(argv[0]);			if (err != RM_PENDING)				continue;		}				if (err == RM_PENDING) 			show_usage(argv[0]);			}	if (filename == NULL){		show_usage(argv[0]);	}	if (opts->play_opt->disk_ctrl_low_level) {		if ((!opts->play_opt->disk_ctrl_max_mem) || (!opts->play_opt->disk_ctrl_log2_block_size)) {			    fprintf(stderr, "**** disk control enabled, but not all required parameters where specified!\n\n\n\n");			    show_usage(argv[0]);		}	}

⌨️ 快捷键说明

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