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

📄 parse_playback_cmdline.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 2 页
字号:
#define _LARGEFILE64_SOURCE 1 // Required for large files (> 4GB)#include "sample_os.h"#define ALLOW_OS_CODE 1#include "../rua/include/rua.h"#include "../dcc/include/dcc.h"#include "common.h"// to enable or disable the debug messages of this source file, put 1 or 0 below#if 0#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endifextern int verbose_stdout;extern int verbose_stderr;RMbool manutest = FALSE;void show_playback_options(void){	fprintf(stderr, "PLAYBACK OPTIONS (default values inside brackets)\n"		"\t-m chip: Selects the board number [0]\n"		"\t-L count: Loops the file count times [1]\n"		"\t-l: Loops the file infinitely [FALSE]\n"		"\t-waitexit: application doesn't stop and exit until q key is pressed\n"		"\t-data mode: selects which streams to send to decode: n,a,v,s (n=none) [avs]\n"		"\t-ts mode: selects which streams to send PTS to decode: n,a,v,s (n=none) [avs]\n"		"\t-save mode: selects which streams to save into file: n,a,v,s (n=none) [n]\n"		"\t            mode: avs, av, a, vs, v, n\n"		"\t-savems mode: same as -save but outputs elementary file with embedded pts and frame_size data\n"		"\t-speed N M: set the speed factor to N/M [1 1]\n"		"\t-dram controller: sets the dram controller to use [0]\n" 		"\t-manutest: maunufacture testing mode\n"		"\t-pause: starts playback in pause state\n"		"\t-bcc filename: use the BCC file filename [NULL]\n"		"\t-stcdrift: enable correction of STC-to-PCR drift (SPI only)\n"		"\t-stcdbg n: level of debug print [0]..3\n"		"\t-delay time: set delay in ms for audio, video timers relative to stc timer [0]\n"		"\t-dmapool count log2_size: sets the count and the log2 size of the dma pool.\n"		"\t                          Default is application dependent.\n"		"\t-disk_ctrl level: minimum number of buffer when reactivation of disk must be done.\n"		"\t-prebuf size: maximum size in kB read from media for prebuffering.\n"		"\t-sat: send audio while in trickmodes [false]\n"		"\t-past: play any supported track [disabled]; otherwise video track must have a known codec\n"		"\t-noucode: do not load microcode [FALSE]\n"		"\t-STCid value: selects the STC ID to use [0]\n"		"\t-STC_initial_value value: sets STC initial value before reading stream (allows black frame in prebuffering mode)]\n"		"\t-far <value>: fast audio recovery after trickmodes (performs a seek when resuming from trickmodes) [0] 1\n"		"\t-dontSendMPEG4pts: dont send video pts for mpeg4/h264 encoded AVI files\n"		);}static RMuint64 g_t = 0;static RMuint64 HDsleepTime = 0;static RMuint64 HDrunTime = 0;static RMstatus default_disk_ctrl_callback(const enum disk_control_action action){	RMuint64 t;	RMuint64 diff;	t = RMGetTimeInMicroSeconds();	if(!g_t)		g_t = t;	diff = t - g_t;	fprintf(stderr, "---------------------------------------\n");	if(action == DISK_CONTROL_ACTION_SLEEP) {		HDrunTime += diff;		fprintf(stderr, "SLEEP!! SLEEP!! SLEEP!! SLEEP!! SLEEP!!\n");		fprintf(stderr, " wakeup time       %10llu us\n\n", diff);	}	else {		HDsleepTime += diff;		fprintf(stderr, "WAKE UP!! WAKE UP!! WAKE UP!! WAKE UP!!\n");		fprintf(stderr, " sleep time        %10llu us\n\n", diff);	}		fprintf(stderr, " total wakeup time %10llu us\n", HDrunTime);	fprintf(stderr, " total sleep time  %10llu us\n", HDsleepTime);	if(HDrunTime)		fprintf(stderr, " sleep/run ratio   %10llu\n", HDsleepTime/HDrunTime);	fprintf(stderr, "---------------------------------------\n");	fflush(stderr);	g_t = t;	return RM_OK;}RMstatus init_playback_options(struct playback_cmdline *options){	options->filename = NULL;	options->duration = 0;	options->chip_num = 0;	options->noucode = FALSE;	options->STCid = 0;	options->STC_initial_value=0;	options->loop_count = 1;	options->infinite_loop = FALSE;	options->waitexit = FALSE;	options->send_audio = TRUE;	options->send_video = TRUE;	options->send_spu = TRUE;	options->send_audio_pts = TRUE;	options->send_video_pts = TRUE;	options->send_spu_pts = TRUE;	options->save_audio = FALSE;	options->save_video = FALSE;	options->save_spu = FALSE;	options->savems = FALSE;	options->speed_N = 1;	options->speed_M = 1;	options->f_video_data = -1;	options->f_video_pts = -1;	options->f_audio_data = -1;	options->f_audio_pts = -1;	options->f_spu_data = -1;	options->f_spu_pts = -1;	options->dram = 0;	options->start_ms = 0;	options->start_pause = FALSE;	options->bcc_filename = NULL;		options->video_byte_count = 0;	options->audio_byte_count = 0;	options->spu_byte_count = 0;		options->stc_compensation = FALSE;	options->stc_comp_debug = 0;	options->require_video_audio = TRUE;	options->audio_delay_ms = 0;	options->video_delay_ms = 0;		options->spi = FALSE;	options->serial_spi = FALSE;	options->dmapool_count = 0;	options->dmapool_log2size = 0;		options->prebuf_max = 0;	options->disk_ctrl_state = DISK_CONTROL_STATE_DISABLE;	options->disk_ctrl_low_level = 0;	options->disk_ctrl_callback = default_disk_ctrl_callback;	options->disk_ctrl_max_mem = 0;	options->disk_ctrl_log2_block_size = 0;	options->max_usable_RUA_mem = 0;	options->send_audio_trickmode = FALSE;	options->dontSendMPEG4pts = FALSE;	options->fast_audio_recovery = TRUE;	return RM_OK;}RMstatus parse_playback_cmdline(int argc, char **argv, int *index, struct playback_cmdline *options){	RMstatus err = RM_PENDING;	int i = *index;		RMDBGLOG((LOCALDBG, "parsing option[%lu]='%s'\n", i, argv[i]));	if (! strcmp(argv[i], "-m")) {		if (argc > i+1) {			options->chip_num = strtol(argv[i+1], NULL, 10);			i+=2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-L")) {		if (argc > i+1) {			options->loop_count = strtol(argv[i+1], NULL, 10);			i+=2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-l")) {		options->infinite_loop = TRUE;		i++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-waitexit")) {		options->waitexit = TRUE;		i++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-noucode")) {		options->noucode = TRUE;		i++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-STCid")) {		if (argc > i+1) {			options->STCid = strtol(argv[i+1], NULL, 10);			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-STC_initial_value")) {		if (argc > i+1) {			options->STC_initial_value = strtol(argv[i+1], NULL, 10);			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	} 	else if (! strcmp(argv[i], "-manutest")) { 		manutest = options->manutest = TRUE; 		verbose_stdout = verbose_stderr = 0;		i++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-data")) {		if (argc > i+1) {			RMuint32 n = 0;						options->send_audio = FALSE;			options->send_video = FALSE;			options->send_spu = FALSE;			err = RM_OK;			for (n=0 ; n<strlen(argv[i+1]) ; n++) {				switch (argv[i+1][n]) {				case 'a':					options->send_audio = TRUE;					break;				case 'v':					options->send_video = TRUE;					break;				case 's':					options->send_spu = TRUE;					break;				case 'n':					break;				default:					err = RM_ERROR;				}			}			i += 2;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-ts")) {		if (argc > i+1) {			RMuint32 n = 0;						options->send_audio_pts = FALSE;			options->send_video_pts = FALSE;			options->send_spu_pts = FALSE;			err = RM_OK;			for (n=0 ; n<strlen(argv[i+1]) ; n++) {				switch (argv[i+1][n]) {				case 'a':					options->send_audio_pts = TRUE;					break;				case 'v':					options->send_video_pts = TRUE;					break;				case 's':					options->send_spu_pts = TRUE;					break;				case 'n':					break;				default:					err = RM_ERROR;				}			}			i += 2;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-save")) {		if (argc > i+1) {			RMuint32 n = 0;			options->savems = FALSE;						options->save_audio = FALSE;			options->save_video = FALSE;			options->save_spu = FALSE;			err = RM_OK;			for (n=0 ; n<strlen(argv[i+1]) ; n++) {				switch (argv[i+1][n]) {				case 'a':					options->save_audio = TRUE;					break;				case 'v':					options->save_video = TRUE;					break;				case 's':					options->save_spu = TRUE;					break;				case 'n':					break;				default:					err = RM_ERROR;				}			}			i += 2;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-savems")) {		if (argc > i+1) {			RMuint32 n = 0;						options->savems = FALSE;			options->save_audio = FALSE;			options->save_video = FALSE;			options->save_spu = FALSE;			err = RM_OK;			for (n=0 ; n<strlen(argv[i+1]) ; n++) {				switch (argv[i+1][n]) {				case 'a':					options->save_audio = TRUE;					options->savems = TRUE;					break;				case 'v':					options->save_video = TRUE;					options->savems = TRUE;					break;				case 's':					options->save_spu = TRUE;					options->savems = TRUE;					break;				case 'n':					break;				default:					err = RM_ERROR;				}			}			i += 2;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-speed")) {		if (argc > i+2) {			options->speed_N = strtol(argv[i+1], NULL, 10);			options->speed_M = strtol(argv[i+2], NULL, 10);			i += 3;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-dram")) {		if (argc > i+1) {			options->dram = strtol(argv[i+1], NULL, 10);			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-pause")) {		options->start_pause = TRUE;		i ++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-dontSendMPEG4pts")) {		options->dontSendMPEG4pts = TRUE;		i ++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-far")) {		RMuint32 dummy;				if (argc > i+1) {			dummy = strtol(argv[i+1], NULL, 10);			i += 2;						if (!dummy)				options->fast_audio_recovery = FALSE;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-bcc")) {		if (argc > i+1) {			options->bcc_filename = argv[i+1];			i += 2;			err = RM_OK;		}		else {			err = RM_ERROR;		}	}	else if (! strcmp(argv[i], "-stcdrift")) {		options->stc_compensation = TRUE;		i ++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-stcdbg")) {		if (argc > i+1) {			options->stc_comp_debug = strtol(argv[i+1], NULL, 10);			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-delay")) {		if (argc > i+1) {			options->video_delay_ms = strtol(argv[i+1], NULL, 10);			options->audio_delay_ms = options->video_delay_ms;			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-dmapool")) {		if (argc > i+2) {			options->dmapool_count = strtol(argv[i+1], NULL, 10);			options->dmapool_log2size = strtol(argv[i+2], NULL, 10);			i += 3;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-disk_ctrl")) {		if (argc > i+1) {			options->disk_ctrl_state = DISK_CONTROL_STATE_SLEEPING;			options->disk_ctrl_low_level = strtol(argv[i+1], NULL, 10);			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-prebuf")) {		if (argc > i+1) {			options->prebuf_max = strtol(argv[i+1], NULL, 10);			options->prebuf_max *= 1024;			i += 2;			err = RM_OK;		}		else			err = RM_ERROR;	}	else if (! strcmp(argv[i], "-sat")) {		options->send_audio_trickmode = TRUE;		i ++;		err = RM_OK;	}	else if (! strcmp(argv[i], "-past")) {

⌨️ 快捷键说明

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