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

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

?? dshowtools.cpp

?? Window Mobile Capture with DirectDraw
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  Part of the Matroska Shell Extension
 *
 *  DShowTools.cpp
 *
 *  Copyright (C) Jory Stone - June 2003
 *
 *  The Matroska Shell Extension is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  The Matroska Shell Extension is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with the Matroska Shell Extension; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

/*!
    \file CxImageRenderer.cpp
		\version \$Id: DShowTools.cpp,v 1.3 2004/03/08 07:56:51 jcsston Exp $
    \brief A DirectShow Video Renderer that renders the image to a CxImage
		\author Jory Stone     <jcsston @ toughguy.net>

*/

#include "DShowTools.h"

#include "streams.h"
#include "Qedit.h"
#include "Dvdmedia.h"

/// Find a filter by it's CLISD, add it to the graph and return a pointer to the IBaseFilter of the filter
/// \param pGraph Pointer to the Filter Graph Manager.
/// \param clsid CLSID of the filter to create.
/// \param wszName A name for the filter.
/// \param ppF Receives a pointer to the filter.
HRESULT AddFilterByCLSID(IGraphBuilder *pGraph, const GUID& clsid, LPCWSTR wszName, IBaseFilter **ppF);

HRESULT FindOutputPin(IBaseFilter *pFilter, IPin **ppPin);
HRESULT FindInputPin(IBaseFilter *pFilter, IPin **ppPin);

HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister);
void RemoveGraphFromRot(DWORD pdwRegister);

extern "C" {
//Declare for assembly YUV2->RGB32 conversion
void _stdcall YUV422toRGB_MMX(void* lpIn,void* lpOut,DWORD dwFlags,DWORD dwWidth,DWORD dwHeight,DWORD dwSPitch,DWORD dwDPitch);
void _stdcall YUV422toRGB24_MMX(void* lpIn,void* lpOut,DWORD dwFlags,DWORD dwWidth,DWORD dwHeight,DWORD dwSPitch,DWORD dwDPitch);
//I don't use these, but it's nice to have the declares
void _stdcall RGBtoYCrCb_SSE2(void* lpIn,void* lpOut,DWORD dwFlags,DWORD dwWidth,DWORD dwHeight,DWORD dwSPitch,DWORD dwDPitch); 
void _stdcall RGBtoYUV422_SSE2(void* lpIn,void* lpOut,DWORD dwFlags,DWORD dwWidth,DWORD dwHeight,DWORD dwSPitch,DWORD dwDPitch); 
};

void mmx_yv12_to_yuy2(const BYTE* srcY, const BYTE* srcU, const BYTE* srcV, int src_rowsize, int src_pitch, int src_pitch_uv, 
                    BYTE* dst, int dst_pitch,
                    int height);

[uuid("5071DDEB-BFE3-48D8-9827-F2D9D6791701")]
class CxImageRenderer : public CBaseRenderer
{
public:
	CxImageRenderer(LPUNKNOWN pUnk, HRESULT* phr);
	HRESULT CheckMediaType(const CMediaType* pmt);
	HRESULT DoRenderSample(IMediaSample *pSample);
	CxImage &GetImage();
	bool GetImageOk();

protected:
	bool m_ImageValid;
	CxImage lastImage;
};

#define CRASH_PROTECT_START
#define CRASH_PROTECT_END

CFactoryTemplate g_Templates[] = 
{
  {	NULL,
	NULL,
	NULL,
	NULL,
	NULL}	
};

// Count of objects listed in g_cTemplates
int g_cTemplates = 0;//sizeof(g_Templates) / sizeof(g_Templates[0]);

extern "C" HRESULT DSHOWTOOLS_DLL_EXPORT GetDShowPreview(LPCWSTR filename, DWORD second_offset, DWORD timeout, DWORD mode, CxImage *image)
{
	DWORD lastLine;

	if (filename == NULL)
		return E_POINTER;
	if (image == NULL)
		return E_POINTER;

	if (mode == 1) {
		//Use DShow (with Internal Renderer) to get a frame of the video
		HRESULT hr = CoInitialize(NULL);
		if (FAILED(hr))	
			return E_FAIL;
#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		IGraphBuilder *pGraph;
		hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		IBaseFilter *pInputSource;
		hr = pGraph->AddSourceFilter(filename, filename, &pInputSource);
		if (FAILED(hr))
			return E_FAIL;
#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		// Crashes here on filewalkers system
		IPin *pSourceOutPin;
		hr = FindOutputPin(pInputSource, &pSourceOutPin);
		if (FAILED(hr))
			return E_FAIL;
#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		IBaseFilter *pPictureRender = new CxImageRenderer(NULL, &hr);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		hr = pGraph->AddFilter(pPictureRender, L"Render to Bitmap");
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		IPin *pRenderInPin;
		hr = FindInputPin(pPictureRender, &pRenderInPin);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		hr = pGraph->Connect(pSourceOutPin, pRenderInPin);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		//Now we try to render the graph
		IMediaControl *pControl;
		hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
		if (FAILED(hr))
			return E_FAIL;

		IMediaSeeking *pSeeking;
		hr = pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pSeeking);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		hr = pControl->Pause();
		if (FAILED(hr))
			return E_FAIL;

		OAFilterState fs;
		hr = pControl->GetState(INFINITE, &fs);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		REFERENCE_TIME rtCurrent = 10000000i64;
		rtCurrent = rtCurrent * second_offset;
		hr = pSeeking->SetPositions(&rtCurrent, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);
		if (FAILED(hr))
			return E_FAIL;

#ifdef _DEBUG
		lastLine = __LINE__;
#endif

		DWORD startTime = GetTickCount();
		DWORD thumbnailWaitTime = timeout * 1000;
		while ( !((CxImageRenderer *)pPictureRender)->GetImageOk() )
		{				
			hr = pControl->Pause();				
			hr = pControl->Run();	
			Sleep(200);
			// If we don't have a thumbnail in 5 minutes I doubt we will ever have one
			if (GetTickCount() - startTime > thumbnailWaitTime)
				break;
		};
#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		if (((CxImageRenderer *)pPictureRender)->GetImageOk())
		{
			CxImage &myImage = ((CxImageRenderer *)pPictureRender)->GetImage();
			*image = myImage;
		}
#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		// Free the DShow interfaces
		ULONG refCount = 0;
		refCount = pControl->Release();
		refCount = pSeeking->Release();
		refCount = pRenderInPin->Release();	
		refCount = pSourceOutPin->Release();
		//refCount = pPictureRender->Release();			
		refCount = pInputSource->Release();
		refCount = pGraph->Release();
		CoUninitialize();
#ifdef _DEBUG
		lastLine = __LINE__;
#endif
		
		return NOERROR;
	} else if (mode == 2) {
		//Use DShow to get a frame of the video, using IMediaDet
		HRESULT hr = CoInitialize(NULL);
		if (FAILED(hr))	
			return E_FAIL;

		IMediaDet *pMediaDet;
		hr = CoCreateInstance(CLSID_MediaDet, NULL, CLSCTX_INPROC_SERVER, IID_IMediaDet, (void **)&pMediaDet);
		if (FAILED(hr))
			return E_FAIL;
		
		hr = pMediaDet->put_Filename((BSTR)filename);
		if (FAILED(hr))
			return E_FAIL;

		long streamCount = 0;
		hr = pMediaDet->get_OutputStreams(&streamCount);
		if (FAILED(hr))
			return E_FAIL;

		AM_MEDIA_TYPE streamInfo = { 0 };
		for (int s = 0; s < streamCount; s++)
		{
			hr = pMediaDet->put_CurrentStream(s);
			hr = pMediaDet->get_StreamMediaType(&streamInfo);
			if (streamInfo.majortype == MEDIATYPE_Video)
				break;
		}
		// Determine the correct size
		VIDEOINFOHEADER *videoHeader = (VIDEOINFOHEADER *)streamInfo.pbFormat;
		image->Create(videoHeader->bmiHeader.biWidth, videoHeader->bmiHeader.biHeight, 24);

		//Alloc our buffer for the bitmap
		long bitBufferSize = videoHeader->bmiHeader.biWidth * videoHeader->bmiHeader.biHeight * 24;

		hr = pMediaDet->GetBitmapBits(second_offset, &bitBufferSize, (char *)image->GetBits(), videoHeader->bmiHeader.biWidth, videoHeader->bmiHeader.biHeight);
		if (FAILED(hr))
			return E_FAIL;

		// Free the DShow interfaces
		pMediaDet->Release();
		CoUninitialize();

	} else {
		return E_INVALIDARG;
	}
	return S_OK;
}

extern "C" HRESULT DSHOWTOOLS_DLL_EXPORT PlayFile(LPCWSTR filename, DWORD mode)
{
	HRESULT hr;
	IGraphBuilder *graphBuilder;
	DWORD dwRegister;
	IMediaControl *pMediaControl;

	hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&graphBuilder);

	if (FAILED(hr))
		return hr;

	hr = AddGraphToRot(graphBuilder, &dwRegister);

	hr = graphBuilder->RenderFile(filename, NULL);

	hr = graphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);

	hr = pMediaControl->Run();

	return hr;
}

HRESULT AddFilterByCLSID(IGraphBuilder *pGraph, const GUID& clsid, LPCWSTR wszName, IBaseFilter **ppF)
{
	if (!pGraph || ! ppF) return E_POINTER;
	*ppF = 0;
	IBaseFilter *pF = 0;
	HRESULT hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pF));
	if (SUCCEEDED(hr))
	{
		hr = pGraph->AddFilter(pF, wszName);
		if (SUCCEEDED(hr))
			*ppF = pF;
		else
			pF->Release();
	}
	return hr;
}

HRESULT FindOutputPin(IBaseFilter *pFilter, IPin **ppPin)
{
  CRASH_PROTECT_START;

	if (!pFilter || ! ppPin)
		return E_POINTER;

	*ppPin = 0;
	HRESULT hr;
	//Find the output pin of the Source Filter
	IEnumPins *pPinEnum;
	hr = pFilter->EnumPins(&pPinEnum);
	if (FAILED(hr))
	  return E_FAIL;
	IPin *pSearchPin;
	while (pPinEnum->Next(1, &pSearchPin, NULL) == S_OK)
	{
		PIN_DIRECTION pPinDir;
		hr = pSearchPin->QueryDirection(&pPinDir);
		if (FAILED(hr))
		  return E_FAIL;
		if (pPinDir == PINDIR_OUTPUT)
		{
			//Found out pin
			*ppPin = pSearchPin;
			break;
		}
	}
	pPinEnum->Release();
	return hr;

  CRASH_PROTECT_END;
}

HRESULT FindInputPin(IBaseFilter *pFilter, IPin **ppPin)
{
  CRASH_PROTECT_START;

	if (!pFilter || ! ppPin)
		return E_POINTER;

	*ppPin = 0;
	HRESULT hr;
	//Find the output pin of the Source Filter
	IEnumPins *pPinEnum;
	hr = pFilter->EnumPins(&pPinEnum);
	if (FAILED(hr))
	  return E_FAIL;

	IPin *pSearchPin;
	while (pPinEnum->Next(1, &pSearchPin, NULL) == S_OK)
	{
		PIN_DIRECTION pPinDir;
		hr = pSearchPin->QueryDirection(&pPinDir);
		if (FAILED(hr))
	    return E_FAIL;
		if (pPinDir == PINDIR_INPUT)
		{
			//Found out pin
			*ppPin = pSearchPin;
			break;
		}
	}
	pPinEnum->Release();
	return hr;

	CRASH_PROTECT_END;
}

// {004EB4C4-3EB3-462a-8626-07A44F4845C4}
static const GUID CxImageRenderer_GUID = 
{ 0x4eb4c4, 0x3eb3, 0x462a, { 0x86, 0x26, 0x7, 0xa4, 0x4f, 0x48, 0x45, 0xc4 } };


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美aaaaaa午夜精品| 精品99久久久久久| 久久精品亚洲麻豆av一区二区 | 午夜精品123| 欧美三级三级三级爽爽爽| 一区二区三区四区高清精品免费观看| 不卡电影免费在线播放一区| 亚洲免费观看高清完整版在线观看| 成人黄色免费短视频| 丁香婷婷综合网| 亚洲第一成人在线| 欧美国产日本视频| 欧美日韩国产综合一区二区三区 | 91婷婷韩国欧美一区二区| 亚洲精选视频在线| 亚洲精品一区二区三区精华液| 欧美一区日韩一区| 成人黄色av网站在线| 国产成人免费xxxxxxxx| 日韩黄色免费电影| 亚洲欧美一区二区在线观看| 欧美日韩美少妇| 欧美一区2区视频在线观看| 日韩免费看网站| 在线观看不卡视频| 国产高清一区日本| 91麻豆精品一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 丁香婷婷综合色啪| 日本精品裸体写真集在线观看| 国产成人综合亚洲91猫咪| a4yy欧美一区二区三区| 国产99一区视频免费| 91麻豆精品一区二区三区| 欧美一区二区三区免费| 国产精品久久久久一区二区三区| 日韩视频免费观看高清完整版在线观看 | 中文文精品字幕一区二区| 欧美丝袜丝nylons| 久久嫩草精品久久久久| 久久品道一品道久久精品| 自拍偷在线精品自拍偷无码专区| 欧美韩国一区二区| 五月天亚洲精品| 成人综合婷婷国产精品久久蜜臀| 国产老妇另类xxxxx| 免费成人在线影院| 91蜜桃网址入口| 国产人久久人人人人爽| 亚洲国产成人在线| 奇米888四色在线精品| 成人av高清在线| 2024国产精品视频| 国产精品免费人成网站| 奇米精品一区二区三区在线观看 | 一区二区日韩av| 波多野结衣的一区二区三区| 91精品国产免费| 一区二区三区小说| 成人性色生活片| xvideos.蜜桃一区二区| 视频一区二区中文字幕| 色婷婷精品大在线视频| 欧美日韩久久一区| 亚洲免费av观看| 99精品久久免费看蜜臀剧情介绍| 色综合久久久久网| 中文字幕一区二区三| 国产成人午夜电影网| 国产亚洲短视频| 韩日欧美一区二区三区| 国产成人亚洲综合a∨婷婷| 日韩精品一区二区三区中文不卡 | 亚洲国产精品成人久久综合一区| 精品一区二区三区香蕉蜜桃| 国产精品亚洲一区二区三区在线 | 91免费小视频| 国产精品美女久久久久aⅴ| 国产高清精品在线| 欧美国产欧美综合| 色综合久久综合网| 亚洲一区二区三区四区在线观看| 日韩中文欧美在线| 91精品国产色综合久久不卡蜜臀 | 成人动漫一区二区在线| 中文字幕不卡在线| 色综合久久天天| 日韩精品一级二级| 日韩视频一区二区| 国产精品888| 亚洲色图欧洲色图| 欧美猛男男办公室激情| 免费人成网站在线观看欧美高清| 精品国精品国产| av不卡在线播放| 午夜欧美在线一二页| 日韩欧美一区二区三区在线| 国产乱码精品一区二区三区av| 国产精品久久久久久久久动漫 | 欧美一级一级性生活免费录像| 麻豆国产精品一区二区三区| 91丨porny丨在线| 亚洲一区二区三区在线看| 日韩精品专区在线| 成人小视频在线| 日韩精品一二三区| 日本一区二区动态图| 欧美日韩黄色影视| 国产**成人网毛片九色 | 欧美巨大另类极品videosbest| 欧美高清在线精品一区| 欧洲色大大久久| 韩国一区二区三区| 亚洲一区二区在线播放相泽| 久久久久久亚洲综合| 欧美最新大片在线看| 韩日av一区二区| 亚洲综合色婷婷| 国产日韩精品一区二区三区| 欧美人与z0zoxxxx视频| 99久久99久久综合| 狠狠色丁香婷婷综合久久片| 亚洲最大的成人av| 国产欧美综合在线观看第十页 | 美腿丝袜亚洲三区| 亚洲女同一区二区| 久久久久久久久久久电影| 欧美日韩三级一区二区| 94-欧美-setu| 国产99久久精品| 蜜臀av一区二区在线免费观看| 亚洲欧美区自拍先锋| 久久午夜电影网| 欧美一区二区女人| 欧美丝袜丝交足nylons| 色8久久人人97超碰香蕉987| 国产夫妻精品视频| 久久99久久99小草精品免视看| 亚洲综合在线视频| 中文字幕一区二区不卡| 久久久精品一品道一区| 欧美一级搡bbbb搡bbbb| 欧美在线小视频| 色综合久久综合网97色综合 | 午夜精品福利在线| 亚洲精品精品亚洲| 国产精品不卡在线| 国产精品免费视频网站| 日本一区二区动态图| 国产亚洲制服色| 中文字幕欧美日韩一区| 久久久久国产成人精品亚洲午夜| 日韩欧美电影一二三| 精品少妇一区二区三区在线播放| 国产精品影视网| 国产一区二区在线视频| 亚洲精品亚洲人成人网在线播放| 国产精品乱码一区二区三区软件| 国产日本欧美一区二区| 国产欧美精品在线观看| 中文字幕av一区二区三区免费看| 中文字幕 久热精品 视频在线| 国产精品美女久久久久久久久久久| 国产欧美一区二区精品仙草咪 | 91视频xxxx| 色94色欧美sute亚洲线路一久| 日本精品免费观看高清观看| 欧美日韩高清不卡| 日韩精品中文字幕一区二区三区 | 韩国欧美国产一区| 国产伦精品一区二区三区免费迷 | 在线观看三级视频欧美| 欧美综合欧美视频| 日韩美女一区二区三区四区| 久久久久久麻豆| 一区二区三区中文免费| 亚洲大片免费看| 国产成人免费9x9x人网站视频| 91亚洲资源网| 欧美一级高清大全免费观看| 久久久久久99久久久精品网站| 亚洲视频资源在线| 日韩综合一区二区| 成人高清免费观看| 欧美一区二区成人| 日韩理论片网站| 日韩成人免费在线| 亚洲午夜久久久久久久久久久| 欧美激情艳妇裸体舞| 亚洲国产美女搞黄色| 国产成人一级电影| 欧美精品乱人伦久久久久久| 日本一区二区免费在线观看视频| 亚洲一区二区在线播放相泽| 国产麻豆精品在线| 欧美精品日韩精品| 亚洲精品视频自拍| 国产激情一区二区三区| 欧美一区二区视频免费观看| 日韩美女啊v在线免费观看|