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

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

?? play_mp4.c

?? SigmDesign SMP8634 media decode chip development SDK
?? C
?? 第 1 頁 / 共 5 頁
字號:
	pSendContext->audioTracks = RMGetMP4NumberOfAudioTracks(pSendContext->mp4c);	RMDBGLOG((ENABLE, "found %lu audio tracks\n", pSendContext->audioTracks));	if (pSendContext->audioTracks > 0) {		RMuint32 i;		pSendContext->currentAudioTrack = 0;		if (pSendContext->priv_opt.audio_track) {			RMDBGLOG((ENABLE, "open audio track %lu from cmdline\n", pSendContext->priv_opt.audio_track));			status = mp4_select_audio_track(pSendContext, pSendContext->priv_opt.audio_track);			if (status == RM_OK) {				pSendContext->currentAudioTrack = pSendContext->priv_opt.audio_track;				goto init_spu_track;			}			else {				RMDBGLOG((ENABLE, "cant select audio track %lu\n", pSendContext->priv_opt.audio_track));				goto disable_audio;			}		}					for (i = 1; i <= pSendContext->audioTracks; i++) {			// init the first working audio track			status = mp4_select_audio_track(pSendContext, i);			if (status != RM_OK)				RMDBGLOG((ENABLE, "cant select audio track %lu, skipping!\n", i));			else {				pSendContext->currentAudioTrack = i;				break;			}		}		if (pSendContext->currentAudioTrack != i) {		disable_audio:			// all audio tracks failed init, disable audio			RMDBGLOG((ENABLE, "all audio tracks failed init, disabling audio\n"));			pSendContext->SendAudioData = FALSE;			pSendContext->isAudioOnly = FALSE;			pSendContext->currentAudioTrack = 0;			if (pSendContext->mp4tA) {				RMDBGLOG((ENABLE, "closing audio track\n"));				RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tA);				pSendContext->mp4tA = (ExternalRMmp4Track) NULL;			}		}	}	else {		RMDBGLOG((ENABLE, ">> no audio\n"));		pSendContext->SendAudioData = FALSE;		pSendContext->isAudioOnly = FALSE;		pSendContext->currentAudioTrack = 0;	} init_spu_track:	pSendContext->mp4tSPU = (ExternalRMmp4Track) NULL;	pSendContext->currentSPUTrack = 0;	pSendContext->spuTracks = RMGetMP4NumberOfSPUTracks(pSendContext->mp4c);	RMDBGLOG((ENABLE, "found %lu spu tracks\n", pSendContext->spuTracks));#ifdef WITHOUT_NERO_SPU	pSendContext->spuTracks = 0;#endif // WITHOUT_NERO_SPU	if ((pSendContext->priv_opt.spuEnabled) && (pSendContext->spuTracks)) {		RMuint32 i;		pSendContext->enableSPU = TRUE;		pSendContext->displaySPU = TRUE;				for (i = 1; i <= pSendContext->spuTracks; i++) {			// init the first working spu track			status = mp4_select_spu_track(pSendContext, i);			if (status != RM_OK)				RMDBGLOG((ENABLE, "cant select spu track %lu, skipping!\n", i));			else {				pSendContext->currentSPUTrack = i;				break;			}		}		if (pSendContext->currentSPUTrack != i) {			// all spu tracks failed init, disable spu			RMDBGLOG((ENABLE, "all spu tracks failed init, disabling spu\n"));			pSendContext->SendSPUData = FALSE;			pSendContext->spuTracks = 0;			pSendContext->enableSPU = FALSE;			if (pSendContext->mp4tSPU) {				RMDBGLOG((ENABLE, "closing spu track\n"));				RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tSPU);				pSendContext->mp4tSPU = (ExternalRMmp4Track) NULL;			}		}	}	/* init Subtitle track */	pSendContext->mp4tSubT = (ExternalRMmp4Track) NULL;	pSendContext->currentSubtitleTrack = 0;		pSendContext->subtitleTracks = RMGetMP4NumberOfSubtitleTracks(pSendContext->mp4c);	RMDBGLOG((ENABLE, "found %lu subtitle tracks\n", pSendContext->subtitleTracks));	// disable subtitles to match Nero's behaviour (Nero Digital for Windows doesnt show subtitles, only SPU)	pSendContext->subtitleTracks = 0;	if ((pSendContext->priv_opt.subtitlesEnabled) && (pSendContext->subtitleTracks)) {		RMuint32 i;		pSendContext->enableSubtitles = TRUE;		if (!pSendContext->displaySPU)			pSendContext->displaySubtitles = TRUE;		for (i = 1; i <= pSendContext->subtitleTracks; i++) {			// init the first working subtitle track			status = mp4_select_subtitle_track(pSendContext, i);			if (status != RM_OK)				RMDBGLOG((ENABLE, "cant select subtitle track %lu, skipping!\n", i));			else {				pSendContext->currentSubtitleTrack = i;				break;			}		}		if (pSendContext->currentSubtitleTrack != i) {			// all subtitle tracks failed init, disable subtitles			RMDBGLOG((ENABLE, "all subtitle tracks failed init, disabling subtitles\n"));			pSendContext->subtitleTracks = 0;			pSendContext->enableSubtitles = FALSE;			if (pSendContext->mp4tSubT) {				RMDBGLOG((ENABLE, "closing subtitle track\n"));				RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tSubT);				pSendContext->mp4tSubT = (ExternalRMmp4Track) NULL;			}		}	}	/* exit */	if ((pSendContext->audioTracks == 0) && (pSendContext->videoTracks == 0))		return RM_ERROR;	RMDBGLOG((ENABLE, "initTracks done, video %lu(of %lu), audio %lu(of %lu), spu %lu(of %lu), subtitle %lu(of %lu)\n",		  pSendContext->currentVideoTrack,		  pSendContext->videoTracks,		  pSendContext->currentAudioTrack,		  pSendContext->audioTracks,		  pSendContext->currentSPUTrack,		  pSendContext->spuTracks,		  pSendContext->currentSubtitleTrack,		  pSendContext->subtitleTracks));	return RM_OK;}/* for audio and spu (spu has a dsisize=64 always, is the palette) */#define MAX_DSI_SIZE 64 static RMstatus mp4_select_audio_track(struct SendMP4DataContext *pSendContext, RMuint32 index){	RMuint32 audiotrackID = 0;	RMstatus status;	ExternalRMmp4Track newTrack;	if (index > pSendContext->audioTracks)		return RM_ERROR;	if (index == pSendContext->currentAudioTrack)		return RM_OK;	status = RMGetMP4AudioTrackIDByIndex(pSendContext->mp4c, index, &audiotrackID);	if (status != RM_OK) {		RMDBGLOG((ENABLE, "cant get id for audio track %lu!\n", index));		return status;	}	if (audiotrackID > 0) { 		RMuint8 *dsibuf;		RMuint32 dsisize;		RMuint8 tempdsi[MAX_DSI_SIZE];		RMuint32 samplerate, channels;		RMuint8 objID;		RMmpeg4TrackType type;		RMDBGLOG((ENABLE, "selecting audio track %lu, id %lu\n", index, audiotrackID));		newTrack = RMOpenMP4Track(pSendContext->mp4c, audiotrackID);		if (!newTrack) {			RMDBGLOG((ENABLE, "couldnt open track!\n"));			return RM_ERROR;		}		RMGetMP4TrackType(newTrack, &type);				if (type == RM_AUDIO_AAC_TRACK) {					RMDBGLOG((ENABLE, ">> AAC audio\n"));			dsibuf = RMGetMP4TrackDSI(newTrack, &dsisize);						RMDBGLOG((ENABLE, "got %lu bytes of audio DSI, parsing...\n", dsisize));						if (dsibuf == NULL) {				RMDBGLOG((ENABLE, "audio DSI not present!\n"));#ifdef WITH_MONO				return RM_ERROR;#else				return RM_OK;#endif			}			else if (dsisize > MAX_DSI_SIZE) {				RMDBGLOG((ENABLE, "audio DSI too big!\n"));				return RM_ERROR;			}			else if (dsisize == 0) {				RMDBGLOG((ENABLE, "audio DSI has size zero!!\n"));				return RM_ERROR;			}			/* copy the DSI in case we overwite it during parsing */			memcpy(tempdsi, dsibuf, dsisize);						ParseMP4AudioDSI(tempdsi, &dsisize, &samplerate, &channels, &objID);			pSendContext->audioSampleRate = samplerate;			pSendContext->AAC_SampleRateFromDSI = samplerate;			pSendContext->AAC_ChannelsFromDSI = channels;			pSendContext->AAC_ObjectIDFromDSI = objID;			pSendContext->isAACaudioPayload = TRUE;		}		else if (type == RM_AUDIO_AC3_TRACK) {			RMDBGLOG((ENABLE, ">> AC3 audio\n"));			pSendContext->isAACaudioPayload = FALSE;			RMGetMP4TrackSampleRate(newTrack, &(pSendContext->audioSampleRate));			RMDBGLOG((ENABLE, "sample rate %lu\n", pSendContext->audioSampleRate));		}		else {			fprintf(stderr, "unknown audio!\n");						if (newTrack) {				RMDBGLOG((ENABLE, "closing audio track\n"));				RMCloseMP4Track(pSendContext->mp4c, newTrack);			}			return RM_ERROR;		}					if (pSendContext->mp4tA) {			RMDBGLOG((ENABLE, "audio track already open, closing\n"));			RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tA);		}		pSendContext->mp4tA = newTrack;		pSendContext->audio_vop_tir = AUDIO_BASE;		pSendContext->AudioCTSTimeScale = RMGetMP4TrackTimeScale(pSendContext->mp4tA);		RMDBGLOG((ENABLE, "********** audio VOP TIR %ld, AudioCTSTimeScale %ld\n", pSendContext->audio_vop_tir, pSendContext->AudioCTSTimeScale));	} 	else		return RM_ERROR;	#ifdef WITH_MONO	{		RMuint32 i;		RMDBGLOG((ENABLE, "setup audio parameters for this track\n"));		for (i = 0; i < pSendContext->audioInstances; i++) {			RMmpeg4TrackType type;						RMGetMP4TrackType(pSendContext->mp4tA, &type);						if (type == RM_AUDIO_AAC_TRACK) {				RMDBGLOG((ENABLE, ">> set audio codec[%lu] to AAC\n", i));				pSendContext->audio_opt[i].Codec = AudioDecoder_Codec_AAC;				pSendContext->audio_opt[i].AACParams.InputFormat = 1;				pSendContext->audio_opt[i].AACParams.OutputChannels = Aac_LR;			}			else if (type == RM_AUDIO_AC3_TRACK) {				RMDBGLOG((ENABLE, ">> set audio codec[%lu] to AC3\n", i));				pSendContext->audio_opt[i].Codec = AudioDecoder_Codec_AC3;							}						if (!pSendContext->audio_opt[i].OutputChannelsExplicitAssign)				pSendContext->audio_opt[i].OutputChannels = Audio_Out_Ch_LR;					}	}#endif	return RM_OK;}static RMstatus mp4_select_spu_track(struct SendMP4DataContext *pSendContext, RMuint32 index){	RMuint32 sputrackID = 0;	RMstatus status;	ExternalRMmp4Track newTrack;	if (index > pSendContext->spuTracks)		return RM_ERROR;	if (index == pSendContext->currentSPUTrack)		return RM_OK;	status = RMGetMP4SPUTrackIDByIndex(pSendContext->mp4c, index, &sputrackID);	if (status != RM_OK) {		RMDBGLOG((ENABLE, "cant get id for spu track %lu!\n", index));		return status;	}	if (sputrackID > 0) { 		RMuint8 *dsibuf;		RMuint32 dsisize;				RMDBGLOG((ENABLE, "selecting spu track %lu, id %lu\n", index, sputrackID));		newTrack = RMOpenMP4Track(pSendContext->mp4c, sputrackID);		if (!newTrack) {			RMDBGLOG((ENABLE, "couldnt open track!\n"));			return RM_ERROR;		}		dsibuf = RMGetMP4TrackDSI(newTrack, &dsisize);		RMDBGLOG((ENABLE, "got %lu bytes of spu DSI\n", dsisize));		if (dsibuf == NULL) {			RMDBGLOG((ENABLE, "spu DSI not present!\n"));			return RM_ERROR;		}		else if (dsisize > MAX_DSI_SIZE) {			RMDBGLOG((ENABLE, "spu DSI too big!\n"));			return RM_ERROR;		}		else if (dsisize == 0) {			RMDBGLOG((ENABLE, "spu DSI has size zero!!\n"));			return RM_ERROR;		}		if (pSendContext->mp4tSPU) {			RMDBGLOG((ENABLE, "spu track already open, closing\n"));			RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tSPU);		}		pSendContext->mp4tSPU = newTrack;		RMGetMP4TrackWidth(pSendContext->mp4tSPU, &(pSendContext->spuWidth));		RMGetMP4TrackHeight(pSendContext->mp4tSPU, &(pSendContext->spuHeight));		// we must do this in order to find the right value (but it is not in nero specification)		pSendContext->spuWidth >>= 16;		pSendContext->spuHeight >>= 16;		RMDBGLOG((ENABLE, "spu is %lu x %lu\n", pSendContext->spuWidth, pSendContext->spuHeight));		pSendContext->spuDSIBuf = dsibuf;		pSendContext->spuDSISize = dsisize;		pSendContext->spuCTSTimeScale = RMGetMP4TrackTimeScale(pSendContext->mp4tSPU);		RMDBGLOG((ENABLE, "spu timeScale %lu\n", pSendContext->spuCTSTimeScale));	} 	else		return RM_ERROR;	return RM_OK;}static RMstatus mp4_select_subtitle_track(struct SendMP4DataContext *pSendContext, RMuint32 index){	RMuint32 subtitletrackID = 0;	RMstatus status;	if (index > pSendContext->subtitleTracks)		return RM_ERROR;	if (index == pSendContext->currentSubtitleTrack)		return RM_OK;	status = RMGetMP4SubtitleTrackIDByIndex(pSendContext->mp4c, index, &subtitletrackID);	if (status != RM_OK) {		RMDBGLOG((ENABLE, "cant get id for subtitle track %lu!\n", index));		return status;	}	if (pSendContext->mp4tSubT) {		RMDBGLOG((ENABLE, "subtitle track already open, closing\n"));		RMCloseMP4Track(pSendContext->mp4c, pSendContext->mp4tSubT);		pSendContext->mp4tSubT = (ExternalRMmp4Track) NULL;	}	if (subtitletrackID > 0) {		RMDBGLOG((ENABLE, "selecting subtitle track %lu, id %lu\n", index, subtitletrackID));		pSendContext->mp4tSubT = RMOpenMP4Track(pSendContext->mp4c, subtitletrackID);		if (pSendContext->mp4tSubT == NULL) {			RMDBGLOG((ENABLE, "couldnt open subtitle track!!\n"));			return RM_ERROR;		}		pSendContext->subtCTSTimeScale = RMGetMP4TrackTimeScale(pSendContext->mp4tSubT);		RMDBGLOG((ENABLE, "subtitle timeScale %lu\n", pSendContext->subtCTSTimeScale));	} 	else		return RM_ERROR;	return RM_OK;}static RMstatus send_videoDSI(struct SendMP4DataContext * pSendContext){	RMuint32 i;	RMstatus status;	if (!pSendContext->sendVideoDSI) {		return RM_OK;	}	while (RUAGetBuffer(pSendContext->pDMA, &(pSendContext->videosample.buf),  COMMON_TIMEOUT_US) != RM_OK)		RMDBGLOG((ENABLE, "there are no free buffers for video DSI right now, retry later...\n"));	memcpy(pSendContext->videosample.buf, pSendContext->videodsiBuf, pSendContext->videodsiSize);		pSendContext->videosample.size = pSendContext->videodsiSize;	pSendContext->videosample.flags = 0;	pSendContext->video_Info.ValidFields = 0;	pSendContext->video_Info.TimeStamp = 0;	for (i = 0; i < pSendContext->videodsiSize; i++) {		RMDBGLOG((DISABLE, "videoDSI[%lu]=%02X\n", i, pSendContext->videodsiBuf[i]));	}	if (pSendContext->SendVideoData) {		while( RUASendData(pSendContext->pRUA, pSendContext->dcc_info->video_decoder, pSendContext->pDMA, 				   pSendContext->videosample.buf, 				   pSendContext->videosample.size, 				   &pSendContext->video_Info, sizeof(pSendContext->video_Info)) != RM_OK) {			RMDBGLOG((ENABLE, "waiting to send video DSI\n"));		}	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品久久久久久孕妇| 精品国产一区二区三区四区四| 国产精品国产精品国产专区不片| 国产乱子伦视频一区二区三区 | av亚洲精华国产精华精| 中文字幕欧美日本乱码一线二线| 99久久精品国产观看| 亚洲免费观看高清| 欧美撒尿777hd撒尿| 久久久久久久免费视频了| 亚洲福利一二三区| 欧美一区二区三区四区在线观看| 久久精品国产澳门| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 狠狠色丁香婷婷综合| 国产精品人人做人人爽人人添| 91丨porny丨户外露出| 日韩精品免费专区| 国产亚洲欧洲997久久综合| 成人av网站免费观看| 三级在线观看一区二区| 久久女同精品一区二区| 一本一道久久a久久精品| 天堂午夜影视日韩欧美一区二区| 久久久91精品国产一区二区三区| 91啪在线观看| 精品一区二区三区免费| 国产精品麻豆欧美日韩ww| 欧美综合一区二区| 国产精品77777竹菊影视小说| 亚洲欧美色综合| 精品国产一区二区亚洲人成毛片| 色婷婷精品久久二区二区蜜臂av| 久久国产精品99久久久久久老狼 | 中文字幕亚洲成人| 日韩免费看网站| 色婷婷av一区二区三区之一色屋| 久久草av在线| 亚洲一区二区中文在线| 国产亚洲欧洲997久久综合| 欧美日韩国产首页| av电影在线观看不卡| 精品一区在线看| 亚洲一区视频在线| 亚洲欧美综合另类在线卡通| 欧美mv日韩mv亚洲| 欧美性色aⅴ视频一区日韩精品| 午夜国产精品影院在线观看| 国产成人精品免费看| 午夜私人影院久久久久| 国产欧美日韩三区| 7777精品伊人久久久大香线蕉完整版 | 日韩一区二区精品| 一本久久精品一区二区| 福利91精品一区二区三区| 日本三级亚洲精品| 亚洲午夜日本在线观看| 《视频一区视频二区| 国产夜色精品一区二区av| 日韩女优av电影在线观看| 欧美年轻男男videosbes| 99久久精品免费看| 99久久伊人久久99| 成人一区二区三区视频在线观看| 极品瑜伽女神91| 人妖欧美一区二区| 日韩高清在线观看| 婷婷一区二区三区| 亚洲国产一区视频| 亚洲va韩国va欧美va| 亚洲国产视频网站| 亚洲小少妇裸体bbw| 亚洲中国最大av网站| 一区二区三区四区av| 亚洲精品中文字幕在线观看| 亚洲少妇30p| 亚洲精选视频免费看| 亚洲精品乱码久久久久久| 亚洲色图.com| 一区二区三区在线视频观看58| 国产精品高潮久久久久无| 中文字幕中文字幕在线一区 | 亚洲精品国产一区二区精华液 | 国产精品91一区二区| 国产成人免费xxxxxxxx| 不卡的电视剧免费网站有什么| 成人午夜视频网站| 91免费国产视频网站| 欧美三级中文字幕| 337p粉嫩大胆色噜噜噜噜亚洲| 在线不卡一区二区| 亚洲午夜一区二区| 91在线观看视频| 久久综合九色欧美综合狠狠| 丁香一区二区三区| 不卡高清视频专区| 91久久精品网| 日韩一级欧美一级| 久久久久久电影| 亚洲美女视频在线| 日韩电影在线一区| 紧缚奴在线一区二区三区| 成人自拍视频在线| 欧美日韩综合在线免费观看| 欧美精品乱码久久久久久| 欧美大黄免费观看| 国产精品亲子伦对白| 亚洲男女毛片无遮挡| 青青草原综合久久大伊人精品| 精品一区二区三区在线观看国产| 成人免费高清在线| 欧美视频你懂的| 亚洲精品一区二区三区四区高清| 国产精品视频一二三区| 亚洲亚洲人成综合网络| 国产一区二区精品久久| 色久综合一二码| 欧美电视剧在线看免费| 亚洲女与黑人做爰| 美国欧美日韩国产在线播放| 岛国一区二区三区| 在线成人免费视频| 中文字幕五月欧美| 免费观看在线综合| 色诱视频网站一区| 久久婷婷成人综合色| 亚洲自拍欧美精品| 成人性生交大片免费看在线播放| 欧美人与z0zoxxxx视频| 欧美国产综合色视频| 蜜芽一区二区三区| 日本精品一区二区三区高清| 久久一夜天堂av一区二区三区| 亚洲欧美一区二区在线观看| 精品一区二区三区香蕉蜜桃| 日本乱码高清不卡字幕| 久久久久久久久久久99999| 午夜久久福利影院| 色综合一区二区三区| 久久香蕉国产线看观看99| 日韩精品一二区| 欧美在线free| 国产精品视频一二| 国产乱码字幕精品高清av | 日本伊人精品一区二区三区观看方式| 成人黄色大片在线观看| 久久综合成人精品亚洲另类欧美 | 日本va欧美va精品| 欧美三级视频在线观看| 亚洲精品自拍动漫在线| aaa国产一区| 中文字幕乱码一区二区免费| 九九**精品视频免费播放| 3d动漫精品啪啪一区二区竹菊| 亚洲欧美日本韩国| 不卡区在线中文字幕| 国产欧美一区二区精品性色| 极品少妇xxxx精品少妇偷拍| 91精品国产高清一区二区三区 | 亚洲欧美激情插| 成人精品国产一区二区4080| 国产亚洲一区二区三区四区| 精品写真视频在线观看| 26uuu色噜噜精品一区| 激情综合色播五月| 精品国产1区2区3区| 国精产品一区一区三区mba桃花 | 亚洲国产成人av网| 在线观看日韩毛片| 亚洲一区二区三区小说| 欧美日韩一区二区三区四区五区| 亚洲综合久久久| 777色狠狠一区二区三区| 日本亚洲电影天堂| 日韩一级在线观看| 国产综合色在线视频区| 国产亚洲精品7777| 成人黄色在线网站| 亚洲视频在线一区二区| 欧美优质美女网站| 三级久久三级久久久| 精品久久人人做人人爱| 国产+成+人+亚洲欧洲自线| 国产欧美日韩另类一区| 99久久国产免费看| 亚洲国产一二三| 日韩欧美一二三四区| 国产成人综合在线| 中文字幕一区二区三区精华液| 一本色道久久综合亚洲91 | 99在线精品免费| 亚洲成人激情自拍| 精品美女在线观看| 成人一区二区视频| 亚洲线精品一区二区三区 | 久久久久国产精品麻豆ai换脸| 丁香五精品蜜臀久久久久99网站| 亚洲精品伦理在线| 日韩精品一区二区在线| 成人黄色片在线观看|