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

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

?? videorendererrgb.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	}
    
	return MP_RESULT_ERROR;
}

media_video_mode_t MediaVideoRendererRGB::GetVideoMode()
{
	return this->videoMode;
}

MP_RESULT MediaVideoRendererRGB::Stop()
{
	return MP_RESULT_OK;
}

RECT *MediaVideoRendererRGB::GetFullscreenRects()
{
	return NULL;
}

MP_RESULT MediaVideoRendererRGB::Draw(MediaBuffer *buffer, RECT *rect, int frameNumber, int invertFlag)
{
	HRESULT        ddrval;
	DDSURFACEDESC2 desc;
	DWORD          i;
	subtitles_t   *sub;

	if(this->lpdd && this->lpddsBack && this->lpddsPrimary && buffer) {


		ZeroMemory(&desc, sizeof(DDSURFACEDESC2));
		desc.dwSize     = sizeof(DDSURFACEDESC2);

		ddrval = this->lpddsBack->Lock(NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL);

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}

		/*
		 * 復制象素
		 */
	
		for(i=0; i < desc.dwHeight; i++) {

			memcpy((char *) desc.lpSurface + i*desc.lPitch, (char *) buffer->GetData() + (desc.dwHeight - i - 1)*this->bpp*this->width, this->width*this->bpp);
		}

		this->lpddsBack->Unlock(NULL);

		/*
		 * 如果有字幕則應用
		 */

		if(this->subtitler) {

			sub = this->subtitler->GetSubtitles(frameNumber);

			if(sub != NULL) {

				/*
				 * 顯示它們
				 */

				HDC dc;

				ddrval = this->lpddsBack->GetDC(&dc);

				if(!FAILED(ddrval)) {

					DWORD length, length2, length3;
					SetBkMode(dc, TRANSPARENT);

					switch(sub->nbSubtitles) {

					case 1:
						
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 40 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 40, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						break;

					case 2:
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						length2 = GetTabbedTextExtent(dc, sub->subtitlesText[1], 
													 strlen(sub->subtitlesText[1]),
													 0, NULL);

						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 60 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2 + 1, this->height - 40 + 1, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 60, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2, this->height - 40, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						break;

					case 3:
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						length2 = GetTabbedTextExtent(dc, sub->subtitlesText[1], 
													 strlen(sub->subtitlesText[1]),
													 0, NULL);
						length3 = GetTabbedTextExtent(dc, sub->subtitlesText[2], 
													 strlen(sub->subtitlesText[2]),
													 0, NULL);

						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 80 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2 + 1, this->height - 60 + 1, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						TextOut(dc, (this->width - length3)/2 + 1, this->height - 40 + 1, sub->subtitlesText[2], strlen(sub->subtitlesText[2]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 80, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2, this->height - 60, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						TextOut(dc, (this->width - length3)/2, this->height - 40, sub->subtitlesText[2], strlen(sub->subtitlesText[2]));
						break;
					}

					this->lpddsBack->ReleaseDC(dc);
				}
			}
		}

		/*
		 * 復制到窗口
		 */

		if(this->hwndPlayback) {

			RECT                rcRect;
			RECT                destRect;
			POINT               pt;

	        rcRect.left   = 0;
		    rcRect.top    = 0;
			rcRect.right  = this->width;
			rcRect.bottom = this->height;

			GetClientRect( this->hwndPlayback, &destRect );

			/*
			 * 壓縮rect以便放置控件
			 */


			destRect.left   += rect->left;
			destRect.right  =  rect->left + rect->right;

			destRect.top    += rect->top;
			destRect.bottom  = rect->bottom;

			pt.x = pt.y = 0;
				
			ClientToScreen( this->hwndPlayback, &pt );
			OffsetRect(&destRect, pt.x, pt.y);

			while( 1 )
			{
				ddrval = this->lpddsPrimary->Blt( &destRect, this->lpddsBack, &rcRect, DDBLT_ASYNC | DDBLT_WAIT, NULL);

				if( ddrval == DD_OK )
				{
					break;
				}

				if( ddrval == DDERR_SURFACELOST )
				{
					if(!this->lpdd->RestoreAllSurfaces())
					{
						return MP_RESULT_ERROR;
					}	
				}	

				if( ddrval != DDERR_WASSTILLDRAWING )
				{
					return MP_RESULT_ERROR;
				}
			}

			if(ddrval != DD_OK)
			{
				return MP_RESULT_ERROR;
			}

			return MP_RESULT_OK;
		}
	}

	return MP_RESULT_ERROR;
}

MP_RESULT MediaVideoRendererRGB::DrawFullscreen(MediaBuffer *buffer, int frameNumber, int invertFlag, int desktop)
{
	DDSURFACEDESC2 desc;
	DWORD          i;
	HRESULT        ddrval;
	subtitles_t   *sub;

	if(buffer && this->lpdd && this->lpddsPrimary) {

		ZeroMemory(&desc, sizeof(DDSURFACEDESC2));
		desc.dwSize = sizeof(DDSURFACEDESC2);

		this->lpddsBack->Lock(NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL);

		for(i=0; i < desc.dwHeight; i++) {

			memcpy((char *) desc.lpSurface + i*desc.lPitch, (char *) buffer->GetData() + (desc.dwHeight - i - 1)*this->bpp*this->width, this->width*this->bpp);
		}

		this->lpddsBack->Unlock(NULL);

		/*
		 * 字幕
		 */

		if(this->subtitler) {

			sub = this->subtitler->GetSubtitles(frameNumber);

			if(sub != NULL) {

				/*
				 * 顯示
				 */

				HDC dc;

				ddrval = this->lpddsBack->GetDC(&dc);

				if(!FAILED(ddrval)) {

					DWORD length, length2, length3;
					SetBkMode(dc, TRANSPARENT);

					switch(sub->nbSubtitles) {

					case 1:
						
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 40 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 40, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						break;

					case 2:
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						length2 = GetTabbedTextExtent(dc, sub->subtitlesText[1], 
													 strlen(sub->subtitlesText[1]),
													 0, NULL);

						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 60 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2 + 1, this->height - 40 + 1, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 60, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2, this->height - 40, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						break;

					case 3:
						length = GetTabbedTextExtent(dc, sub->subtitlesText[0], 
													 strlen(sub->subtitlesText[0]),
													 0, NULL);
						length2 = GetTabbedTextExtent(dc, sub->subtitlesText[1], 
													 strlen(sub->subtitlesText[1]),
													 0, NULL);
						length3 = GetTabbedTextExtent(dc, sub->subtitlesText[2], 
													 strlen(sub->subtitlesText[2]),
													 0, NULL);

						SetTextColor(dc, 0);
						TextOut(dc, (this->width - length)/2 + 1, this->height - 80 + 1, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2 + 1, this->height - 60 + 1, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						TextOut(dc, (this->width - length3)/2 + 1, this->height - 40 + 1, sub->subtitlesText[2], strlen(sub->subtitlesText[2]));
						SetTextColor(dc, 0xFFFFFF);
						TextOut(dc, (this->width - length)/2, this->height - 80, sub->subtitlesText[0], strlen(sub->subtitlesText[0]));
						TextOut(dc, (this->width - length2)/2, this->height - 60, sub->subtitlesText[1], strlen(sub->subtitlesText[1]));
						TextOut(dc, (this->width - length3)/2, this->height - 40, sub->subtitlesText[2], strlen(sub->subtitlesText[2]));
						break;
					}

					this->lpddsBack->ReleaseDC(dc);
				}
			}
		}

		/*
		 * 清除后緩沖
		 *
		 */
		/*
		 * 復制到后緩沖
		 */

		RECT rcRect, dst;

		rcRect.left   = 0;
		rcRect.top    = 0;
		rcRect.right  = this->width;
		rcRect.bottom = this->height;

		DWORD height;
		DWORD width;

		switch(options.aspect_ratio) {

		case ASPECT_RATIO_FREE:
		case ASPECT_RATIO_ORIGINAL:

			width  = this->width;
			height = this->height;
			break;

		case ASPECT_RATIO_TV:
		case ASPECT_RATIO_WIDE:
		case ASPECT_RATIO_CUSTOM:
			
			if(aspectRatios[options.aspect_ratio].yFactor < aspectRatios[options.aspect_ratio].xFactor) {

				width  = this->width;
				height = this->width*aspectRatios[options.aspect_ratio].yFactor/aspectRatios[options.aspect_ratio].xFactor;
			}
			else {
			
				height = this->height;
				width  = this->height*aspectRatios[options.aspect_ratio].xFactor/aspectRatios[options.aspect_ratio].yFactor;
			}
			break;
		}

		if(this->fullscreenWidth * height / width > this->fullscreenHeight) {

		    dst.left   = (this->fullscreenWidth - (this->fullscreenHeight * width / height)) / 2; 
			dst.top    = 0; 
			dst.right  = dst.left + (this->fullscreenHeight * width / height);
			dst.bottom = this->fullscreenHeight; 
		}
		else {

			dst.left   = 0;
			dst.top    = (this->fullscreenHeight - (this->fullscreenWidth * height / width))/2;
			dst.right  = this->fullscreenWidth;
			dst.bottom = (this->fullscreenHeight - (this->fullscreenWidth * height / width))/2 + (this->fullscreenWidth * height / width);
		}

		ddrval = this->lpddsPrimary->Blt( &dst, this->lpddsBack, &rcRect, DDBLT_ASYNC, NULL);
	
		return MP_RESULT_OK;
	}

	return MP_RESULT_ERROR;
}

MP_RESULT MediaVideoRendererRGB::Close()
{
	if(this->lpdd) {
		
		this->lpdd->RestoreDisplayMode();
		this->lpdd->SetCooperativeLevel(this->hwndPlayback, DDSCL_NORMAL);
	}

	if(this->lpddsBack) {
	
		this->lpddsBack->Release();
		this->lpddsBack = NULL;
	}

	if(this->lpddsPrimary) {
	
		this->lpddsPrimary->Release();
		this->lpddsPrimary = NULL;
	}

	if(this->lpdd) {
	
		this->lpdd->Release();
		this->lpdd = NULL;
	}

	return MP_RESULT_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色网综合在线观看| 日韩成人免费电影| 欧美mv和日韩mv国产网站| 97精品国产97久久久久久久久久久久| 舔着乳尖日韩一区| 中文字幕一区二区在线播放| 日日夜夜精品视频天天综合网| 久久久久久日产精品| 欧美日韩国产精品成人| 99视频热这里只有精品免费| 粉嫩欧美一区二区三区高清影视 | 麻豆一区二区在线| 久久久久99精品一区| 4438x成人网最大色成网站| 99久久精品免费看国产 | 久久精品人人做人人爽人人| 91免费在线看| 99精品欧美一区二区三区综合在线| 国产乱码精品一区二区三区av| 一区二区免费在线播放| 日韩av在线发布| 欧美日韩精品欧美日韩精品| 国产精品视频一二三区| 国产98色在线|日韩| 国产中文字幕精品| 精品国精品国产尤物美女| 欧美在线播放高清精品| 天堂资源在线中文精品| 五月天激情综合| 99久久99久久免费精品蜜臀| 色综合天天天天做夜夜夜夜做| 国产69精品久久99不卡| 成人av免费网站| 成人深夜在线观看| 色国产综合视频| 欧美精品精品一区| 欧美日韩美少妇| 国产视频一区二区三区在线观看| 色av成人天堂桃色av| 在线区一区二视频| 国产欧美日本一区二区三区| 日韩精品电影一区亚洲| 国产精品综合在线视频| eeuss鲁一区二区三区| 成人精品一区二区三区四区| 欧美一卡2卡三卡4卡5免费| 国产亚洲午夜高清国产拍精品 | 精品精品国产高清a毛片牛牛| 亚洲国产成人精品视频| 美腿丝袜亚洲三区| 色偷偷久久人人79超碰人人澡| 91精品啪在线观看国产60岁| 久久久91精品国产一区二区三区| 婷婷六月综合网| 国产高清不卡一区二区| 在线观看亚洲精品视频| 日韩精品一区在线| 亚洲资源在线观看| 国产综合色产在线精品| 波多野结衣亚洲一区| 久久综合久久综合久久综合| 亚洲精品一二三| 国产99精品在线观看| 欧美一区二区三区在线电影 | 狠狠色丁香久久婷婷综| 91老司机福利 在线| 欧美一级国产精品| 久久精品亚洲麻豆av一区二区| 午夜伊人狠狠久久| 成人一区二区三区视频在线观看| 日韩精品一区在线| 午夜影院久久久| 精品1区2区3区| 国产精品激情偷乱一区二区∴| 丁香桃色午夜亚洲一区二区三区| 欧美精三区欧美精三区| 欧美伊人精品成人久久综合97| 亚洲乱码一区二区三区在线观看| 老司机精品视频线观看86| 欧美色区777第一页| 国产亚洲欧美日韩俺去了| 日本成人超碰在线观看| 欧美亚洲精品一区| 亚洲成人av电影在线| 99re这里都是精品| 亚洲人成人一区二区在线观看| 免费成人美女在线观看.| 成人在线视频一区| 国产精品成人免费| 99国内精品久久| 亚洲国产欧美一区二区三区丁香婷| 91色乱码一区二区三区| 亚洲婷婷综合久久一本伊一区| 国产传媒欧美日韩成人| 国产精品不卡视频| 成人晚上爱看视频| 成人黄色综合网站| 国产精品一区二区男女羞羞无遮挡| 亚洲电影你懂得| 亚洲精品高清在线观看| 最新日韩av在线| 亚洲综合久久av| 亚洲国产日韩综合久久精品| 亚洲欧美日韩精品久久久久| 国产精品久久久久国产精品日日| 欧美一区二区三区免费视频| 99re热这里只有精品免费视频 | 欧美一区二区女人| 欧美一区二区三区视频在线| 欧美亚洲综合色| 91九色最新地址| 久久久欧美精品sm网站| 一个色妞综合视频在线观看| 国产一区 二区| 亚洲精品在线三区| 日韩在线一区二区三区| 91精品国产品国语在线不卡| 日韩高清在线电影| 波多野结衣中文字幕一区二区三区| 久久人人超碰精品| 亚洲成va人在线观看| 中文字幕一区不卡| 91精品国产欧美一区二区成人| 日韩精品高清不卡| 欧美精品123区| 成人性生交大片免费| 日本成人在线网站| 国产精品久久久久久久久动漫| 欧美日韩不卡视频| 国产亚洲欧美日韩日本| 欧美性做爰猛烈叫床潮| 激情亚洲综合在线| 综合精品久久久| 91精品国产欧美一区二区| 激情综合色综合久久| 国产成人日日夜夜| 91传媒视频在线播放| 一区二区久久久| 日本韩国一区二区| 亚洲欧美日韩国产手机在线| 日本不卡一区二区| 欧美亚男人的天堂| 中文字幕字幕中文在线中不卡视频| 国产在线一区观看| 久久在线观看免费| 欧美日韩国产天堂| 26uuuu精品一区二区| 国产日韩av一区| 一本久道久久综合中文字幕| 国产成人午夜视频| 日韩电影在线一区二区三区| 亚洲中国最大av网站| 欧美国产日韩a欧美在线观看| 精品国产一区二区三区不卡| 欧美日韩在线免费视频| 国产精品看片你懂得| 蜜臀av一区二区在线免费观看| 亚洲福利视频导航| 91亚洲精品一区二区乱码| 蜜臀国产一区二区三区在线播放 | 亚洲乱码日产精品bd| 综合欧美一区二区三区| xnxx国产精品| 中文字幕乱码久久午夜不卡| 久久免费看少妇高潮| 欧美日韩国产综合一区二区| 成人国产电影网| 日本最新不卡在线| 蜜乳av一区二区三区| 视频在线观看91| 精品一区精品二区高清| 久久电影国产免费久久电影| 国产美女精品一区二区三区| 国产精品一区二区你懂的| caoporen国产精品视频| 高清在线不卡av| 在线视频一区二区三| 在线视频观看一区| 日韩视频一区二区在线观看| 欧美r级电影在线观看| 久久久一区二区| 欧美一区二区三区四区五区 | 日韩精品一二三区| 黄色精品一二区| 黄色精品一二区| 99re66热这里只有精品3直播 | 欧美在线视频全部完| 欧美日韩二区三区| 久久免费美女视频| 日韩毛片精品高清免费| 热久久国产精品| 国产成人精品影视| 欧美日韩日日摸| 久久婷婷久久一区二区三区| 日韩欧美中文字幕精品| 亚洲国产精品黑人久久久| 久久精品亚洲精品国产欧美| 亚洲午夜一区二区| 免费高清成人在线| 欧美中文字幕久久|