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

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

?? videorendereroverlay.cpp

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

#include "VideoRendererOverlay.h"

DDPIXELFORMAT ddpfOverlayFormats[] = 
{   
	{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0},  // YUY2
	{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0},  // UYVY
};

media_video_mode_t videoModes[] = 
{
	VIDEO_MODE_YUY2,
	VIDEO_MODE_UYVY,
};




MediaVideoRendererOverlay::MediaVideoRendererOverlay()
{
	this->subtitler    = NULL;
	
	this->lpdd         = NULL;
	this->lpddsPrimary = NULL;
	this->lpddsOverlay = NULL;

	this->videoMode    = VIDEO_MODE_NONE;
}

MediaVideoRendererOverlay::~MediaVideoRendererOverlay()
{
}



media_type_t MediaVideoRendererOverlay::GetType()
{
	return MEDIA_TYPE_VIDEO_RENDERER;
}

char *MediaVideoRendererOverlay::GetName()
{
	return "Overlay Video Renderer";
}

MP_RESULT MediaVideoRendererOverlay::Connect(MediaItem *item)
{


	if(item && item->GetType() == MEDIA_TYPE_SUBTITLER) {


		this->subtitler = (MediaItemSubtitler *) item;

		return MP_RESULT_OK;
	}

	return MP_RESULT_ERROR;
}

MP_RESULT MediaVideoRendererOverlay::ReleaseConnections()
{


	this->subtitler   = NULL;

	return MP_RESULT_OK;
}


DWORD         MediaVideoRendererOverlay::GetCaps()
{
	return 0;
}

MP_RESULT     MediaVideoRendererOverlay::Configure(HINSTANCE hInstance, HWND hwnd)
{
	return MP_RESULT_ERROR;
}



BOOL MediaVideoRendererOverlay::AreOverlaysSupported()
{

    DDCAPS  capsDrv;
    HRESULT ddrval;
	


    ZeroMemory(&capsDrv, sizeof(capsDrv));
    capsDrv.dwSize = sizeof(capsDrv);
 
    ddrval = this->lpdd->GetCaps(&capsDrv, NULL);
    
	if (FAILED(ddrval))
        return FALSE;
 


    if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
        return FALSE;
	
    return TRUE;
}


MP_RESULT MediaVideoRendererOverlay::Init(HWND hwnd, unsigned int width, unsigned int height)
{
	if(hwnd && width > 0 && height > 0) {
	
		HRESULT         ddrval;
	    DDSURFACEDESC2  ddsd;
	    DDSURFACEDESC2  ddsdOverlay;
		DWORD           i;
    
		this->invertFlag  = FALSE;

		ddrval = DirectDrawCreateEx(NULL, (VOID**)&this->lpdd, IID_IDirectDraw7, NULL);
		
		if( FAILED(ddrval))
			return MP_RESULT_ERROR;
    
		/*
		 * 檢查是否支持疊加
		 */

		if(!this->AreOverlaysSupported()) {

	        this->lpdd->Release();
			this->lpdd=NULL;
			return MP_RESULT_ERROR;
		}


		ddrval = this->lpdd->SetCooperativeLevel(NULL, DDSCL_NORMAL);
		
		if( FAILED(ddrval)) {

	        this->lpdd->Release();
			this->lpdd=NULL;
			return MP_RESULT_ERROR;
		}


   
	    ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));
		
		ddsd.dwSize  = sizeof(DDSURFACEDESC2);
		ddsd.dwFlags = DDSD_CAPS;
		ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    
		ddrval = this->lpdd->CreateSurface(&ddsd, &this->lpddsPrimary, NULL );

		if(FAILED(ddrval)) {

			this->lpdd->Release();
		    this->lpdd=NULL;
			return MP_RESULT_ERROR;
		}



	    ddrval = this->lpdd->CreateClipper(0, &this->lpddClipper, NULL);

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}
	
	    ddrval = this->lpddClipper->SetHWnd(0, hwnd);

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}
	
	    ddrval = this->lpddsPrimary->SetClipper(this->lpddClipper);


    
	    ZeroMemory(&ddsdOverlay, sizeof(DDSURFACEDESC2));

		ddsdOverlay.dwSize  = sizeof(DDSURFACEDESC2);

	    ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
		ddsdOverlay.dwFlags= DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
		
		ddsdOverlay.dwWidth           = width;
		ddsdOverlay.dwHeight          = height;
    
	    i = 0;
    
		do {
	
			ddsdOverlay.ddpfPixelFormat = ddpfOverlayFormats[i];
			this->videoMode = videoModes[i];

  			ddrval = this->lpdd->CreateSurface(&ddsdOverlay, &this->lpddsOverlay, NULL);
		
		} while( FAILED(ddrval) && (++i < 2) );



		if(FAILED(ddrval)) {

		    ZeroMemory(&ddsdOverlay, sizeof(DDSURFACEDESC2));
			ddsdOverlay.dwSize     = sizeof(DDSURFACEDESC2);
			
			ddsdOverlay.dwWidth           = width;
			ddsdOverlay.dwHeight          = height;
	        ddsdOverlay.dwBackBufferCount = 0;
			
			ddsdOverlay.ddsCaps.dwCaps    = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
			ddsdOverlay.dwFlags           = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
        

		    i = 0;
    
			do {
	
				ddsdOverlay.ddpfPixelFormat = ddpfOverlayFormats[i];
				this->videoMode = videoModes[i];

	 			ddrval = this->lpdd->CreateSurface(&ddsdOverlay, &this->lpddsOverlay, NULL);
		
			} while( FAILED(ddrval) && (++i < 2) );
        
			if (FAILED(ddrval)) {

				this->lpddsPrimary->Release();
				this->lpddsPrimary = NULL;

		        this->lpdd->Release();
				this->lpdd=NULL;

				this->videoMode = VIDEO_MODE_NONE;

	            return MP_RESULT_ERROR;
			}
		}

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}

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

		this->bpp    = 16;



		ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));
		ddsd.dwSize     = sizeof(DDSURFACEDESC2);
		
		ddrval = this->lpddsPrimary->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL);

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}

		this->lpddsPrimary->Unlock(NULL);

		switch(ddsd.ddpfPixelFormat.dwRGBBitCount) {

		case 8:
			return MP_RESULT_ERROR;
			break;

		case 16:
			this->physicalDepth = 16;
			break;

		case 24:
			this->physicalDepth = 24;
			break;

		case 32:
			this->physicalDepth = 32;
			break;
		}
		


		ddrval = this->lpdd->GetDisplayMode(&ddsd);


		this->fullscreenWidth  = ddsd.dwWidth;
		this->fullscreenHeight = ddsd.dwHeight;



		this->hwndPlayback = hwnd;

		return MP_RESULT_OK;
	}
    
	return MP_RESULT_ERROR;
}

MP_RESULT MediaVideoRendererOverlay::InitFullscreen(HWND hwnd, unsigned int width, unsigned int height)
{
	if(hwnd && width > 0 && height > 0) {
	
		HRESULT         ddrval;
	    DDSURFACEDESC2  ddsd;
	    DDSURFACEDESC2  ddsdOverlay;
		DWORD           i;

		this->invertFlag  = FALSE;
    
	    ddrval = DirectDrawCreateEx(NULL, (VOID**)&this->lpdd, IID_IDirectDraw7, NULL);
		
		if( FAILED(ddrval))
			return MP_RESULT_ERROR;
  

		if(!this->AreOverlaysSupported()) {

	        this->lpdd->Release();
			this->lpdd=NULL;
			return MP_RESULT_ERROR;
		}


		ddrval = this->lpdd->SetCooperativeLevel(hwnd, DDSCL_NORMAL);
		
		if( FAILED(ddrval)) {

	        this->lpdd->Release();
			this->lpdd = NULL;

			return MP_RESULT_ERROR;
		}



		DDSURFACEDESC2 ddDesc;

		memset(&ddDesc, 0, sizeof(DDSURFACEDESC2));
		ddDesc.dwSize    = sizeof(DDSURFACEDESC2);



		ddrval = this->lpdd->GetDisplayMode(&ddDesc);

		if(FAILED(ddrval)) {

	        this->lpdd->Release();
			this->lpdd=NULL;
			return MP_RESULT_ERROR;;
		}



		this->fullscreenWidth  = ddDesc.dwWidth;
		this->fullscreenHeight = ddDesc.dwHeight;


   
	    ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));
		
		ddsd.dwSize  = sizeof(DDSURFACEDESC2);
		ddsd.dwFlags = DDSD_CAPS;
		ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    
		ddrval = this->lpdd->CreateSurface(&ddsd, &this->lpddsPrimary, NULL );

		if(FAILED(ddrval)) {

			this->lpdd->Release();
		    this->lpdd=NULL;
			return MP_RESULT_ERROR;
		}


    
	    ZeroMemory(&ddsdOverlay, sizeof(DDSURFACEDESC2));

		ddsdOverlay.dwSize  = sizeof(DDSURFACEDESC2);

	    ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
		ddsdOverlay.dwFlags= DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
		
		ddsdOverlay.dwWidth           = width;
		ddsdOverlay.dwHeight          = height;
    
	    i = 0;
    
		do {
	
			ddsdOverlay.ddpfPixelFormat = ddpfOverlayFormats[i];
			this->videoMode = videoModes[i];

  			ddrval = this->lpdd->CreateSurface(&ddsdOverlay, &this->lpddsOverlay, NULL);
		
		} while( FAILED(ddrval) && (++i < 2) );



		if(FAILED(ddrval)) {

		    ZeroMemory(&ddsdOverlay, sizeof(DDSURFACEDESC2));
			ddsdOverlay.dwSize     = sizeof(DDSURFACEDESC2);
			
			ddsdOverlay.dwWidth           = width;
			ddsdOverlay.dwHeight          = height;
	        ddsdOverlay.dwBackBufferCount = 0;
			
			ddsdOverlay.ddsCaps.dwCaps    = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
			ddsdOverlay.dwFlags           = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
        

		    i = 0;
    
			do {
	
				ddsdOverlay.ddpfPixelFormat = ddpfOverlayFormats[i];
				this->videoMode = videoModes[i];

	 			ddrval = this->lpdd->CreateSurface(&ddsdOverlay, &this->lpddsOverlay, NULL);
		
			} while( FAILED(ddrval) && (++i < 2) );
        
			if (FAILED(ddrval)) {

				this->lpddsPrimary->Release();
				this->lpddsPrimary = NULL;

		        this->lpdd->Release();
				this->lpdd=NULL;

				this->videoMode = VIDEO_MODE_NONE;

	            return MP_RESULT_ERROR;
			}
		}

		if(FAILED(ddrval)) {

			return MP_RESULT_ERROR;
		}

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

		this->bpp    = 16;

		this->hwndPlayback = hwnd;

		return MP_RESULT_OK;
	}
    
	return MP_RESULT_ERROR;
}

MP_RESULT MediaVideoRendererOverlay::Stop()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕欧美国产| 久久精品国产99| 理论电影国产精品| 国产盗摄一区二区三区| 欧美精品久久一区二区三区| 国产精品美女久久久久久| 老司机精品视频一区二区三区| 91免费国产在线| 2023国产精品| 男人的天堂久久精品| 91啪九色porn原创视频在线观看| 欧美变态凌虐bdsm| 亚洲成av人片在线观看无码| 99久久国产综合色|国产精品| 日韩写真欧美这视频| 亚洲午夜免费电影| www.日本不卡| 国产欧美一区二区三区鸳鸯浴 | 日韩精品影音先锋| 亚洲精品亚洲人成人网在线播放| 国产成人精品一区二区三区网站观看| 91精品国产麻豆国产自产在线| 国产精品久久久久一区二区三区共| 国产综合色在线视频区| 日韩女优av电影在线观看| 日本亚洲三级在线| 91精品国产全国免费观看| 亚洲一区电影777| 91久久一区二区| 亚洲伦理在线免费看| 色综合天天综合狠狠| 亚洲免费在线观看视频| 91色乱码一区二区三区| 亚洲精品日日夜夜| 日本精品视频一区二区| 亚洲一区二区三区三| 欧美在线影院一区二区| 亚洲电影一区二区| 欧美卡1卡2卡| 国内精品国产成人| 国产午夜久久久久| 波多野结衣亚洲| 亚洲欧美电影院| 欧美片在线播放| 精品一区二区在线免费观看| 久久蜜桃一区二区| 高清不卡一二三区| 综合欧美一区二区三区| 欧美午夜在线观看| 秋霞电影网一区二区| 久久人人爽爽爽人久久久| 国产精品18久久久久久久久| 国产精品久久久久久久久免费丝袜| 国产69精品一区二区亚洲孕妇| 18成人在线观看| 欧美精品久久一区| 国产高清在线精品| 亚洲小说欧美激情另类| 欧美电影免费观看高清完整版在线观看 | 一本大道av一区二区在线播放 | 麻豆精品精品国产自在97香蕉| 欧美电视剧免费观看| 大白屁股一区二区视频| 亚洲一区二区影院| 精品成人a区在线观看| 99视频超级精品| 日韩中文字幕一区二区三区| 精品美女在线播放| 91小视频在线免费看| 免费观看成人av| 国产精品免费久久| 4438x成人网最大色成网站| 国产激情精品久久久第一区二区| 亚洲乱码国产乱码精品精98午夜| 911精品产国品一二三产区| 国产.欧美.日韩| 视频一区中文字幕国产| 亚洲视频一区二区免费在线观看| 欧美一区国产二区| 91在线视频网址| 久久爱另类一区二区小说| 亚洲精品国产一区二区精华液 | 亚洲精品国产无天堂网2021| 日韩三级在线免费观看| 色综合天天综合在线视频| 久久精品国产77777蜜臀| 亚洲一区二区精品视频| 欧美激情在线观看视频免费| 欧美一区二区久久| 欧美视频在线一区| 91小视频在线观看| 国产91色综合久久免费分享| 毛片av中文字幕一区二区| 亚洲小说春色综合另类电影| 亚洲欧洲成人自拍| 国产日本欧洲亚洲| www日韩大片| 日韩欧美一区二区久久婷婷| 欧美美女视频在线观看| 91色porny在线视频| 成人av在线一区二区| 国产一区91精品张津瑜| 九九国产精品视频| 蜜桃精品视频在线| 日韩av中文字幕一区二区三区| 亚洲色图制服诱惑| 中文字幕中文在线不卡住| 国产视频一区二区在线观看| 精品国产一区二区精华| 精品免费视频.| 欧美电影免费观看高清完整版在线 | 另类小说一区二区三区| 丝袜国产日韩另类美女| 亚洲高清视频在线| 亚洲一区成人在线| 亚洲成人动漫精品| 日韩精品每日更新| 男男视频亚洲欧美| 久久精品国产精品亚洲精品| 美女www一区二区| 另类小说色综合网站| 国产综合色视频| 国产一区二区电影| 粉嫩aⅴ一区二区三区四区| www.在线欧美| 欧美日韩精品系列| 日韩欧美国产午夜精品| 久久久久九九视频| 亚洲视频在线观看一区| 亚洲一区在线看| 蜜臀av一区二区三区| 国产一区二区免费看| 成人av免费在线| 色狠狠综合天天综合综合| 欧美四级电影在线观看| 欧美一级二级三级乱码| 国产欧美一区二区三区网站| 依依成人综合视频| 五月婷婷色综合| 国产福利一区二区三区| 色天天综合色天天久久| 日韩一区二区三区视频| 中文在线免费一区三区高中清不卡| 亚洲精品成人精品456| 蜜桃视频在线观看一区| 国产成人精品免费一区二区| 欧美视频在线观看一区二区| 精品久久久久久久一区二区蜜臀| 国产精品美女久久久久久久久| 亚洲高清免费观看| 粉嫩av一区二区三区在线播放| 色菇凉天天综合网| www亚洲一区| 亚洲香蕉伊在人在线观| 国产一区二区免费在线| 欧美色偷偷大香| 久久久亚洲高清| 亚洲成人激情自拍| av欧美精品.com| 日韩免费性生活视频播放| 亚洲婷婷综合色高清在线| 麻豆视频观看网址久久| 91美女片黄在线观看| 久久亚洲综合色一区二区三区| 亚洲裸体xxx| 国产成人综合视频| 91精品国产综合久久久久久漫画| 亚洲欧洲精品一区二区三区 | 欧美精品一区在线观看| 夜夜爽夜夜爽精品视频| 国产不卡视频一区| 日韩欧美一级片| 午夜精品免费在线| 色美美综合视频| 国产性天天综合网| 久久99精品国产.久久久久久 | 久久久影视传媒| 午夜免费欧美电影| 日本高清不卡一区| 国产精品久久久久影院| 国产福利一区在线| 久久久久国产精品免费免费搜索| 美国av一区二区| 欧美剧情片在线观看| 亚洲成人激情社区| 色94色欧美sute亚洲13| 国产精品色噜噜| 成人免费视频视频| 国产视频在线观看一区二区三区| 日本欧美在线观看| 在线综合视频播放| 午夜精品久久久久久久久| 欧美日韩精品一区视频| 午夜影院久久久| 欧美日韩在线一区二区| 亚洲地区一二三色| 欧美日韩一区在线观看| 亚洲成av人片在线观看| 在线播放日韩导航| 日本美女一区二区三区视频|