亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
免费观看在线色综合| 国产成人在线看| 国产一区在线精品| 成人a级免费电影| 欧美一区二区三区日韩视频| 中文字幕制服丝袜一区二区三区| 秋霞午夜av一区二区三区| 99久久er热在这里只有精品15| 日韩欧美在线网站| 午夜精品一区在线观看| jiyouzz国产精品久久| 久久只精品国产| 美女一区二区三区在线观看| 538在线一区二区精品国产| 亚洲欧洲日韩av| 国产成人免费视频精品含羞草妖精| 欧美一区二区三区视频免费播放| 怡红院av一区二区三区| 99久久久无码国产精品| 国产婷婷精品av在线| 国产中文字幕一区| 日韩写真欧美这视频| 亚洲1区2区3区4区| 欧美在线你懂的| 一区二区三区在线播| 91蝌蚪porny| 中文字幕日韩欧美一区二区三区| 岛国一区二区三区| 国产视频一区二区在线| 国产凹凸在线观看一区二区| 久久精品人人做人人综合 | 国产欧美日本一区视频| 精品一区二区三区久久久| 欧美一级理论片| 强制捆绑调教一区二区| 337p亚洲精品色噜噜| 日本中文在线一区| 欧美va亚洲va国产综合| 精品一区二区三区免费观看| 久久综合九色综合97婷婷女人 | 另类成人小视频在线| 欧美一区二区三区思思人 | 一区二区三区欧美视频| 91视视频在线直接观看在线看网页在线看| 国产午夜精品理论片a级大结局| 国产成人在线看| 国产精品人人做人人爽人人添 | 欧美国产日韩亚洲一区| thepron国产精品| 亚洲人妖av一区二区| 欧美最新大片在线看| 秋霞电影网一区二区| 国产三级精品三级| 99久久精品情趣| 午夜成人免费电影| 欧美精品一区二区三区蜜桃| av欧美精品.com| 亚洲第四色夜色| 久久这里只有精品首页| av午夜精品一区二区三区| 亚洲国产va精品久久久不卡综合| 欧美一级二级三级蜜桃| 国产成人av资源| 亚洲最新视频在线播放| 日韩欧美中文字幕精品| 99久久精品久久久久久清纯| 五月激情六月综合| 国产日产亚洲精品系列| 欧美性一二三区| 国产91高潮流白浆在线麻豆 | 日本一区二区三区高清不卡| 色94色欧美sute亚洲13| 久久精品噜噜噜成人88aⅴ| 久久精品亚洲精品国产欧美| 欧洲一区二区三区在线| 国产福利不卡视频| 亚洲福利国产精品| 国产精品久久免费看| 91精品国产品国语在线不卡| 成人激情免费电影网址| 美女一区二区视频| 亚洲毛片av在线| 国产亚洲自拍一区| 欧美一级日韩一级| 在线国产亚洲欧美| 成人性生交大片免费看中文| 美腿丝袜亚洲色图| 亚洲大尺度视频在线观看| 中文字幕精品一区二区精品绿巨人| 国产精品毛片大码女人| 91精品国产综合久久福利软件| aaa亚洲精品一二三区| 美女任你摸久久| 亚洲国产日韩a在线播放性色| 国产日韩欧美亚洲| 精品剧情v国产在线观看在线| 欧美在线视频不卡| 99久久er热在这里只有精品66| 国产精品中文字幕日韩精品| 亚洲欧美激情在线| 福利电影一区二区三区| 五月天视频一区| 亚洲婷婷在线视频| 国产日本欧美一区二区| 精品国产91亚洲一区二区三区婷婷| 欧洲一区在线电影| 在线视频国内自拍亚洲视频| 91热门视频在线观看| 粉嫩嫩av羞羞动漫久久久| 国产乱国产乱300精品| 久久99精品国产| 中文字幕一区二区三区色视频 | 九九视频精品免费| 日韩av在线发布| 香蕉成人啪国产精品视频综合网 | 日韩一区二区视频| 欧美日韩你懂得| 欧美日本不卡视频| 91精品欧美久久久久久动漫 | 91在线观看免费视频| 在线看一区二区| 99re8在线精品视频免费播放| av亚洲精华国产精华精华| eeuss影院一区二区三区| 99精品视频在线播放观看| 91视频免费播放| 欧美伊人久久久久久午夜久久久久| 日本韩国精品在线| 欧美日韩高清一区二区三区| 欧美一区午夜精品| 久久―日本道色综合久久| 精品国产99国产精品| 欧美精三区欧美精三区| 欧美色爱综合网| 日韩写真欧美这视频| 久久亚洲综合av| 中文字幕一区不卡| 午夜精品久久久久久久久| 青青草国产精品亚洲专区无| 精品无码三级在线观看视频| 成人久久18免费网站麻豆| 色综合婷婷久久| 7777精品伊人久久久大香线蕉最新版| 欧美一区二区三区在线| 欧美精品一区二区三区蜜桃| 日韩一区有码在线| 亚洲成国产人片在线观看| 久久av资源网| 一本高清dvd不卡在线观看 | 成人性生交大片免费看视频在线| 91在线一区二区三区| 精品视频在线视频| 国产女人水真多18毛片18精品视频| 亚洲欧美激情一区二区| 免费的国产精品| 色欧美88888久久久久久影院| 亚洲精品日韩综合观看成人91| 亚洲动漫第一页| 国产福利一区二区三区视频| 欧洲一区在线观看| 国产婷婷色一区二区三区四区| 夜夜嗨av一区二区三区| 国产在线精品国自产拍免费| 欧美综合亚洲图片综合区| 久久理论电影网| 亚洲超碰精品一区二区| 成人午夜精品一区二区三区| 91精品国产全国免费观看| 最新成人av在线| 国产精品一区二区三区乱码| 制服丝袜在线91| 亚洲伦理在线精品| 国产成人精品影视| 国产欧美视频一区二区| 天天综合色天天综合| 91女神在线视频| 国产精品视频线看| 精品无码三级在线观看视频| 91精品国产一区二区三区蜜臀| 综合久久久久久| 成人丝袜18视频在线观看| 欧美一级精品大片| 午夜a成v人精品| 色婷婷亚洲综合| 亚洲欧美福利一区二区| 国产成人日日夜夜| 久久久综合九色合综国产精品| 美女尤物国产一区| 91精品一区二区三区在线观看| 亚洲一二三区不卡| 欧美午夜片在线观看| 亚洲人成网站色在线观看| zzijzzij亚洲日本少妇熟睡| 欧美激情综合五月色丁香小说| 国产精品一区二区三区四区| 2020国产精品| 国产一区二区三区| 久久精品夜夜夜夜久久| 国产成人免费视频| 亚洲国产精品精华液2区45|