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

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

?? spu.c

?? SigmDesign SMP8634 media decode chip development SDK
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define ALLOW_OS_CODE 1#include <sys/types.h>#include "../samples/common.h"#include "../samples/command_ids.h"#include "rmlocalremote.h"#include "../rmremoteapi/include/rmremoteapi.h"#include "../rmrtk/include/rmrtk.h"/* #### Begin CARDEA code #### */#include "rmupnp/rmlibwmdrmnd/include/ms_cardea.h"/* #### End CARDEA code #### */#include "mono.h"/* proof of concept, the implementation of subtitles may change */#define MAX_COLS 30#define MAX_ROWS 3#define SUBTITLEDBG DISABLEvoid clear_subtitles(void);void show_subtitles(RMuint8 *string);RMstatus init_subtitle_engine(void);RMstatus insert_string_into_subtitle_buffer(RMuint8 *string);void clear_subtitle_buffer(void);extern struct dcc_context dcc_info;extern struct mono_context mono_opt;extern RMbool osd_enabled;RMbool popWordfromString(RMuint8 *string, RMuint32 sLen, RMuint8 *word, RMuint32 *index);void pushWordintoString(RMuint8 **string, RMuint8 *word);struct subtitles_context{	RMuint32 maxCharsPerRow;	RtkPoint cursor;  	RtkPoint top_left;	RtkRect char_size; 	RtkRect active_area;	RtkProp text_props;	RMuint8 text_buffer[MAX_ROWS][MAX_COLS];	RMuint32 lastValidRowIndex;	RMbool subtitles_initialised;	RMbool disable_subtitles;	RtkRect last_rect;};static struct subtitles_context subTContext = {0,}; /* in order for this init to work, the first element of the 						       structure shall not be another structure, but a RMuint32						       for example (otherwise gcc complains) *//* this is the Subtitle callback */void RMSubtitleCallback(RMuint8 *string, RMuint64 pts, RMbool usePTS){	if (subTContext.disable_subtitles)		return;	if (!osd_enabled) {		osd_enabled = TRUE;		if (mono_opt.osd_source) {#if 0			RMstatus err;			err = DCCSetSurfaceSource(dcc_info.pDCC, mono_opt.osd_scaler, mono_opt.osd_source);			if (RMFAILED(err)) {				RMDBGLOG((ENABLE, "Cannot set the surface source %d\n", err));				return;			}#else			DCCEnableVideoSource(mono_opt.osd_source, TRUE);#endif		}		else {			subTContext.disable_subtitles = TRUE;			return;		}	}	if (!subTContext.subtitles_initialised) {		RMstatus status;		status = init_subtitle_engine();		if (status != RM_OK) {			subTContext.disable_subtitles = TRUE;			return;		}		subTContext.subtitles_initialised = TRUE;				}	if (!usePTS) {                          // for now, only this case is treated		if (strlen((const char *)string) == 0)			clear_subtitles();		else			show_subtitles(string);	} 	return;}void clear_subtitles(void){	RMFRTKClearScreen(mono_opt.rtk);	clear_subtitle_buffer();	RMDBGLOG((SUBTITLEDBG, ">> clear subtitles\n"));	return;}void show_subtitles(RMuint8 *string){	RMuint32 i;	insert_string_into_subtitle_buffer(string);	for (i = 0; i <= subTContext.lastValidRowIndex; i++) {		RtkPoint cursor;		RMuint32 y;		y = subTContext.top_left.y + ((MAX_ROWS - 1 - subTContext.lastValidRowIndex) * subTContext.char_size.height);		cursor.x = subTContext.top_left.x;		cursor.y = y + (i * subTContext.char_size.height);		RMFRTKDrawString(mono_opt.rtk, (RMascii *)subTContext.text_buffer[i], &cursor, &(subTContext.text_props), &(subTContext.last_rect));	}	RMDBGLOG((SUBTITLEDBG, ">>> show: '%s'\n", string));	return;}RMstatus init_subtitle_engine(void){	if (!mono_opt.rtk)		return RM_ERROR;	subTContext.active_area.x = 0;	subTContext.active_area.y = 0;	RMFRTKGetOsdDimension(mono_opt.rtk, &(subTContext.active_area.width), &(subTContext.active_area.height), NULL);	RMFRTKClearScreen(mono_opt.rtk);	{		// reload font, use a monospaced font for subtitles		RMnonAscii *naname = RMnonAsciiFromAscii("VeraMono.ttf");		RMFRTKLoadFontFile( mono_opt.rtk, naname);		RMFreeNonAscii(naname);	}	subTContext.text_props.fgColor = 0xffffffff;	subTContext.text_props.bgColor = 0x80000000;	subTContext.text_props.scale = subTContext.active_area.width / 30;           // ??	RMFRTKGetCharSize(mono_opt.rtk, 'M', &(subTContext.text_props), &(subTContext.char_size));	if((subTContext.active_area.width < MAX_COLS * subTContext.char_size.width) ||	   (subTContext.active_area.height < MAX_ROWS * subTContext.char_size.height)) {		RMDBGLOG((ENABLE, "decrease the size of the font or the number of chars\n"			  "\tarea(%lu x %lu), char(%lu x %lu), textarea(%lu x %lu)\n",			  subTContext.active_area.width,			  subTContext.active_area.height,			  subTContext.char_size.width,			  subTContext.char_size.height,			  MAX_COLS,			  MAX_ROWS));		return RM_ERROR;	}	subTContext.top_left.x = (subTContext.active_area.width - MAX_COLS * subTContext.char_size.width) / 2;	subTContext.top_left.y = ((subTContext.active_area.height * 0.8) - (MAX_ROWS - 1) * subTContext.char_size.height);	subTContext.maxCharsPerRow = subTContext.active_area.width / subTContext.char_size.width;	RMDBGLOG((ENABLE, "\t>>> OSDArea(%lu x %lu), charArea(%lu x %lu), textArea(%lu x %lu), maxChars %lu, topleft(%lu, %lu)\n",		  subTContext.active_area.width,		  subTContext.active_area.height,		  subTContext.char_size.width,		  subTContext.char_size.height,		  MAX_COLS,		  MAX_ROWS,		  subTContext.maxCharsPerRow,		  subTContext.top_left.x,		  subTContext.top_left.y));	return RM_OK;}RMstatus insert_string_into_subtitle_buffer(RMuint8 *string){	RMuint32 sLen = strlen((const char *)string);	RMuint32 i = 0, j = 0;	RMuint8 word[32];	RMuint32 partialLen;	RMuint32 wLen;	RMuint8 *buffer;	RMbool lastWord = FALSE;	while (1) {		lastWord = popWordfromString(string, sLen, word, &i);		i++;		partialLen = strlen((const char *)subTContext.text_buffer[j]);		wLen = strlen((const char *)word);		if (partialLen + wLen + 1 > (MAX_COLS-1))			j++;		buffer = subTContext.text_buffer[j];		pushWordintoString(&buffer, word);		if ((lastWord) || (j > MAX_ROWS))			break;	}	for(i = 0; i <= j; i++)		RMDBGLOG((SUBTITLEDBG, "*********** '%s'\n", subTContext.text_buffer[i]));	subTContext.lastValidRowIndex = j;	return RM_OK;}void clear_subtitle_buffer(void){	RMuint32 i, j;	for (i = 0; i < MAX_ROWS; i++)		for (j = 0; j < MAX_COLS; j++)			subTContext.text_buffer[i][j] = '\0';	return;}RMbool popWordfromString(RMuint8 *string, RMuint32 sLen, RMuint8 *word, RMuint32 *index){	RMuint32 i = *index, j = 0;	RMuint32 wLen;	RMbool wordEnd = FALSE;	while (1) {		word[j] = string[i+j];		j++;		if (string[i+j] == ' ') {			wordEnd = TRUE;			break;		}		if (i+j > sLen)			break;	};	word[j] = '\0';		wLen = strlen((const char *)word);	*index = i + wLen;		RMDBGLOG((SUBTITLEDBG, "pop: word '%s' from string '%s', slen %lu, wlen %lu, new string '%s'\n",		  word,		  string,		  sLen,		  wLen,		  (string + *index)));	if (wordEnd)		return FALSE;	return TRUE;}void pushWordintoString(RMuint8 **string, RMuint8 *word){	RMuint32 sLen = strlen((const char *)*string);	RMuint32 wLen = strlen((const char *)word);	RMuint32 i = 0;	RMuint8 *buffer = *string;	if (sLen != 0) {		buffer[sLen] = ' ';		sLen++;	}	for (i = 0; i < wLen; i++)		buffer[i+sLen] = word[i];	buffer[i+sLen] = '\0';	*string = *string + wLen;	RMDBGLOG((SUBTITLEDBG, "push: word '%s', new string '%s', slen %lu, wlen %lu\n",		  word,		  buffer,		  sLen,		  wLen));	return;}/* END subtitle implementation *//* begin SPU implementation */RMstatus RMInitDoubleBufferOSD(RMuint32 *moduleID, struct DCCOSDProfile osdProfile, struct OSDdoubleBuffer *doubleBuffer){	enum EMhwlibMixerSourceState state;	RMuint32 mixer, scaler, src_index, mixer_src;	struct EMhwlibDisplayWindow window;	RMuint32 val;	RMuint32 pic_luma_addr[2], pic_addr[2], pic_luma_size[2], surface_addr;			RMuint8 *buf_map;	RMuint32 buf_addr, buf_size;	RMstatus err;	RMDBGLOG((ENABLE, "init doubleBuffer OSD, size %lu x %lu\n", osdProfile.Width, osdProfile.Height));	mixer = EMHWLIB_MODULE(DispMainMixer, 0);	scaler = EMHWLIB_MODULE(DispGFXMultiScaler,0);	/* set a NULL surface, this will force a full register update when next surface is set */	err = DCCSetSurfaceSource(dcc_info.pDCC, scaler, NULL);	if (RMFAILED(err)) {		fprintf(stderr, "Cannot unset gfx scaler's surface\n");		return err;	}	err = RUAExchangeProperty(dcc_info.pRUA, mixer, RMGenericPropertyID_MixerSourceIndex, &scaler, sizeof(scaler), &src_index, sizeof(src_index));	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot get scaler index\n"));		return err;	}	mixer_src = EMHWLIB_TARGET_MODULE(mixer, 0 , src_index);	state = EMhwlibMixerSourceState_Master;	window.X = 0;	window.Y = 0;	window.Width = 4096;	window.Height = 4096;	window.XPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;	window.YPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;	window.XMode = EMhwlibDisplayWindowValueMode_Relative;	window.YMode = EMhwlibDisplayWindowValueMode_Relative;	window.WidthMode = EMhwlibDisplayWindowValueMode_Relative;	window.HeightMode = EMhwlibDisplayWindowValueMode_Relative;	RUASetProperty(dcc_info.pRUA, mixer_src, RMGenericPropertyID_MixerSourceWindow, &window, sizeof(window), 0);			window.X = 0;	window.Y = 0;	window.Width = 4096;	window.Height = 4096;	window.XPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;	window.YPositionMode = EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder;	window.XMode = EMhwlibDisplayWindowValueMode_Relative;	window.YMode = EMhwlibDisplayWindowValueMode_Relative;	window.WidthMode = EMhwlibDisplayWindowValueMode_Relative;	window.HeightMode = EMhwlibDisplayWindowValueMode_Relative;	RUASetProperty(dcc_info.pRUA, scaler, RMGenericPropertyID_ScalerInputWindow, &window, sizeof(window), 0);	while((err =  RUASetProperty(dcc_info.pRUA, mixer_src, RMGenericPropertyID_MixerSourceState, &state, sizeof(state), 0))==RM_PENDING);	if (RMFAILED(err)) {		RMDBGLOG((ENABLE, "Cannot set scaler's state on mixer\n"));		return err;	}	while ((err = RUASetProperty(dcc_info.pRUA, mixer, RMGenericPropertyID_Validate, NULL, 0, 0)) == RM_PENDING);	if (RMFAILED(err)) {		fprintf(stderr, "Cannot validate mixer\n");		return err;	}	while ((err = RUASetProperty(dcc_info.pRUA, scaler, RMGenericPropertyID_Validate, NULL, 0, 0)) == RM_PENDING);	if (RMFAILED(err)) {		fprintf(stderr, "Cannot validate mixer\n");		return err;	}		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费久久精品视频| 国产精品国产三级国产普通话蜜臀| 一区二区三区av电影| 91在线视频播放| 一区二区成人在线观看| 在线观看一区不卡| 日本系列欧美系列| 欧美成人aa大片| 丁香六月综合激情| 亚洲精品国久久99热| 欧美精品在线观看播放| 久久99这里只有精品| 欧美国产综合一区二区| 日本韩国一区二区三区视频| 午夜在线成人av| 久久综合九色综合97婷婷女人 | 天天综合色天天综合色h| 日韩视频在线你懂得| 国产aⅴ精品一区二区三区色成熟| 自拍偷拍亚洲综合| 91麻豆精品久久久久蜜臀| 国产乱对白刺激视频不卡| 亚洲女同一区二区| 欧美xxxxx牲另类人与| 99re这里都是精品| 日本v片在线高清不卡在线观看| 久久综合给合久久狠狠狠97色69| 99久久99久久久精品齐齐| 丝袜诱惑制服诱惑色一区在线观看| 久久综合九色综合97婷婷女人| 91小视频在线免费看| 免费成人美女在线观看.| 亚洲欧美中日韩| 欧美不卡在线视频| 欧美主播一区二区三区| 国产精品夜夜嗨| 亚洲成人在线网站| 国产精品久久影院| 精品免费日韩av| 欧美亚洲一区二区在线观看| 国产成人激情av| 日本麻豆一区二区三区视频| 亚洲免费在线视频一区 二区| 精品国产人成亚洲区| 欧美性videosxxxxx| 高清shemale亚洲人妖| 蜜桃视频一区二区三区在线观看| 亚洲激情网站免费观看| 国产精品私人自拍| 精品国产三级电影在线观看| 在线不卡免费av| 在线观看视频一区二区欧美日韩| 国产伦精品一区二区三区免费| 午夜电影网亚洲视频| 亚洲天堂免费在线观看视频| 久久久久久影视| 欧美mv日韩mv国产| 日韩午夜在线观看视频| 欧美日本国产一区| 欧美一a一片一级一片| 色婷婷国产精品| av亚洲精华国产精华精华| 国产毛片精品国产一区二区三区| 日韩精品五月天| 日韩激情中文字幕| 亚洲成a人v欧美综合天堂| 亚洲乱码中文字幕| 国产精品大尺度| 国产精品传媒在线| 亚洲欧美日韩久久精品| 中文一区二区在线观看| 久久嫩草精品久久久久| 91精品久久久久久蜜臀| 91精品国产综合久久久久久漫画| 欧美在线免费观看视频| 欧美特级限制片免费在线观看| 91视频在线观看免费| 色综合一区二区三区| 91丝袜国产在线播放| 色婷婷久久久亚洲一区二区三区| 91欧美一区二区| 99国产一区二区三精品乱码| av不卡免费在线观看| 99久久久国产精品免费蜜臀| 波多野结衣中文字幕一区二区三区| 国产成人免费视频一区| 成人激情免费电影网址| 97精品国产露脸对白| 99re视频这里只有精品| 91论坛在线播放| 欧美日韩一区二区在线观看 | 视频在线观看91| 日韩主播视频在线| 久久99最新地址| 成人午夜激情视频| 91视频.com| 欧美美女直播网站| 日韩精品中文字幕在线不卡尤物| 精品久久五月天| 国产欧美视频一区二区| 亚洲人精品一区| 天天色图综合网| 蜜桃久久精品一区二区| 国产一区在线看| 91理论电影在线观看| 欧美日本一区二区在线观看| 欧美哺乳videos| 国产精品久久一卡二卡| 亚洲一卡二卡三卡四卡五卡| 蜜臀va亚洲va欧美va天堂 | 久久综合视频网| 亚洲日穴在线视频| 青娱乐精品在线视频| 成人aa视频在线观看| 91精品欧美综合在线观看最新| 国产日产精品一区| 亚洲一二三四在线观看| 欧美aaaaa成人免费观看视频| 成人久久18免费网站麻豆 | 精品影院一区二区久久久| 99re这里只有精品首页| 日韩欧美一区二区久久婷婷| 国产精品卡一卡二卡三| 热久久久久久久| 91麻豆产精品久久久久久| 欧美xxx久久| 亚洲成av人片在线观看无码| 国产成人精品网址| 日韩美女在线视频| 亚洲乱码精品一二三四区日韩在线| 免费日韩伦理电影| 在线视频亚洲一区| 国产精品网站在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美精品一区二区在线播放| 一区二区三区中文字幕电影| 国产一区中文字幕| 在线成人午夜影院| 亚洲图片欧美一区| 91在线视频播放| 欧美激情综合五月色丁香 | 久久久一区二区三区捆绑**| 亚洲一区二区成人在线观看| 国产成人三级在线观看| 精品国产免费一区二区三区四区| 亚洲乱码中文字幕综合| 成人激情综合网站| 久久影院午夜片一区| 免费视频一区二区| 91麻豆精品国产91久久久久久久久 | 精品视频在线看| 综合在线观看色| 成人毛片在线观看| 久久久精品中文字幕麻豆发布| 久久精品国产亚洲aⅴ| 91精品国产日韩91久久久久久| 亚洲高清中文字幕| 欧美亚洲高清一区二区三区不卡| 亚洲色图视频免费播放| 99国产欧美另类久久久精品 | 亚洲色图视频网站| 91热门视频在线观看| 亚洲色图另类专区| 99国产精品国产精品久久| 中文字幕一区二区日韩精品绯色| 国产精品一区三区| 国产午夜亚洲精品理论片色戒 | 国产福利一区二区| 久久久国产一区二区三区四区小说 | 欧美日韩在线播| 日韩中文字幕一区二区三区| 欧美一区二区三区色| 青椒成人免费视频| 精品久久国产老人久久综合| 精品一区二区三区免费播放| 亚洲精品在线一区二区| 久久99久久99精品免视看婷婷| 日韩欧美一二三区| 久久国产精品第一页| 欧美一区国产二区| 另类成人小视频在线| 日韩精品专区在线| 丁香天五香天堂综合| 亚洲婷婷国产精品电影人久久| 欧美午夜片在线观看| 日韩不卡在线观看日韩不卡视频| 日韩欧美中文一区二区| 精品无人区卡一卡二卡三乱码免费卡| 2023国产精品自拍| 成人免费视频一区二区| 亚洲精品中文在线| 欧美日韩国产一级片| 蜜桃一区二区三区在线观看| 久久久久久99久久久精品网站| av在线不卡电影| 日产精品久久久久久久性色| 久久久亚洲午夜电影| 在线看不卡av| 国内精品伊人久久久久av一坑| 国产精品萝li|