亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? play_vdemux.c

?? SigmDesign SMP8634 media decode chip development SDK
?? C
?? 第 1 頁 / 共 5 頁
字號:
		pSendContext->spu_repack_offset = repack_offset;		pSendContext->spu_repack_size = repack_size;		pSendContext->spu_repack_pts = repack_pts;		pSendContext->spu_repack_pts_valid = repack_pts_valid;		break;	default:		RMDBGLOG((ENABLE, "Invalid data type %d\n", dataType));		return;	} return_from_callback:		return;}static void AC3DTSCallback(RMuint8 numberOfFrameHeaders, RMuint16 firstAccessUnitPointer, void *context){	struct demux_context *pSendContext = (struct demux_context *) context;	//RMDBGPRINT((ENABLE, "AC3DTSCallback: firstAccessUnitPointer= %x\n", firstAccessUnitPointer));	pSendContext->audio_first_access_unit_pointer_valid = TRUE;	pSendContext->audio_first_access_unit_pointer = firstAccessUnitPointer;	return;}static void LPCMCallback(RMuint8 numberOfFrameHeaders, RMuint16 firstAccessUnitPointer, RMuint32 frequency,			 RMuint8 numberOfChannels, RMvdemuxQuantization quantizationWordLength, void *context){	struct demux_context *pSendContext = (struct demux_context *) context;	//RMDBGPRINT((ENABLE, "LPCMCallback: firstAccessUnitPointer= %x\n", firstAccessUnitPointer));	pSendContext->audio_first_access_unit_pointer_valid = TRUE;	pSendContext->audio_first_access_unit_pointer = firstAccessUnitPointer;	return;}static void aobPcm_callback (RMuint16 firstAccessUnitPointer, 			     RMvdemuxQuantization quantizationGr1,			     RMvdemuxQuantization quantizationGr2,			     RMuint32 samplingFreqGr1,			     RMuint32 samplingFreqGr2,			     RMuint8 bitShift,			     RMuint8 channelAssign,			     void * context){}	static void mlp_callback (RMuint16 firstAccessUnitPointer, 			  RMuint8 forwardAUSearchPointer,			  RMuint8 backwardAUSearchPointer,			  void *context){}static RMstatus WaitForEOS(struct demux_context *context, struct RM_PSM_Actions *pActions){	RMuint32 eos_bit_field = 0;	NTimes++;	fprintf(stderr, "File ready %ld times, waiting for EOS\n", NTimes);	if (context->video_byte_counter > 0) {		eos_bit_field |= EOS_BIT_FIELD_VIDEO;	}	if (context->audio_byte_counter > 0) {		eos_bit_field |= EOS_BIT_FIELD_AUDIO;	}		return WaitForEOSWithCommand(context->PSMcontext, &(context->dcc_info), pActions, eos_bit_field);}// thread functionvoid *main_vdemux( void * context_data ){	struct display_context disp_info;	struct DCCVideoSource *pVideoSource = NULL;	struct DCCAudioSource *pAudioSource = NULL;	struct RUABufferPool *pDMA = NULL;	ExternalRMvdemux demux;	struct demux_context context;	RMstatus err;	RMfile file = NULL;	RMuint32 videoscaler_id = 0;	RMuint8 *repack_buf = (RMuint8 *) NULL;		void **dmabuffer_array = (void **) NULL;	RMuint32 dmabuffer_index = 0;	RMuint32 error = 0;	struct RM_PSM_Context PSMContext;	RMMemset(&context, 0, sizeof(struct demux_context));	{		struct context_per_task * task = (struct context_per_task *)context_data;				dcc_info.disp_info = &disp_info;		play_opt = task->play_opt;		video_opt = task->video_opt;		audio_opt = task->audio_opt;		demux_opt = task->demux_opt;		disp_opt = task->disp_opt;		dcc_info.pRUA = task->pRUA;		dcc_info.pDCC = task->dcc_info->pDCC;		dcc_info.disp_info = NULL;		videoscaler_id = 0; //mono->video_scaler;		dcc_info.route = DCCRoute_Main;				RMDBGLOG((ENABLE, "created thread play_opt %lx, video_opt %lx, audio_opt %lx, disp_opt %lx, videoscaler %d\n", 			play_opt, video_opt, audio_opt, demux_opt, videoscaler_id ));				RMMemcpy( &dcc_info, task->dcc_info, sizeof( struct dcc_context ) );		pVideoSource = task->dcc_info->pVideoSource;		pAudioSource = task->dcc_info->pMultipleAudioSource->AudioSourceHandles[0].pAudioSource;		dcc_info.pAudioSource = dcc_info.pMultipleAudioSource->AudioSourceHandles[0].pAudioSource;				// the software demux thread has its own demux context with the main thread				context.pRUA = dcc_info.pRUA; // share the same rua,  however use separate pDMA for transfer		context.dcc_info = &dcc_info; // separate copy of dcc		context.PSMcontext = &PSMContext; 				play_opt->prebuf_max = 1*1024*1024;  // force a limit on prebuffering		context.repack_sample = TRUE; 		demux_opt->repack_sample = TRUE;	}	// create software demux	if(demux_opt->system_type != RM_SYSTEM_UNKNOWN) {		err = RMCreateVdemux(&demux);		if (RMFAILED(err)) {			RMDBGLOG((ENABLE, "Cannot create demux %d\n", err));			goto exit_with_error;		}		//RMvdemuxSetType(demux, demux_opt->system_type);		RMvdemuxSetType(demux, RM_SYSTEM_MPEG2_TRANSPORT);		RMDBGLOG((ENABLE, "Cannot set system type %d.  ", err, demux_opt->system_type ));		RMDBGLOG((ENABLE, "Force system type to %d\n", err, RM_SYSTEM_MPEG2_TRANSPORT ));				RMvdemuxSetCallbackData(demux, PESCallback, &context);		RMvdemuxSetAudioCallbacks(demux, AC3DTSCallback, LPCMCallback, aobPcm_callback, mlp_callback);	}	else {		demux = (ExternalRMvdemux)NULL;		RMDBGLOG((ENABLE, "System Type Unknown, exiting\n"));		err = RM_ERROR;		goto exit_with_error;	}	dcc_info.chip_num = play_opt->chip_num;	RMDBGLOG((ENABLE, "disk_ctrl_low_level %d, disk_ctrl_log2_block_size %d, disk_ctrl_max_mem %d \n",				 (int)play_opt->disk_ctrl_low_level, (int)play_opt->disk_ctrl_log2_block_size, (int)play_opt->disk_ctrl_max_mem ));	/* if HD control is enabled and mode is auto, setup parameters */	if ((play_opt->disk_ctrl_low_level) &&	    (play_opt->disk_ctrl_log2_block_size) &&	    (play_opt->disk_ctrl_max_mem)) {		RMuint32 bufferSize = 0;		RMuint32 bufferCount = 0;		RMuint32 log2BlockSize = play_opt->disk_ctrl_log2_block_size;		RMuint32 maxBufferingMem = play_opt->disk_ctrl_max_mem;		bufferSize = (1 << log2BlockSize);		bufferCount = maxBufferingMem >> log2BlockSize;			play_opt->dmapool_count = bufferCount;		play_opt->dmapool_log2size = log2BlockSize;			if (play_opt->disk_ctrl_low_level >= bufferCount)			play_opt->disk_ctrl_low_level = bufferCount >> 1;			video_opt->fifo_size = 4 * (1024 * 1024);		audio_opt->fifo_size = 2 * (1024 * 1024);		fprintf(stderr, ">> low level %lu => %lu bytes bufferized (+ bitstreamFIFO)\n", 			play_opt->disk_ctrl_low_level,			play_opt->disk_ctrl_low_level * bufferSize);			video_opt->xfer_count = (bufferSize / 512) * bufferCount;		audio_opt->xfer_count = (bufferSize / 512) * bufferCount;		err = setup_disk_control_parameters(&dcc_info, play_opt, audio_opt, video_opt, NULL);		if (err != RM_OK) {			fprintf(stderr, "Error %d trying to setup HD control params\n", err);			goto exit_with_error;		}	}	switch (play_opt->disk_ctrl_state) {	case DISK_CONTROL_STATE_DISABLE:		break;	case DISK_CONTROL_STATE_SLEEPING:	case DISK_CONTROL_STATE_RUNNING:		dmabuffer_array = (void **) RMMalloc(sizeof(void*) * play_opt->dmapool_count);		dmabuffer_index = 0;		if (dmabuffer_array == NULL) {			RMDBGLOG((ENABLE, "Cannot allocate dmapool array! Disable disk control\n"));			play_opt->disk_ctrl_state = DISK_CONTROL_STATE_DISABLE;		}		break;	}	// dmapool must be created after the module open in case we do no copy transfers */	RMDBGLOG((ENABLE, "Open pool %lu, %lu  0x%x\n", play_opt->dmapool_count, play_opt->dmapool_log2size, pDMA ));	err = RUAOpenPool(dcc_info.pRUA, 0, play_opt->dmapool_count, play_opt->dmapool_log2size, RUA_POOL_DIRECTION_SEND, &pDMA);	if (RMFAILED(err)) {		RMuint32 poolSize = play_opt->dmapool_count << play_opt->dmapool_log2size;		fprintf(stderr, "Error cannot open dmapool %d\n\n"			"requested %lu bytes of dmapool (%lu buffers of %lu bytes), make sure you\n"			"loaded llad with the right parameters. For example:\n"			"max_dmapool_memory_size >= %lu max_dmabuffer_log2_size >= %lu\n\n",			err,			poolSize,			play_opt->dmapool_count,			(RMuint32)(1<<play_opt->dmapool_log2size),			poolSize,			play_opt->dmapool_log2size);		goto exit_with_error;	}	RMDBGLOG((ENABLE, "Opened pool 0x%lx\n", pDMA ));	dcc_info.pVideoSource = pVideoSource;	dcc_info.pAudioSource = pAudioSource;	dcc_info.trickmode_id = RM_NO_TRICKMODE;	dcc_info.seek_supported = FALSE;	err = DCCGetVideoDecoderSourceInfo(pVideoSource, &(dcc_info.video_decoder), &(dcc_info.spu_decoder), &(dcc_info.video_timer));	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Error getting video decoder source information %d\n", err));		goto exit_with_error;	}	err = DCCGetAudioDecoderSourceInfo(pAudioSource, &(dcc_info.audio_decoder), &(dcc_info.audio_engine), &(dcc_info.audio_timer));	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Error getting audio decoder source information %d\n", err));		goto exit_with_error;	}	context.pRUA = dcc_info.pRUA;	context.pDMA = pDMA;	context.repack_sample = demux_opt->repack_sample;	context.enable_spu = enable_spu;	context.cmd = 0;	context.start_90khz = play_opt->start_ms * 90;	context.dcc_info = &dcc_info;	context.PSMcontext = &PSMContext;	PSMContext.validPSMContexts = 1;	PSMContext.currentActivePSMContext = 1;	PSMContext.keyflags = KEYFLAGS;	file = open_stream( alt_filename, RM_FILE_OPEN_READ, 0);	if (file == NULL) {		fprintf(stderr, "Cannot open file %s\n", alt_filename);		goto exit_with_error;	}	err = RMSizeOfOpenFile(file, &(context.file_size));	if (err != RM_OK) {		RMDBGLOG((ENABLE, "Cannot find file size\n"));		context.file_size = (RMint64) -1;	}	RMDBGLOG((ENABLE, "file: %s, size %llu, duration %llu\n", alt_filename, context.file_size, play_opt->duration / 1000));	if (play_opt->duration)		fprintf(stderr, "duration %llu secs\n", play_opt->duration / 1000);	dcc_info.RM_PSM_commands = RM_PSM_ENABLE_PLAY;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_STOP;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_PAUSE;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_SPEED;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_FASTER;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_SLOWER;	dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_NEXTPIC;	if ((play_opt->duration > 1000) && (context.file_size > 0)) {		RMDBGLOG((ENABLE, "seek and iframe mode enabled\n"));		dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_SEEK;				dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_IFWD;		dcc_info.RM_PSM_commands |= RM_PSM_ENABLE_IRWD;		context.dcc_info->seek_supported = TRUE;		context.dcc_info->iframe_supported = TRUE;	}	/* correct pids according to audio codec and system type */	if ((demux_opt->system_type == RM_SYSTEM_MPEG2_DVD) || (demux_opt->system_type == RM_SYSTEM_MPEG2_PROGRAM)) {		if (demux_opt->audio_pid == 0) {/* If audio PID==PES ID is not provided by user use audio codec option to detect */			demux_opt->audio_pid = (audio_opt->Codec == AudioDecoder_Codec_MPEG1) ? 0xC0:0xBD;		}		if (audio_opt->Codec == AudioDecoder_Codec_MPEG1) {			if ( demux_opt->audio_pid != (0xC0 + demux_opt->audio_subid)) {				RMDBGPRINT((ENABLE, "\n***************** audio_pid audio_subid conflict *****************\n"));				RMDBGPRINT((ENABLE, "*** for mpeg audio select either audio_pid, either audio_subid ***\n"));				RMDBGPRINT((ENABLE, "******************************************************************\n\n"));			}			demux_opt->audio_pid = 0xC0 + demux_opt->audio_subid;		}	}	RMTermInit(TRUE);    // don't allow ctrl-C and the like ...	RMSignalInit(NULL, NULL);  // ... but catch other termination signals to call RMTermExit()	repack_buf = (RMuint8 *) RMMalloc(1<<DMA_BUFFER_SIZE_LOG2);	if (repack_buf == NULL)		goto cleanup;	do {		RMuint8 *buf = NULL;		enum RM_PSM_State PlaybackStatus;		RMDBGLOG((ENABLE, "do-while\n"));		if (play_opt->start_pause) {			RMDBGLOG((ENABLE, "start in pause mode!\n"));			/* required, because if we do 'next' the decoder *must* be running */			err = Play(&context, RM_DEVICES_VIDEO, DCCVideoPlayFwd);			if (RMFAILED(err)) {				fprintf(stderr, "Cannot start decoders %d\n", err);				goto cleanup;			}						err = Pause(&context, RM_DEVICES_VIDEO);			if (RMFAILED(err)) {				fprintf(stderr, "Cannot pause decoders %d\n", err);				goto cleanup;			}			RM_PSM_SetState(context.PSMcontext, &(context.dcc_info), RM_PSM_Paused);		}		else 			RM_PSM_SetState(context.PSMcontext, &(context.dcc_info), RM_PSM_Playing);		play_opt->start_pause = FALSE;	mainloop:				RMDBGLOG((ENABLE, "mainloop\n"));		file_offset = 0;		err = RMSeekFile(file, start_file_position, RM_FILE_SEEK_START);		if (err != RM_OK) {			RMDBGLOG((ENABLE, "Error seeking file to beginning %d\n", err));			goto cleanup;		}		{			struct EMhwlibDisplayTimeInterval time_interval;			time_interval.Mode = EMhwlibDisplayIntervalMode_Start;			time_interval.StartPTSLo = (RMuint32)(start_time_stamp);			time_interval.StartPTSHi = (RMuint32)(start_time_stamp>>32);			time_interval.EndPTSLo = 0;			time_interval.EndPTSHi = 0;			while( (err = RUASetProperty(context.dcc_info->pRUA, context.dcc_info->SurfaceID, RMGenericPropertyID_DisplayTimeInterval, &(time_interval), sizeof(time_interval), 0)) == RM_PENDING )				;			if (RMFAILED(err) && (err != RM_INVALIDMODE)) {				RMDBGLOG((ENABLE, "Cannot set time interval\n"));				goto cleanup;			}			RMDBGLOG((ENABLE, "Time Interval: %d, 0x%lx%lx\n", time_interval.Mode, time_interval.StartPTSHi, time_interval.StartPTSLo)); 				}		mainloop_no_seek:		RMDBGLOG((ENABLE, "mainloop_noseek\n"));		if (actions.cmd == RM_SEEK) {			RMint64 seek_pos;			seek_pos = (dcc_info.seek_time * context.file_size * 1000) / (play_opt->duration);			RMDBGLOG((ENABLE, "seeking to %lu s, pos %llu\n", dcc_info.seek_time, seek_pos)); 			if (RMSeekFile(file, seek_pos, RM_FILE_SEEK_START) != RM_OK) {				RMDBGLOG((ENABLE, "Error: seeking file to position %lu s, %lld kB\n", dcc_info.seek_time, seek_pos/1024));				goto cleanup;			}		}		context.FirstSystemTimeStamp = TRUE;		context.ResumeFromTrickMode = FALSE;		context.audio_byte_counter = 0;		context.video_byte_counter = 0;		context.audio_repack_buf = (RMuint8 *) NULL;		context.video_repack_buf = (RMuint8 *) NULL;		context.spu_repack_buf = (RMuint8 *) NULL;		context.audio_repack_offset = 0;		context.video_repack_offset = 0;		context.spu_repack_offset = 0;		context.audio_repack_size = 0;		context.video_repack_size = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91传媒视频在线播放| 国产真实精品久久二三区| 色婷婷亚洲一区二区三区| 国产精品短视频| 成人三级在线视频| 国产精品第五页| 欧美午夜精品电影| 免费视频最近日韩| 久久久久久久久久久久久夜| 成人午夜看片网址| 亚洲综合色噜噜狠狠| 欧美精品在线一区二区| 狠狠色丁香久久婷婷综| 日本一区二区成人在线| 欧美在线不卡视频| 日韩精品成人一区二区三区| 欧美不卡视频一区| 成人avav影音| 日韩综合在线视频| 久久欧美一区二区| 色婷婷av一区二区三区软件| 免费观看在线综合色| 久久精品国产秦先生| 精品一区二区三区视频在线观看 | 在线成人av网站| 国产精品一区在线观看你懂的| 国产不卡视频在线观看| 一区二区三区在线观看欧美| 精品欧美久久久| 波多野结衣欧美| 日本美女一区二区| 国产精品理论片在线观看| 欧美精品久久久久久久多人混战 | 亚洲精品一区二区三区四区高清 | 精品在线一区二区| 中文字幕免费观看一区| 一本一道久久a久久精品综合蜜臀| 亚洲成人免费观看| 国产日韩三级在线| 欧美特级限制片免费在线观看| 久久99热国产| 亚洲最大成人综合| 国产亚洲va综合人人澡精品| 欧美在线观看视频一区二区 | 精品一区二区三区视频| 亚洲美女在线国产| 久久久精品免费观看| 欧美日韩一区二区三区四区五区| 国产成人亚洲精品狼色在线| 午夜精品久久久久久久蜜桃app| 国产亚洲欧美日韩俺去了| 91精品国产高清一区二区三区| 91网站在线播放| 国产成人精品一区二区三区网站观看| 日韩精品久久理论片| 一区二区在线免费观看| 国产日韩精品视频一区| 日韩欧美一级片| 欧美丰满少妇xxxbbb| 欧美亚洲综合另类| 99久久777色| 不卡av在线免费观看| 国产精品99久久久久久久vr| 日本中文字幕一区二区视频| 亚洲国产综合91精品麻豆| 亚洲精选在线视频| 亚洲丝袜美腿综合| 最新日韩av在线| 综合电影一区二区三区| 中文成人av在线| 亚洲国产精品二十页| 久久久99精品免费观看不卡| 久久综合狠狠综合久久激情| 日韩欧美在线观看一区二区三区| 欧美精品一级二级| 欧美男生操女生| 4438亚洲最大| 精品国产凹凸成av人网站| 欧美成人乱码一区二区三区| 日韩区在线观看| 精品国产一区二区三区忘忧草| 日韩写真欧美这视频| 日韩一区二区免费在线电影 | 在线免费av一区| 欧美亚洲日本国产| 欧美三级欧美一级| 91精品欧美久久久久久动漫| 欧美一级在线观看| 亚洲精品在线观| 精品久久久久久综合日本欧美| 精品人伦一区二区色婷婷| 久久女同精品一区二区| 国产视频在线观看一区二区三区 | 欧美午夜理伦三级在线观看| 欧美日韩美女一区二区| 欧美一区三区二区| 日韩欧美在线综合网| 精品久久久久一区二区国产| 2023国产精品视频| 国产精品久久夜| 性感美女久久精品| 国产综合久久久久久鬼色| 成人一区二区三区| 欧美在线看片a免费观看| 日韩欧美国产高清| 国产精品系列在线| 亚洲成av人**亚洲成av**| 麻豆精品新av中文字幕| 国产99一区视频免费| 在线观看国产日韩| 欧美成人伊人久久综合网| 欧美经典三级视频一区二区三区| 日韩一区欧美一区| 婷婷一区二区三区| 国产91精品一区二区| 欧美日韩精品一区二区三区四区 | 久久国产精品99久久久久久老狼 | 水蜜桃久久夜色精品一区的特点| 韩国视频一区二区| 91同城在线观看| 日韩精品一区二区三区视频 | 亚洲精品精品亚洲| 久久国产尿小便嘘嘘尿| 色婷婷久久一区二区三区麻豆| 欧美一区二区三区啪啪| 国产精品麻豆久久久| 日韩av成人高清| 9久草视频在线视频精品| 欧美区在线观看| 亚洲色图在线视频| 国产一区二区在线影院| 欧美群妇大交群中文字幕| 国产精品美女久久久久aⅴ国产馆| 青青草视频一区| 欧美色图激情小说| 国产精品久久久久影院老司| 捆绑变态av一区二区三区| 色婷婷av一区二区| 国产精品美女久久久久aⅴ| 韩国精品免费视频| 91精品国产高清一区二区三区蜜臀| 亚洲视频免费在线观看| 国产精品一二三四五| 日韩一区二区三| 日韩精品亚洲一区二区三区免费| 日本精品视频一区二区| 亚洲国产成人一区二区三区| 久久福利资源站| 日韩视频在线观看一区二区| 亚洲一区二区欧美激情| 96av麻豆蜜桃一区二区| 国产亚洲一区二区三区四区 | 午夜精品成人在线视频| 色综合天天综合网天天看片| 国产视频一区二区在线| 蜜臀久久99精品久久久画质超高清 | 亚洲国产精华液网站w| 国产一区视频导航| 精品国产sm最大网站| 日一区二区三区| 欧美一二三区在线观看| 丝袜亚洲另类丝袜在线| 欧美日韩国产一级片| 亚洲电影在线播放| 欧美日韩一区三区四区| 婷婷开心久久网| 欧美精品视频www在线观看 | 捆绑调教美女网站视频一区| 欧美一区二区三区免费视频| 免费在线观看一区二区三区| 欧美一区二区黄| 精品中文字幕一区二区| 欧美变态凌虐bdsm| 国产精品1024| 国产精品女上位| 91视频免费观看| 亚洲va欧美va天堂v国产综合| 欧美视频精品在线观看| 午夜伦欧美伦电影理论片| 欧美一区二区三区电影| 国产一区二区福利| 中文字幕二三区不卡| 99视频一区二区三区| 一区二区不卡在线播放 | 26uuu成人网一区二区三区| 国模少妇一区二区三区| 中文幕一区二区三区久久蜜桃| 一本色道a无线码一区v| 图片区日韩欧美亚洲| 欧美岛国在线观看| 成人黄色小视频| 亚洲成人免费在线| 26uuu国产日韩综合| 91蜜桃婷婷狠狠久久综合9色| 亚洲国产综合色| 久久久99精品免费观看不卡| 色先锋aa成人| 久久99九九99精品| 国产精品福利一区二区三区| 欧美日韩国产综合草草|