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

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

?? drawyuv.cpp

?? DRAWYUV程序是用于攝像頭的數據回放,用了directshow,可以用在VC和wince都可
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				vfDest.vfBitCount = 32;
				break;

			default: 
				vfDest.vfBitCount = 0; // No support
				break;
			}			
			
			if (vfDest.vfBitCount == 0) break;

			m_dwBitCount  = vfDest.vfBitCount;

			// Create a converter
			vfSource.vfWidth = vfDest.vfWidth = nWidth;
			vfSource.vfHeight = vfDest.vfHeight = nHeight;
			vfSource.vfBitCount = SOURCE_BIT_COUNT;
			vfSource.vfFourCC = SOURCE_COLOR_SPACE;
			vfDest.vfFourCC = BI_RGB;

			m_pConverter = new Converter;
			if (!m_pConverter) break;
			
			if (!m_pConverter->Create(&vfSource, &vfDest)) break;			
		}

		/***********************************/
		/* Create a clipper for our window */
		/***********************************/
		ddrval = IDirectDraw_CreateClipper(m_lpDD, 0, &m_lpDDClipper, NULL);
		if( ddrval != DD_OK ) break;

		m_pDisplayWindow = new DisplayWindow;
		if (!m_pDisplayWindow) break;

		bRtn = m_pDisplayWindow->Create(lpszWindowName, dwStyle, x, y, nWidth, nHeight, hwndParent, fOverlay, m_lpDDSPrimary, m_lpDDClipper);
        if (!bRtn) break;
		
		ddrval = IDirectDrawClipper_SetHWnd(m_lpDDClipper, 0, m_pDisplayWindow->GetHwnd());
		if( ddrval != DD_OK ) break;

		if (!fOverlay)
		{
			ddrval = IDirectDrawSurface_SetClipper(m_lpDDSPrimary, m_lpDDClipper);
			if (ddrval != DD_OK) break;
		}

		bSuccess = TRUE;
		m_dwWidth = nWidth;
		m_dwHeight = nHeight;
		
	} while(0);
	
	if (!bSuccess)
	{
		this->Close();		
	}
	
	return bSuccess;
}

BOOL DrawYUV::Close()
{
	if (m_pDisplayWindow)
	{		
		m_bClosed = m_pDisplayWindow->Close();
		delete m_pDisplayWindow;
		m_pDisplayWindow = NULL;
	}

	if (m_pConverter)
	{
		delete m_pConverter;
		m_pConverter = NULL;
	}

	SAFE_RELEASE(m_lpDDSOverlay);
	SAFE_RELEASE(m_lpDDSBack);
	SAFE_RELEASE(m_lpDDClipper);
	SAFE_RELEASE(m_lpDDSPrimary);
	SAFE_RELEASE(m_lpDD);

	return TRUE;
}

BOOL DrawYUV::IsClose()
{
	return m_bClosed;
}

BOOL DrawYUV::SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
{
	if (m_pDisplayWindow)
	{
		return ::SetWindowPos(m_pDisplayWindow->GetHwnd(), hWndInsertAfter, x, y, cx, cy, uFlags);
	}
	
	return FALSE;
}

BOOL DrawYUV::Draw(LPBYTE lpBuffer, DWORD dwSize)
{
	if (!lpBuffer || dwSize == 0) return FALSE;

	LPBYTE lpOutput = NULL;
	HRESULT ddrval;
	RECT rectClient;// Window size and position 	
	RECT  rectDest;
	DDOVERLAYFX  ddofx;// Effects used in displaying the overlay 
	DWORD  dwFlags; 
	int nTemp = 0;
	POINT point;
	point.x = 0;
	point.y = 0;

	if (m_pConverter)
	{
		if (!m_pConverter->Convert(lpBuffer, &lpOutput)) return FALSE;
	}
	
		
	SetRect(&rectDest, 0, 0, m_dwWidth, m_dwHeight);
	
	DDSURFACEDESC  ddsd;
	ZeroMemory(&ddsd, sizeof(ddsd));
	ddsd.dwSize     = sizeof(ddsd);	

	if (m_bIsOverlay)
	{		
		ddrval = m_lpDDSOverlay->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
		if (ddrval != DD_OK) return FALSE;
		
		memcpy_MMX(ddsd.lpSurface, lpOutput == NULL ? lpBuffer : lpOutput, \
			lpOutput == NULL ? dwSize : ((m_dwWidth * m_dwHeight * m_dwBitCount) >> 3));
		
		m_lpDDSOverlay->Unlock(NULL);		
		
		/*************************/
		/* Where is the window ? */
		/*************************/
		GetWindowRect(m_pDisplayWindow->GetHwnd(), &rectClient);

		ddofx.dwSize = sizeof(DDOVERLAYFX);
		ddofx.dckSrcColorkey.dwColorSpaceLowValue  = DD_OVERLAY_COLORKEY_16BPP;
		ddofx.dckSrcColorkey.dwColorSpaceHighValue = DD_OVERLAY_COLORKEY_16BPP;
		
		ddofx.dckDestColorkey.dwColorSpaceLowValue  = DD_OVERLAY_COLORKEY_16BPP;
		ddofx.dckDestColorkey.dwColorSpaceHighValue = DD_OVERLAY_COLORKEY_16BPP;		
		
		dwFlags = DDOVER_SHOW | DDOVER_DDFX | DDOVER_KEYDESTOVERRIDE;
		
		ddrval = IDirectDrawSurface_UpdateOverlay (m_lpDDSOverlay,
												   &rectDest,
												   m_lpDDSPrimary,
												   &rectClient,
												   dwFlags,
												   &ddofx);

		
	}
	else
	{
		ddrval = m_lpDDSBack->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
		if (ddrval != DD_OK) return FALSE;
		
		memcpy_MMX(ddsd.lpSurface, lpOutput, ((m_dwWidth * m_dwHeight * m_dwBitCount) >> 3));
		
		m_lpDDSBack->Unlock(NULL);

		::GetClientRect(m_pDisplayWindow->GetHwnd(), &rectClient);
		::ClientToScreen(m_pDisplayWindow->GetHwnd(), &point);
		nTemp = rectClient.right - rectClient.left;
		rectClient.left = point.x;
		rectClient.right = point.x + nTemp;
		
		nTemp = rectClient.bottom - rectClient.top;
		rectClient.top = point.y;
		rectClient.bottom = point.y + nTemp;

		ddrval = m_lpDDSPrimary->Blt(&rectClient, m_lpDDSBack, &rectDest, DDBLT_WAIT, NULL);		
	}

	return ddrval == DD_OK;
}

BOOL DrawYUV::ShowWindow(int nCmdShow)
{
	if (m_pDisplayWindow)
	{
		return ::ShowWindow(m_pDisplayWindow->GetHwnd(), nCmdShow);
	}

	return FALSE;
}

BOOL DrawYUV::AreOverlaysSupported()
{
	DDCAPS  capsDrv;
    HRESULT ddrval;
	
	memset (&capsDrv, 0, sizeof(capsDrv));
    capsDrv.dwSize = sizeof(capsDrv);
	
	ddrval = this->m_lpDD->GetCaps(&capsDrv, NULL);
	if (ddrval != DD_OK)
	{
		return FALSE;
	}
	
	if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
	{
		return FALSE;
	}
	
	return TRUE;
}

void DrawYUV::memcpy_MMX( void *dest, const void *src, unsigned int nbytes )
{
	__asm
	{
		MOV ESI, src         ;; pointer to src, DWORD aligned
			MOV EDI, dest        ;; pointer to dst, DWORD aligned
			MOV ECX, nbytes      ;; number of bytes to copy
			MOV EDX, ECX         ;; backup number of bytes
			CMP ECX, 4           ;; less than one DWORD to copy ?
			JB $copybyte2_cc     ;; yes, must be no DWORDs to copy, maybe bytes
			SHR ECX, 2           ;; number of DWORDs to copy
			TEST EDI,7           ;; dst QWORD aligned?
			JZ $dstqaligned2_cc  ;; yes
			MOVD MM0,[ ESI ]     ;; read one DWORD from src
			MOVD [EDI ] ,MM0     ;; store one DWORD to dst
			ADD ESI,4            ;; src++
			ADD EDI,4            ;; dst++
			DEC ECX              ;; number of DWORDs to copy
$dstqaligned2_cc:
		MOV EBX,ECX          ;; number of DWORDs to copy
			SHR ECX,4            ;; number of cache lines to copy
			JZ $copyqwords2_cc   ;; no whole cache lines to copy, maybe QWORDs
			
			ALIGN 16             ;; align loop for optimal performance
$cloop2_cc:
		MOVQ MM0,[ ESI ]     ;; load first QWORD in cache line from src
			ADD EDI,64           ;; src++
			MOVQ MM1,[ ESI+8 ]   ;; load second QWORD in cache line from src
			ADD ESI,64           ;; dst++
			MOVQ MM2,[ ESI-48 ]  ;; load third QWORD in cache line from src
			MOVQ [EDI-64 ] ,MM0  ;; store first DWORD in cache line to dst
			MOVQ MM0,[ ESI-40 ]  ;; load fourth QWORD in cache line from src
			MOVQ [EDI-56 ] ,MM1  ;; store second DWORD in cache line to dst
			MOVQ MM1,[ ESI-32 ]  ;; load fifth QWORD in cache line from src
			MOVQ [EDI-48 ] ,MM2  ;; store third DWORD in cache line to dst
			MOVQ MM2,[ ESI-24 ]  ;; load sixth QWORD in cache line from src
			MOVQ [EDI-40 ] ,MM0  ;; store fourth DWORD in cache line to dst
			MOVQ MM0,[ ESI-16 ]  ;; load seventh QWORD in cache line from src
			MOVQ [EDI-32 ] ,MM1  ;; store fifth DWORD in cache line to dst
			MOVQ MM1,[ ESI-8 ]   ;; load eight QWORD in cache line from src
			MOVQ [EDI-24 ] ,MM2  ;; store sixth DWORD in cache line to dst
			MOVQ [EDI-16 ] ,MM0  ;; store seventh DWORD in cache line to dst
			DEC ECX              ;; count--
			MOVQ [EDI-8 ] ,MM1   ;; store eighth DWORD in cache line to dst
			JNZ $cloop2_cc       ;; until no more cache lines to copy
			
$copyqwords2_cc:
		MOV ECX,EBX          ;; number of DWORDs to copy
			AND EBX,0xE          ;; number of QWORDS left to copy *2
			SHR EBX, 1           ;; number of QWORDS left to copy
			JZ $copydword2_cc    ;; no QWORDs left, maybe DWORD left
			
			ALIGN 16             ;; align loop for optimal performance
			
$qloop2_cc:
		MOVQ MM0, [ESI]      ;; read QWORD from src
			MOVQ [EDI], MM0      ;; store QWORD to dst
			ADD ESI,8            ;; src++
			ADD EDI,8            ;; dst++
			SUB EBX,1            ;; count--
			JNZ $qloop2_cc       ;; until no more QWORDs left to copy
			
$copydword2_cc:
		TEST ECX, 1          ;; DWORD left to copy ?
			JZ $copybyte2_cc     ;; nope, but maybe bytes left
			MOVD MM0, [ESI]      ;; read last DWORD from src
			MOVD [EDI], MM0      ;; store last DWORD to dst
			ADD  ESI, 4          ;; 4 bytes read
			ADD  EDI, 4          ;; 4 bytes written
			
$copybyte2_cc:
		AND EDX, 0x3         ;; number of bytes left to copy
			JZ $copydone2_cc     ;; no bytes left, we're done
			
$bloop2_cc:
		MOV AH,BYTE PTR [ESI]
			MOV BYTE PTR [EDI],AH
			ADD ESI,1            ;; src++
			ADD EDI,1            ;; dst++
			SUB EDX,1            ;; count--
			JNZ $bloop2_cc       ;; until no more bytes left to copy
			
$copydone2_cc:
		EMMS                 ;; clear MMX state
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品家庭影院| 91成人网在线| 久久av资源站| 亚洲成人1区2区| 免费人成黄页网站在线一区二区| 国产欧美精品一区二区色综合 | 亚洲国产高清不卡| 中文av字幕一区| 亚洲欧美一区二区视频| 亚洲另类春色校园小说| 一区二区久久久久| 日日摸夜夜添夜夜添精品视频| 日本不卡视频在线| 蜜桃视频在线观看一区| 国产成+人+日韩+欧美+亚洲| 成人黄色免费短视频| 色av综合在线| 91麻豆精品国产91久久久资源速度 | 在线精品视频小说1| 欧美日韩小视频| 精品国产免费久久| 国产精品久久久久aaaa| 亚洲免费观看高清完整版在线观看 | 91在线观看视频| 欧美绝品在线观看成人午夜影视| 欧美高清你懂得| 中文字幕国产一区| 亚洲成人午夜电影| 国产成人综合亚洲网站| 91福利资源站| 久久久亚洲国产美女国产盗摄| 国产精品国产成人国产三级| 亚洲va中文字幕| 国产成人免费视频网站| 欧美日韩国产一区二区三区地区| 2024国产精品| 亚洲国产aⅴ成人精品无吗| 精品综合免费视频观看| 91麻豆免费观看| 久久色.com| 亚洲五月六月丁香激情| 成人午夜电影久久影院| 日韩小视频在线观看专区| 综合电影一区二区三区| 经典三级一区二区| 欧美区视频在线观看| 中文字幕人成不卡一区| 美美哒免费高清在线观看视频一区二区 | 欧美日韩激情在线| 国产精品久久久一本精品| 青娱乐精品在线视频| 色欲综合视频天天天| 久久伊人中文字幕| 日韩成人av影视| 欧洲人成人精品| 亚洲日本在线看| 丰满岳乱妇一区二区三区| 日韩一级在线观看| 午夜精品久久久久影视| 在线观看网站黄不卡| 中文字幕一区二区5566日韩| 国产成人午夜精品影院观看视频| 日韩一级片在线播放| 日韩影院在线观看| 在线成人小视频| 日韩二区在线观看| 91精品久久久久久久99蜜桃| 亚洲最快最全在线视频| 91麻豆视频网站| 一区二区三区美女视频| 色综合久久久久综合体| 亚洲欧美另类久久久精品| 91丝袜呻吟高潮美腿白嫩在线观看| 国产日韩欧美麻豆| 国产69精品久久777的优势| 国产天堂亚洲国产碰碰| 成人性生交大片免费看视频在线| 国产欧美日韩在线观看| 丁香婷婷综合色啪| 中文字幕一区日韩精品欧美| 99久久精品费精品国产一区二区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 中文字幕精品综合| eeuss鲁片一区二区三区| 国产精品三级av| 91激情在线视频| 日日摸夜夜添夜夜添国产精品| 日韩一区二区三区av| 国产剧情一区二区三区| 国产精品女主播av| 在线看日韩精品电影| 婷婷丁香久久五月婷婷| 精品久久久久久综合日本欧美 | 亚洲影视资源网| 欧美乱妇20p| 国产自产2019最新不卡| 日本一区二区三区四区在线视频 | 欧美三级电影网| 久久91精品国产91久久小草| 国产精品久久久久aaaa樱花| 欧美日韩一区二区三区在线看| 热久久免费视频| 国产精品国产三级国产普通话蜜臀| 在线视频国内自拍亚洲视频| 久久精品国产亚洲5555| 国产精品美女久久福利网站| 欧美久久久久中文字幕| 国产成人精品www牛牛影视| 亚洲精品欧美激情| 亚洲精品在线免费观看视频| 91色婷婷久久久久合中文| 日韩精彩视频在线观看| 国产精品免费av| 欧美一区二区啪啪| 色综合久久精品| 国产乱国产乱300精品| 亚洲第一av色| 亚洲丝袜制服诱惑| 精品国内二区三区| 欧洲一区在线电影| 成人一级黄色片| 另类专区欧美蜜桃臀第一页| 亚洲精品免费在线| 国产精品天美传媒| 日韩你懂的电影在线观看| 91小视频在线观看| 夫妻av一区二区| 久久99精品一区二区三区| 亚洲成人一二三| 伊人性伊人情综合网| 日本一二三不卡| 精品免费日韩av| 日韩三级免费观看| 欧美日韩欧美一区二区| 色婷婷综合久色| 99re这里只有精品首页| 国产精品456露脸| 国产一区在线观看视频| 麻豆成人久久精品二区三区红| 亚洲成人精品一区二区| 亚洲精品美国一| 亚洲美女淫视频| 亚洲精品午夜久久久| 日韩毛片在线免费观看| 国产精品视频九色porn| 亚洲国产精品黑人久久久| 久久精品视频一区二区三区| 精品国产乱码久久| 精品美女一区二区三区| 精品精品国产高清一毛片一天堂| 欧美变态口味重另类| 欧美大度的电影原声| 日韩午夜电影av| 久久久久久久久久美女| 国产日韩综合av| 国产精品萝li| 伊人一区二区三区| 亚洲国产乱码最新视频| 丝袜美腿高跟呻吟高潮一区| 日本美女一区二区| 久久国产精品免费| 国产成人免费视频| 9i在线看片成人免费| 日本道精品一区二区三区| 欧美三级日韩在线| 精品裸体舞一区二区三区| 国产亚洲精品福利| 亚洲男人都懂的| 日日噜噜夜夜狠狠视频欧美人| 全国精品久久少妇| 国产不卡免费视频| 色天天综合色天天久久| 3751色影院一区二区三区| 2021国产精品久久精品| 国产精品国产三级国产普通话三级 | 欧美色综合久久| 日韩精品一区二区三区老鸭窝| 久久亚洲一区二区三区四区| 中文字幕一区二区在线播放| 亚洲国产一区视频| 激情成人午夜视频| av爱爱亚洲一区| 91精品国产乱码| 国产精品久久久99| 日本亚洲欧美天堂免费| 丁香激情综合国产| 欧美精品v日韩精品v韩国精品v| 精品久久久三级丝袜| 亚洲激情校园春色| 国产一区二区三区蝌蚪| 在线免费不卡电影| 国产女人aaa级久久久级 | 菠萝蜜视频在线观看一区| 欧美日韩综合一区| 欧美高清在线精品一区| 麻豆久久一区二区| 欧美亚洲综合网| 国产精品久久免费看| 日韩国产欧美三级| 91网址在线看|