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

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

?? drawyuv.cpp

?? DRAWYUV程序是用于攝像頭的數據回放,用了directshow,可以用在VC和wince都可
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * DrawYUV.cpp
 *
 * Draw YUV420P raw
 *
 * DirectDraw YUV420P project
 *
 * Copyright (c) 2004-2005 for Cyansoft Studio.
 * All Rights Reserved.
 *
 * Contributor(s): ______________________________________.
 *
 * $Log: DrawYUV.cpp,v $
 * Revision 1.2  2005/01/18 12:44:23  jin.bai
 * Remove rectOverlay
 *
 * Revision 1.1  2005/01/17 13:43:00  jin.bai
 * Initial revision
 *
 *
 */
#include <windows.h>
#include <ddraw.h>

#include "DisplayWindow.h"
#include "Convert.h"
#include "DrawYUV.h"

/*
 * Overlay Destination ColorKey
 */
#define DD_OVERLAY_COLORKEY_16BPP      0x00000001 // 16 bpp only
#define DD_OVERLAY_COLORKEY_32BPP      0x0000000F // 24 & 32 bpp
#define DD_OVERLAY_COLORREF            0x000F0000 // 32, 24, and 16 bpp

#define  SOURCE_BIT_COUNT       12
#define  SOURCE_COLOR_SPACE     mmioFOURCC ('I', '4', '2', '0')  // YUV420P or I420 or IYUV

#define SAFE_RELEASE(x) {if(x){ x->Release(); x = NULL;}}

//
// Dll Entry
//
BOOL APIENTRY DllMain(HANDLE hMoudle, DWORD dwReason, LPVOID lpReserved)
{
	switch (dwReason)
	{
	case DLL_PROCESS_ATTACH:		
		break;
		
	case DLL_PROCESS_DETACH:		
		break;
		
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	default: break;
	}
	
	return TRUE;
}

DRAWYUV_API BOOL DrawYUVCreate(LPVOID *ppControl, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent/* = NULL */, BOOL fOverlay/* = FALSE */)
{
	if (!ppControl)
	{
		return FALSE;
	}	
	
	DrawYUV *pDrawYUV = new DrawYUV;
	if (pDrawYUV)
	{
		if (pDrawYUV->Create(lpszWindowName, dwStyle, x, y, nWidth, nHeight, hwndParent, fOverlay))
		{
			(*ppControl) = pDrawYUV;
			
			return TRUE;
		}
	}
	
	return FALSE;
}

DRAWYUV_API BOOL DrawYUVSetWindowPos(LPVOID pControl, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
{
	if (pControl)
	{		
		return ((DrawYUV *) pControl)->SetWindowPos(hWndInsertAfter, x, y, cx, cy, uFlags);
	}
	
	return FALSE;
}

DRAWYUV_API BOOL DrawYUVDraw(LPVOID pControl, LPBYTE lpBuffer, DWORD dwSize)
{
	if (pControl)
	{
		return ((DrawYUV *) pControl)->Draw(lpBuffer, dwSize);
	}
	
	return FALSE;
}

DRAWYUV_API BOOL DrawYUVShowWindow(LPVOID pControl, int nCmdShow)
{
	if (pControl)
	{
		return ((DrawYUV *) pControl)->ShowWindow(nCmdShow);
	}
	
	return FALSE;
}

DRAWYUV_API BOOL DrawYUVClose(LPVOID pControl)
{
	if (pControl)
	{
		BOOL bRtn = ((DrawYUV *) pControl)->Close();
		delete pControl;
		pControl = NULL;
		
		return bRtn;
	}
	
	return FALSE;
}

DRAWYUV_API BOOL DrawYUVIsClose(LPVOID pControl)
{
	if (pControl)
	{
		return ((DrawYUV *) pControl)->IsClose();
	}
	
	return FALSE;
}

//
// DrawYUV class
//
DrawYUV::DrawYUV() : m_pConverter (NULL), m_pDisplayWindow (NULL),
m_lpDD (NULL), m_lpDDSPrimary (NULL), m_lpDDClipper (NULL),
m_lpDDSBack (NULL), m_lpDDSOverlay (NULL), m_bClosed (FALSE), m_bIsOverlay (FALSE)
{

}

DrawYUV::~DrawYUV()
{
	this->Close();
}

BOOL DrawYUV::Create(LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent /* = NULL */, BOOL fOverlay /* = FALSE */)
{
	DDSURFACEDESC ddsd;	
    DDPIXELFORMAT ddPixelFormat;// Pixel format description for the overlay surface 
    HRESULT ddrval;
	BOOL bSuccess = FALSE;
	BOOL bRtn = FALSE;
	VIDEO_FORMAT_T vfSource;
	VIDEO_FORMAT_T vfDest;

	// 
	do
	{
		/*************************/
		/* Initialise DirectDraw */
		/*************************/
		ddrval = DirectDrawCreate(NULL, &m_lpDD, NULL);
		if(ddrval != DD_OK) break;

		if (fOverlay)
		{
			if (!this->AreOverlaysSupported()) break;
		}		

		ddrval = IDirectDraw_SetCooperativeLevel(m_lpDD, NULL, DDSCL_NORMAL);
		if(ddrval != DD_OK) break;
		
		/******************************/
		/* Create the primary surface */
		/******************************/
		ddsd.dwSize = sizeof(ddsd);
		ddsd.dwFlags = DDSD_CAPS;
		ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
		
		ddrval = IDirectDraw_CreateSurface(m_lpDD, &ddsd, &m_lpDDSPrimary, NULL);		
		if( ddrval != DD_OK ) break;
		
		if (fOverlay)
		{
			/******************************/
			/* Create the overlay surface */
			/******************************/
			ddPixelFormat.dwSize = sizeof(ddPixelFormat);
			ddPixelFormat.dwFlags = DDPF_FOURCC;
			ddPixelFormat.dwFourCC = SOURCE_COLOR_SPACE;
			ddPixelFormat.dwYUVBitCount = SOURCE_BIT_COUNT;
			
			ddsd.dwSize = sizeof(ddsd);
			ddsd.dwFlags = DDSD_CAPS |
				           DDSD_HEIGHT |
				           DDSD_WIDTH |
				           DDSD_PIXELFORMAT;
			ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY;
			ddsd.dwHeight = nHeight;
			ddsd.dwWidth = nWidth;
			
			memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT));
			
			ddrval = IDirectDraw_CreateSurface(m_lpDD, &ddsd, &m_lpDDSOverlay, NULL);
			
			if( ddrval != DD_OK )
			{
				ddPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
				ddPixelFormat.dwFlags = DDPF_FOURCC;
				ddPixelFormat.dwFourCC = mmioFOURCC('Y','U','Y','2');
				ddPixelFormat.dwYUVBitCount = 16;
				
				ddsd.dwSize = sizeof(DDSURFACEDESC);
				ddsd.dwFlags = DDSD_CAPS |
					           DDSD_HEIGHT |
					           DDSD_WIDTH |
					           DDSD_PIXELFORMAT;
				ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY;
				ddsd.dwHeight = nHeight;
				ddsd.dwWidth = nWidth;
				
				memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT));
				
				ddrval = IDirectDraw_CreateSurface(m_lpDD, &ddsd, &m_lpDDSOverlay, NULL);
				if( ddrval != DD_OK ) break;
				
				m_bIsOverlay = TRUE;
				m_dwBitCount  = 16;

				// Create a converter
				vfSource.vfWidth = vfDest.vfWidth = nWidth;
				vfSource.vfHeight = vfDest.vfHeight = nHeight;
				vfSource.vfBitCount = SOURCE_BIT_COUNT;
				vfSource.vfFourCC = SOURCE_COLOR_SPACE;
				vfDest.vfBitCount = 16;
				vfDest.vfFourCC = mmioFOURCC('Y','U','Y','2');

				m_pConverter = new Converter;
				if (!m_pConverter) break;

				if (!m_pConverter->Create(&vfSource, &vfDest)) break;					
			}
			else
			{
				m_bIsOverlay = TRUE;
				m_dwBitCount  = SOURCE_BIT_COUNT;
			}
		}
		else
		{
			/******************************/
			/* Create the back surface    */
			/******************************/
			ZeroMemory(&ddsd, sizeof(ddsd));
			ddsd.dwSize     = sizeof(ddsd);
			
			ddsd.dwFlags        = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
			ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
			
			ddsd.dwWidth  = nWidth;
			ddsd.dwHeight = nHeight;

			ddrval = IDirectDraw_CreateSurface(m_lpDD, &ddsd, &m_lpDDSBack, NULL);
			if( ddrval != DD_OK ) break;

			/*
			 * Now get the Physical Depth
			 */
			ZeroMemory(&ddsd, sizeof(ddsd));
			ddsd.dwSize     = sizeof(ddsd);

			ddrval = m_lpDDSPrimary->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL);
			if (ddrval != DD_OK) break;

			m_lpDDSPrimary->Unlock(NULL);
			
			switch (ddsd.ddpfPixelFormat.dwRGBBitCount)
			{
			case 16:
				if ((ddsd.ddpfPixelFormat.dwRBitMask & 0xf800) && // 1111 1000 0000 0000b
					(ddsd.ddpfPixelFormat.dwGBitMask & 0x07e0) && // 0000 0111 1110 0000b
					(ddsd.ddpfPixelFormat.dwBBitMask & 0x001f))   // 0000 0000 0001 1111b
				{
					vfDest.vfBitCount = 16; // RGB565
				}
				else if ((ddsd.ddpfPixelFormat.dwRBitMask & 0x7c00) && // 0111 1100 0000 0000b
						(ddsd.ddpfPixelFormat.dwGBitMask & 0x03e0) &&  // 0000 0011 1110 0000b
						(ddsd.ddpfPixelFormat.dwBBitMask & 0x001f))    // 0000 0000 0001 1111b
				{
					vfDest.vfBitCount = 15; // RGB555
				}
				
				break;

			case 24:
				vfDest.vfBitCount = 24;
				break;

			case 32:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区久本道91| 欧美日韩一区三区四区| 久久影院视频免费| 精品影视av免费| 久久综合av免费| 国产乱码精品一区二区三区av| 日韩欧美国产综合在线一区二区三区| 日韩av一区二| 久久嫩草精品久久久久| 国产激情一区二区三区四区| 国产精品网站一区| 日本大香伊一区二区三区| 亚洲一区二区在线播放相泽 | 久久综合国产精品| 成人性视频网站| 中文字幕综合网| 欧美人狂配大交3d怪物一区| 免费观看久久久4p| 国产日韩在线不卡| 欧美在线观看视频一区二区三区| 亚洲成人免费av| 久久影院午夜片一区| 91蜜桃免费观看视频| 五月天激情综合| 久久影院午夜论| 在线一区二区观看| 老司机精品视频导航| 日本一区二区三区高清不卡| 一本一本久久a久久精品综合麻豆| 亚洲成人激情社区| 久久免费国产精品| 欧美视频中文一区二区三区在线观看| 麻豆国产精品一区二区三区 | 在线播放欧美女士性生活| 久久99国产精品久久99 | 日韩欧美第一区| 成人综合婷婷国产精品久久| 亚洲自拍欧美精品| 久久精品视频免费观看| 91色综合久久久久婷婷| 九九久久精品视频| 亚洲国产中文字幕在线视频综合| 久久久噜噜噜久久中文字幕色伊伊| 91麻豆精品在线观看| 黄色日韩三级电影| 亚洲丰满少妇videoshd| 亚洲国产精品ⅴa在线观看| 欧美日韩一级片网站| 国产成人鲁色资源国产91色综| 偷拍日韩校园综合在线| 亚洲欧美在线高清| 久久久久9999亚洲精品| 这里只有精品99re| 在线观看免费成人| 99精品视频一区二区| 国产又粗又猛又爽又黄91精品| 午夜久久福利影院| 亚洲在线观看免费视频| 中文字幕av一区二区三区免费看 | 韩国精品免费视频| 免费精品视频最新在线| 亚洲成人av电影在线| 亚洲欧美一区二区三区久本道91 | 日韩欧美在线观看一区二区三区| 五月天丁香久久| 久久九九影视网| 欧美视频三区在线播放| 国产在线国偷精品免费看| 一区二区三区在线影院| 日韩视频免费观看高清完整版 | 久久国产生活片100| 综合久久给合久久狠狠狠97色| 精品国产伦一区二区三区观看方式 | 亚洲午夜激情av| 1区2区3区国产精品| a美女胸又www黄视频久久| 日本不卡高清视频| 午夜久久久久久久久久一区二区| 日韩美女视频一区二区| 久久久欧美精品sm网站| 日韩精品中文字幕在线不卡尤物| 欧美视频精品在线| 91久久久免费一区二区| 99麻豆久久久国产精品免费 | 欧美色综合久久| 欧美日韩中文字幕一区二区| 91麻豆国产精品久久| 成人妖精视频yjsp地址| 国产高清亚洲一区| 国产一区二区三区久久悠悠色av| 青青草成人在线观看| 日日摸夜夜添夜夜添亚洲女人| 亚洲一区精品在线| 亚洲欧美日韩国产综合| 亚洲欧美在线观看| 日韩欧美视频在线| 久久久777精品电影网影网 | 福利一区二区在线| 国产精品一区二区91| 国产精品亚洲专一区二区三区| 国内精品嫩模私拍在线| 国产一区二区三区在线看麻豆| 久久国产日韩欧美精品| 免费成人在线观看| 久99久精品视频免费观看| 麻豆91在线播放| 久久99精品久久久久久动态图| 久久99精品久久久久久动态图| 国产一区二区三区四| 成人黄页在线观看| 91最新地址在线播放| 在线观看视频91| 欧美一区二区免费| 欧美电影免费观看高清完整版| 国产欧美日韩不卡免费| 日韩美女视频一区| 亚洲3atv精品一区二区三区| 美腿丝袜亚洲一区| 国产在线国偷精品产拍免费yy| 成人国产电影网| 欧美午夜理伦三级在线观看| 欧美一区二区三区四区久久| 精品国产一二三区| 国产性色一区二区| 午夜电影网一区| 国产成人av一区二区三区在线| 91污片在线观看| 欧美日韩免费在线视频| 久久综合资源网| 亚洲人一二三区| 美女一区二区三区在线观看| 精品一区二区三区在线观看| 色综合久久久久久久久久久| 在线播放国产精品二区一二区四区 | 亚洲精品免费看| 蜜桃久久久久久久| av资源网一区| 欧美人妖巨大在线| 中文字幕免费在线观看视频一区| 亚洲午夜久久久| 欧美aⅴ一区二区三区视频| 国产成人av一区二区三区在线观看| 欧美午夜一区二区三区免费大片| 精品奇米国产一区二区三区| 国产精品国产三级国产| 免费日本视频一区| 94-欧美-setu| 久久久精品人体av艺术| 首页国产欧美久久| 国产精品夜夜嗨| 日韩一区二区在线播放| 亚洲三级免费观看| 韩国成人精品a∨在线观看| 日本大香伊一区二区三区| xfplay精品久久| 午夜精品久久久久影视| 成人高清免费观看| 久久影院视频免费| 蜜臀久久久久久久| 日本二三区不卡| 中文天堂在线一区| 国产九色精品成人porny| 777奇米四色成人影色区| 1024成人网| 东方欧美亚洲色图在线| 日韩一区二区三区四区五区六区| 亚洲激情自拍视频| 成人美女视频在线观看| 久久久另类综合| 国产在线精品国自产拍免费| 久久久久亚洲综合| 国产v日产∨综合v精品视频| 国产三级三级三级精品8ⅰ区| 国产成人亚洲综合a∨猫咪| 久久久久久久久久美女| 成人丝袜视频网| 中文字幕在线免费不卡| 色综合色综合色综合色综合色综合| 亚洲视频你懂的| 欧美亚洲一区二区在线| 亚洲曰韩产成在线| 欧美日韩精品免费观看视频| 一卡二卡欧美日韩| 精品视频色一区| 一级特黄大欧美久久久| 91黄视频在线| 亚洲一区二区三区四区五区黄| 99久久精品免费精品国产| 国产精品美女久久久久久久久| 国产精品亚洲专一区二区三区 | 国产91清纯白嫩初高中在线观看| 2023国产精品| 日韩国产精品久久| 91久久精品午夜一区二区| 亚洲一区国产视频| 91精品国产欧美一区二区成人| 老司机免费视频一区二区| 日韩欧美综合在线| 成人av一区二区三区| 亚洲免费av高清|