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

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

?? play_vdemux.c

?? SigmDesign SMP8634 media decode chip development SDK
?? C
?? 第 1 頁 / 共 5 頁
字號:
	while (RUASendData(pSendContext->pRUA, decoder, pSendContext->pDMA, send_buffer, send_length, (void*)&Info, sizeof(Info)) != RM_OK) {		struct RUAEvent e;		PROCESS_KEY_INSIDE_FUNCTION();		e.ModuleID = decoder;		e.Mask = RUAEVENT_XFER_FIFO_READY;		RUAWaitForMultipleEvents(pSendContext->pRUA, &e, 1, SENDDATA_TIMEOUT_US, NULL);	}	RUAReleaseBuffer(pSendContext->pDMA, send_buffer); return_from_callback:	return;}static void PESCallback(RMuint8 *buffer, RMuint32 length, RMuint64 PTS, RMbool isPtsValid,			RMvdemuxDataType dataType, RMuint64 PESOffset, void *context){	static RMascii *decoder_name[] = {"video", "audio", "spu"};	RMascii *string;	struct demux_context *pSendContext = (struct demux_context *) context;	RMuint32 decoder;	struct emhwlib_info Info;	RMbool send_data = FALSE;	RMuint8 *send_buffer = (RMuint8 *) NULL;	RMuint32 send_length = 0;	RMuint8 *repack_buffer;	RMuint64 repack_pts;	RMuint32 repack_offset, repack_size;	RMbool repack_pts_valid;	RMuint32 send_pts;	RMuint32 *pbyte_counter = 0;	RMuint32 first_access_unit_pointer = 0;	RMbool isFirstAccessUnitValid = FALSE;	enum RM_PSM_State PlaybackStatus = RM_PSM_GetState(pSendContext->PSMcontext, &(pSendContext->dcc_info));#ifdef PTS_DISCONTINUITY_DETECTION	static RMuint64 prevVpts = 0xffffffffffffffffll;	static RMuint64 prevApts = 0xffffffffffffffffll;#endif	if (pSendContext->ignoreCallback) {		if ((actions.cmd == RM_QUIT) && (!actions.cmdProcessed)) {			RMDBGLOG((ENABLE, "callback called when 'quit' command was issued\n"));			goto return_from_callback;		}		if ((PlaybackStatus == RM_PSM_Stopped) && (actions.cmdProcessed)) {			RMDBGLOG((ENABLE, "callback called when 'stop' command was issued\n"));			goto return_from_callback;		}		if ((actions.cmd == RM_STOP_SEEK_ZERO)  && (!actions.cmdProcessed)) {			RMDBGLOG((ENABLE, "callback called when 'seekzero' command was issued\n"));			goto return_from_callback;		}		if ((actions.cmd == RM_SEEK) && (!actions.cmdProcessed)) {				RMDBGLOG((ENABLE, "callback called when 'seek' command was issued\n"));			goto return_from_callback;		}		if (((actions.cmd == RM_IFWD) || (actions.cmd == RM_IRWD)) && (actions.cmdProcessed)) {				RMDBGLOG((ENABLE, "callback called when 'iframe' command was issued\n"));			goto return_from_callback;		}		RMDBGLOG((ENABLE, "********** ignoring Callback!! *********, cmd %lu, processed %lu\n", actions.cmd, actions.cmdProcessed));		goto return_from_callback;	}	switch (dataType) {		case RMVDEMUX_AUDIO:			if (pSendContext->audio_first_access_unit_pointer_valid) {				isFirstAccessUnitValid = TRUE;				first_access_unit_pointer = pSendContext->audio_first_access_unit_pointer;				pSendContext->audio_first_access_unit_pointer_valid = FALSE;			}			break;		default:			isFirstAccessUnitValid = FALSE;			first_access_unit_pointer = 0;			break;	}	switch (dataType) {		case RMVDEMUX_VIDEO:			if ( ! play_opt->send_video)				return ;			decoder = pSendContext->dcc_info->video_decoder;			string = decoder_name[0];			send_pts = play_opt->send_video_pts;			repack_buffer = pSendContext->video_repack_buf;			repack_offset = pSendContext->video_repack_offset;			repack_size = pSendContext->video_repack_size;			repack_pts = pSendContext->video_repack_pts;			repack_pts_valid = pSendContext->video_repack_pts_valid;			pbyte_counter = &pSendContext->video_byte_counter;			//printf("Sending %lu bytes of video data\n", length);			break;		case RMVDEMUX_AUDIO:			if ( ! play_opt->send_audio)				return ;			if ((PlaybackStatus != RM_PSM_Playing) && (PlaybackStatus != RM_PSM_Paused) && (PlaybackStatus != RM_PSM_Prebuffering))				return;	       			decoder = pSendContext->dcc_info->audio_decoder;			string = decoder_name[1];			send_pts = play_opt->send_audio_pts;			repack_buffer = pSendContext->audio_repack_buf;			repack_offset = pSendContext->audio_repack_offset;			repack_size = pSendContext->audio_repack_size;			repack_pts = pSendContext->audio_repack_pts;			repack_pts_valid = pSendContext->audio_repack_pts_valid;			pbyte_counter = &pSendContext->audio_byte_counter;			//printf("Sending Audio data\n");			break;		case RMVDEMUX_SUBPICTURE:			if ( ! play_opt->send_spu)				return ;#ifdef	ENABLE_SPU_OP			if (! pSendContext->enable_spu) {				RMDBGPRINT((ENABLE, "disabled spu\n"));				return;			}#else			return;#endif			decoder = pSendContext->dcc_info->spu_decoder;			string = decoder_name[2];			send_pts = play_opt->send_spu_pts;			repack_buffer = pSendContext->spu_repack_buf;			repack_offset = pSendContext->spu_repack_offset;			repack_size = pSendContext->spu_repack_size;			repack_pts = pSendContext->spu_repack_pts;			repack_pts_valid = pSendContext->spu_repack_pts_valid;			break;		case RMVDEMUX_NAVIGATION:			RMDBGPRINT((ENABLE, "navigation\n"));			return;		default:			RMDBGPRINT((ENABLE, "Unknown data type %d\n", dataType));			return;	}	if ((pSendContext->repack_sample) && (repack_size>0) && 	    ((isPtsValid) || (repack_offset + length > (RMuint32) (1<<play_opt->dmapool_log2size)) || (repack_size + length > REPACK_SIZE))) {	    send_buffer = repack_buffer + repack_offset;		send_length = repack_size;		Info.ValidFields = (repack_pts_valid && send_pts) ? TIME_STAMP_INFO : 0;		Info.TimeStamp = repack_pts;		send_data = TRUE;				repack_offset += repack_size;		repack_size = 0;		repack_pts = 0;		repack_pts_valid = FALSE;	}	else if (!pSendContext->repack_sample) {		send_buffer = buffer;		send_length = length;		Info.ValidFields = ((isPtsValid && send_pts) ? TIME_STAMP_INFO : 0) | (isFirstAccessUnitValid ? FIRST_ACCESS_UNIT_POINTER_INFO : 0);		Info.TimeStamp = PTS;		Info.FirstAccessUnitPointer = first_access_unit_pointer;		send_data = TRUE;	}	if (send_data) {		if (1/*(PlaybackStatus == RM_PSM_Playing) || (PlaybackStatus == RM_PSM_Paused) || (PlaybackStatus == RM_PSM_NextPic)*/) {			if (pSendContext->FirstSystemTimeStamp) {				if (Info.ValidFields & TIME_STAMP_INFO) {					RMDBGLOG((ENABLE, "FirstSystemTimeStamp from %s = %llu = 0x%llx (0x%llx)\n", string, Info.TimeStamp, Info.TimeStamp, Info.TimeStamp/2));					pSendContext->realFirstPTS = (RMint64) (Info.TimeStamp + pSendContext->start_90khz);					// set the STC to 1sec before the real value, so that we dont the first frame when prebuffering					DCCSTCSetTime(pSendContext->dcc_info->pStcSource, (RMuint64)(pSendContext->realFirstPTS - 90000), 90000);					pSendContext->FirstSystemTimeStamp = FALSE;#ifdef PTS_DISCONTINUITY_DETECTION					if (dataType == RMVDEMUX_VIDEO)						prevVpts = Info.TimeStamp;									if (dataType == RMVDEMUX_AUDIO)						prevApts = Info.TimeStamp;#endif				}				else if (!(play_opt->send_audio_pts || play_opt->send_audio_pts)) {					Info.TimeStamp = 0;					RMDBGLOG((ENABLE, "No PTS -> Init FirstSystemTimeStamp = %llu\n", Info.TimeStamp));					pSendContext->realFirstPTS = (RMint64) (Info.TimeStamp + pSendContext->start_90khz);					// set the STC to 1sec before the real value, so that we dont the first frame when prebuffering					DCCSTCSetTime(pSendContext->dcc_info->pStcSource, (RMuint64)(pSendContext->realFirstPTS - 90000), 90000);					pSendContext->FirstSystemTimeStamp = FALSE;#ifdef PTS_DISCONTINUITY_DETECTION					prevVpts = Info.TimeStamp;					prevApts = Info.TimeStamp;#endif				}				else					RMDBGLOG((ENABLE, "waiting for valid PTS\n"));			}		}		//fprintf( stderr, "send buffer5  0x%lx, sendbuffer 0x%lx length 0x%lx\n", decoder, send_buffer, send_length );		if ((pSendContext->waitForValidAudioPTS) && (dataType == RMVDEMUX_AUDIO) && (send_pts)) {			if (Info.ValidFields & TIME_STAMP_INFO) {				RMDBGLOG((ENABLE, "first valid audio PTS %llu(0x%09llx), start sending audio\n",Info.TimeStamp,Info.TimeStamp));				pSendContext->waitForValidAudioPTS = FALSE;#ifdef PTS_DISCONTINUITY_DETECTION				prevApts = Info.TimeStamp;#endif			}			else {				// dont send audio with invalid pts				RMDBGLOG((ENABLE, "audio pts not valid\n"));				if (isPtsValid) {					repack_pts_valid = TRUE;					repack_pts = PTS;				}				goto end_data_callback;			}		}		if ((pSendContext->waitForValidVideoPTS) && (dataType == RMVDEMUX_VIDEO) && (send_pts)) {			if (Info.ValidFields & TIME_STAMP_INFO) {				RMDBGLOG((ENABLE, "first valid video PTS %llu(0x%09llx), start sending video\n",Info.TimeStamp,Info.TimeStamp));				pSendContext->waitForValidVideoPTS = FALSE;#ifdef PTS_DISCONTINUITY_DETECTION				prevVpts = Info.TimeStamp;#endif			}			else {				// dont send video with invalid pts				RMDBGLOG((ENABLE, "video pts not valid\n"));				if (isPtsValid) {					repack_pts_valid = TRUE;					repack_pts = PTS;				}				goto end_data_callback;			}		}#ifdef PTS_DISCONTINUITY_DETECTION		if (Info.ValidFields & TIME_STAMP_INFO) {			RMint64 diff = 0;			if ((pSendContext->fakePrevPts) && (dataType == RMVDEMUX_AUDIO)) {				RMDBGPRINT((ENABLE, "Set prevAPTS to 0x%09llx\n", Info.TimeStamp));				prevApts = Info.TimeStamp;				pSendContext->fakePrevPts = FALSE;			}			if ((dataType == RMVDEMUX_VIDEO) && (prevVpts != 0xffffffffffffffffll)) {				diff = Info.TimeStamp - prevVpts;				prevVpts = Info.TimeStamp;				RMDBGPRINT((DISABLE, "Vpts = %9llx %8lx (%lx)\n", Info.TimeStamp, pSendContext->video_byte_counter, file_offset));			} 			else if ((dataType == RMVDEMUX_AUDIO) && (prevApts != 0xffffffffffffffffll)) {				diff = Info.TimeStamp - prevApts;				prevApts = Info.TimeStamp;				RMDBGPRINT((DISABLE, "Apts = %9llx %8lx (%lx)\n", Info.TimeStamp, pSendContext->audio_byte_counter, file_offset));			}			if ((diff < -PTS_DISCONTINUITY_RANGE) || (diff > PTS_DISCONTINUITY_RANGE)) {				struct InbandCommand_type InbandCmd;				RMDBGPRINT((ENABLE, "%spts discontinuity = %9llx -> %9llx\n", (dataType == RMVDEMUX_VIDEO)?"V":"A", Info.TimeStamp-diff, Info.TimeStamp));				DCCSTCSetDiscontinuity(pSendContext->dcc_info->pStcSource, Info.TimeStamp-2*90000, 90000);								InbandCmd.Tag = INBAND_COMMAND_TAG_DISCONTINUITY | INBAND_COMMAND_ACTION_STOP;				InbandCmd.Coordinate = 0;				RUASetProperty(pSendContext->pRUA, pSendContext->dcc_info->video_decoder, RMGenericPropertyID_InbandCommand, &InbandCmd, sizeof(InbandCmd), 0);				RUASetProperty(pSendContext->pRUA, pSendContext->dcc_info->audio_decoder, RMGenericPropertyID_InbandCommand, &InbandCmd, sizeof(InbandCmd), 0);			}		}#endif	// PTS_DISCONTINUITY_DETECTION		if (PlaybackStatus == RM_PSM_Prebuffering) {			RMDBGPRINT((ENABLE, "%s", dataType == RMVDEMUX_AUDIO ? "a":"v"));		}		{			RMuint64 stc;			DCCSTCGetTime(pSendContext->dcc_info->pStcSource, &stc, 90000);			RMDBGLOG((SENDDBG, "sending %s, %lu, pts %llu(0x%09llx) %s stc %llu(0x%09llx)\n", 				  dataType == RMVDEMUX_AUDIO ? "audio":"video",				  send_length,				  Info.TimeStamp,				  Info.TimeStamp,				  Info.ValidFields & TIME_STAMP_INFO ? "valid":"",				  stc,				  stc));		}		if (Info.ValidFields & TIME_STAMP_INFO) {			static RMint64 max_diff = 0, min_diff = 0;			RMint64 diff;			if ( (prevVpts != 0xffffffffffffffffll) && (prevApts != 0xffffffffffffffffll) ) {				diff = (RMint64)(prevVpts - prevApts) / (RMint64)90; /* diff in miliseconds */				RMDBGLOG((DISABLE, "diff %lld %llx %llx\n", diff, prevVpts, prevApts));				if ( (diff < -100) || (diff > 100)) {					if ( (diff > 0) && (diff > max_diff+100) ) {						max_diff = diff;						RMDBGLOG((ENABLE, " %lld\n", diff));					}					if ( (diff < 0) && (diff < min_diff-100) ) {						min_diff = diff;						RMDBGLOG((ENABLE, " %lld\n", diff));					}				}			}		}				while( RUASendData(pSendContext->pRUA, decoder, pSendContext->pDMA, send_buffer, send_length, (void*)&Info, sizeof(Info)) != RM_OK ) {			struct RUAEvent e;			check_prebuf_state(pSendContext, 0);			PROCESS_KEY_INSIDE_FUNCTION();			PlaybackStatus = RM_PSM_GetState(pSendContext->PSMcontext, &(pSendContext->dcc_info));			/* skip audio in trickmode */			if ((dataType == RMVDEMUX_AUDIO) && 			    ((PlaybackStatus == RM_PSM_Slow) || (PlaybackStatus == RM_PSM_Fast) || (PlaybackStatus == RM_PSM_NextPic)))				goto end_data_callback;			e.ModuleID = decoder;			e.Mask = RUAEVENT_XFER_FIFO_READY;			RUAWaitForMultipleEvents(pSendContext->pRUA, &e, 1, SENDDATA_TIMEOUT_US, NULL);		}				if ( pbyte_counter )			*pbyte_counter = *pbyte_counter + send_length;					/* sendind data may fill-up the xfer fifo, so we reset the event */		{			struct RUAEvent e;						e.ModuleID = decoder;			e.Mask = RUAEVENT_XFER_FIFO_READY;			RUAResetEvent(pSendContext->pRUA, &e);		}	}		if (pSendContext->repack_sample) {		RMuint32 val;		val = RMmax(length, REPACK_SIZE);		if ((repack_offset + val) > (RMuint32) (1<<play_opt->dmapool_log2size)) {			RUAReleaseBuffer(pSendContext->pDMA, repack_buffer);			repack_buffer = (RMuint8 *) NULL;			repack_offset = 0;		}		if (repack_buffer == NULL) {			while (RUAGetBuffer(pSendContext->pDMA, &repack_buffer,  GETBUFFER_TIMEOUT_US) != RM_OK) {				PROCESS_KEY_INSIDE_FUNCTION();				RMDBGLOG((DISABLE, "Wait for a buffer\n"));			}		}		memcpy(repack_buffer + repack_offset + repack_size, buffer, length);		repack_size += length;		if (isPtsValid) {			repack_pts_valid = TRUE;			repack_pts = PTS;		}	}		 end_data_callback:	switch (dataType) {	case RMVDEMUX_VIDEO:		pSendContext->video_repack_buf = repack_buffer;		pSendContext->video_repack_offset = repack_offset;		pSendContext->video_repack_size = repack_size;		pSendContext->video_repack_pts = repack_pts;		pSendContext->video_repack_pts_valid = repack_pts_valid;		break;	case RMVDEMUX_AUDIO:		pSendContext->audio_repack_buf = repack_buffer;		pSendContext->audio_repack_offset = repack_offset;		pSendContext->audio_repack_size = repack_size;		pSendContext->audio_repack_pts = repack_pts;		pSendContext->audio_repack_pts_valid = repack_pts_valid;		break;	case RMVDEMUX_SUBPICTURE:		pSendContext->spu_repack_buf = repack_buffer;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区激情| 国产高清久久久久| 国产精品91xxx| 欧美精品一卡两卡| 亚洲国产成人在线| 久久国产视频网| 在线精品视频一区二区| 欧美极品xxx| 国产专区综合网| 欧美一区二区黄色| 亚洲综合999| 99久久久久久99| 国产精品视频一二三| 久久国内精品自在自线400部| 欧美日韩国产综合一区二区| 亚洲激情一二三区| www.视频一区| 国产精品久久久久久久裸模| 国产成人午夜精品5599| 精品国产免费人成电影在线观看四季 | 奇米四色…亚洲| 欧美三级午夜理伦三级中视频| 国产精品护士白丝一区av| 国产毛片精品国产一区二区三区| 欧美精品视频www在线观看| 亚洲人成小说网站色在线| av男人天堂一区| 国产精品欧美极品| 成人app软件下载大全免费| 久久精品夜色噜噜亚洲aⅴ| 狠狠色丁香久久婷婷综| 欧美精品一区二区三区在线播放| 另类小说一区二区三区| 精品成a人在线观看| 国产一区二区三区久久久| 欧美不卡激情三级在线观看| 久久国产欧美日韩精品| 日韩欧美国产高清| 激情综合色综合久久| 精品少妇一区二区三区免费观看| 免费高清不卡av| 久久久久久久精| 国产成人精品亚洲日本在线桃色 | 中文字幕一区二区三区在线观看| 成人午夜视频网站| 成人免费在线播放视频| 色噜噜狠狠成人网p站| 亚洲午夜一区二区| 欧美一级片免费看| 国产成人综合在线| 玉米视频成人免费看| 制服丝袜中文字幕一区| 精久久久久久久久久久| 国产精品美女一区二区在线观看| 94-欧美-setu| 另类人妖一区二区av| 国产婷婷一区二区| 欧美在线啊v一区| 青青草国产成人av片免费| 久久影院午夜论| 97久久精品人人爽人人爽蜜臀| 亚洲国产aⅴ天堂久久| 精品av综合导航| 99精品视频在线观看| 丝袜a∨在线一区二区三区不卡| 精品国产一区二区国模嫣然| 99国内精品久久| 久久国产精品99久久久久久老狼| 欧美激情中文字幕一区二区| 欧美浪妇xxxx高跟鞋交| 国内精品国产三级国产a久久| 最新国产成人在线观看| 欧美一区二区三区视频| 成人黄页毛片网站| 久久国产夜色精品鲁鲁99| 国产精品成人一区二区三区夜夜夜| 欧美性猛交一区二区三区精品| 国产激情一区二区三区| 日本欧美一区二区在线观看| 亚洲人成小说网站色在线| 久久亚区不卡日本| 欧美日本一区二区| 成人在线视频一区| 蜜臀久久99精品久久久久宅男| 亚洲精品ww久久久久久p站| 国产婷婷一区二区| 欧美成人video| 欧美男男青年gay1069videost| 成人晚上爱看视频| 国产一区二三区| 奇米在线7777在线精品| 亚洲一区二区三区四区的| 1000部国产精品成人观看| 久久免费偷拍视频| 欧美一级xxx| 欧美在线一二三四区| 91亚洲精品乱码久久久久久蜜桃| 国产乱码精品1区2区3区| 水野朝阳av一区二区三区| 一区二区三区四区视频精品免费| 国产片一区二区| 久久久久亚洲蜜桃| ww亚洲ww在线观看国产| 欧美肥妇毛茸茸| 欧美精品久久99久久在免费线 | 日韩视频中午一区| 欧美精品亚洲二区| 欧美日韩国产色站一区二区三区| 色综合网色综合| 欧美精品在欧美一区二区少妇| 成人禁用看黄a在线| 高清shemale亚洲人妖| 国产99久久久精品| 国产精品 欧美精品| 国产91精品一区二区麻豆网站| 国产一区二区成人久久免费影院| 激情都市一区二区| 国产精品系列在线播放| 国产成人aaa| 91看片淫黄大片一级| 色婷婷综合视频在线观看| 色猫猫国产区一区二在线视频| 色哟哟国产精品免费观看| 在线看日本不卡| 5566中文字幕一区二区电影| 欧美成人三级在线| 久久久久青草大香线综合精品| 国产清纯白嫩初高生在线观看91| 中文无字幕一区二区三区| 国产精品国产精品国产专区不蜜| 亚洲欧美日韩国产一区二区三区| 亚洲狠狠爱一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 人人超碰91尤物精品国产| 国内精品国产成人国产三级粉色| 国产精品综合一区二区三区| 北条麻妃国产九九精品视频| 欧美亚洲免费在线一区| 91精品久久久久久久99蜜桃| 久久网这里都是精品| 成人欧美一区二区三区小说| 午夜精品一区在线观看| 久久er99精品| 91网站在线播放| 欧美一区二区三区性视频| 久久久综合九色合综国产精品| 亚洲欧洲另类国产综合| 视频一区在线播放| 国产成人在线网站| 欧美午夜免费电影| 久久网站最新地址| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品成人免费在线| 亚洲一卡二卡三卡四卡| 国产一区二区三区久久悠悠色av| 99国产欧美另类久久久精品| 日韩一区二区三区av| 欧美国产禁国产网站cc| 偷拍自拍另类欧美| 波多野结衣在线aⅴ中文字幕不卡| 欧美性受xxxx黑人xyx性爽| 精品美女在线观看| 亚洲免费三区一区二区| 激情欧美日韩一区二区| 日本道色综合久久| 中文字幕av一区 二区| 日韩精品亚洲专区| 不卡视频一二三四| 欧美xxx久久| 日日夜夜免费精品视频| 成人av在线一区二区| 欧美一区二区三区影视| 亚洲免费观看高清完整版在线| 国产一区二区三区免费观看| 欧美丰满嫩嫩电影| 亚洲精品日韩专区silk| 国产91丝袜在线18| 欧美不卡123| 久久精品免费观看| 欧美日韩精品专区| 亚洲欧美日韩久久精品| 成人美女视频在线看| 久久精品人人做人人综合| 捆绑调教美女网站视频一区| 欧美福利视频导航| 丝袜国产日韩另类美女| 欧美午夜不卡在线观看免费| 亚洲天堂中文字幕| av午夜精品一区二区三区| 国产女同互慰高潮91漫画| 九九国产精品视频| 日韩精品一区二区三区在线观看| 肉色丝袜一区二区| 欧美日韩成人综合| 亚洲成a人片综合在线| 91精彩视频在线| 亚欧色一区w666天堂| 91麻豆精品国产91久久久久久久久 | 久久色.com| 国模冰冰炮一区二区|