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

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

?? cdxgraph.cpp

?? 簡單的COM 實際例子 用法3
?? CPP
字號:
//
// CDXGraph.cpp
//

#include "stdafx.h"
#include "CDXGraph.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////////////////////
CDXGraph::CDXGraph()
{
	mGraph        = 0;
	mMediaControl = 0;
	mEvent        = 0;
	mBasicVideo   = 0;
	mBasicAudio   = 0;
	mVideoWindow  = 0;
	mSeeking      = 0;

	mObjectTableEntry = 0;
}

CDXGraph::~CDXGraph()
{
	Release();
}

bool CDXGraph::Create(void)
{
	if (!mGraph)
	{
		if (SUCCEEDED(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
			IID_IGraphBuilder, (void **)&mGraph)))
		{
			AddToObjectTable();

			return QueryInterfaces();
		}
		mGraph = 0;
	}
	return false;
}

bool CDXGraph::QueryInterfaces(void)
{
	if (mGraph)
	{
		HRESULT hr = NOERROR;
		hr |= mGraph->QueryInterface(IID_IMediaControl, (void **)&mMediaControl);
		hr |= mGraph->QueryInterface(IID_IMediaEventEx, (void **)&mEvent);
		hr |= mGraph->QueryInterface(IID_IBasicVideo, (void **)&mBasicVideo);
		hr |= mGraph->QueryInterface(IID_IBasicAudio, (void **)&mBasicAudio);
		hr |= mGraph->QueryInterface(IID_IVideoWindow, (void **)&mVideoWindow);
		hr |= mGraph->QueryInterface(IID_IMediaSeeking, (void **)&mSeeking);
		if (mSeeking)
		{
			mSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);
		}
		return SUCCEEDED(hr);
	}
	return false;
}

void CDXGraph::Release(void)
{
	if (mSeeking)
	{
		mSeeking->Release();
		mSeeking = 0;
	}
	if (mMediaControl)
	{
		mMediaControl->Release();
		mMediaControl = 0;
	}
	if (mEvent)
	{
		mEvent->Release();
		mEvent = 0;
	}
	if (mBasicVideo)
	{
		mBasicVideo->Release();
		mBasicVideo = 0;
	}
	if (mBasicAudio)
	{
		mBasicAudio->Release();
		mBasicAudio = 0;
	}
	if (mVideoWindow)
	{
		mVideoWindow->put_Visible(OAFALSE);
		mVideoWindow->put_MessageDrain((OAHWND)NULL);
		mVideoWindow->put_Owner(OAHWND(0));
		mVideoWindow->Release();
		mVideoWindow = 0;
	}
	RemoveFromObjectTable();
	if (mGraph) 
	{
		mGraph->Release(); 
		mGraph = 0;
	}
}

bool CDXGraph::Attach(IGraphBuilder * inGraphBuilder)
{
	Release();

	if (inGraphBuilder)
	{
		inGraphBuilder->AddRef();
		mGraph = inGraphBuilder;

		AddToObjectTable();
		return QueryInterfaces();
	}
	return true;
}

IGraphBuilder * CDXGraph::GetGraph(void)
{
	return mGraph;
}

// Connect filter from the upstream output pin to the downstream input pin
bool CDXGraph::ConnectFilters(IPin * inOutputPin, IPin * inInputPin, 
							  const AM_MEDIA_TYPE * inMediaType)
{
	if (mGraph && inOutputPin && inInputPin)
	{
		HRESULT hr = mGraph->ConnectDirect(inOutputPin, inInputPin, inMediaType);
		return SUCCEEDED(hr) ? true : false;
	}
	return false;
}

void CDXGraph::DisconnectFilters(IPin * inOutputPin)
{
	if (mGraph && inOutputPin)
	{
		HRESULT hr = mGraph->Disconnect(inOutputPin);
	}
}

bool CDXGraph::SetDisplayWindow(HWND inWindow)
{	
	if (mVideoWindow)
	{
	//	long lVisible;
	//	mVideoWindow->get_Visible(&lVisible);
		// Hide the video window first
		mVideoWindow->put_Visible(OAFALSE);
		mVideoWindow->put_Owner((OAHWND)inWindow);

		RECT windowRect;
		::GetClientRect(inWindow, &windowRect);
		mVideoWindow->put_Left(0);
		mVideoWindow->put_Top(0);
		mVideoWindow->put_Width(windowRect.right - windowRect.left);
		mVideoWindow->put_Height(windowRect.bottom - windowRect.top);
		mVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);

		mVideoWindow->put_MessageDrain((OAHWND) inWindow);
		// Restore the video window
		if (inWindow != NULL)
		{
		//	mVideoWindow->put_Visible(lVisible);
			mVideoWindow->put_Visible(OATRUE);
		}
		else
		{
			mVideoWindow->put_Visible(OAFALSE);
		}
		return true;
	}
	return false;
}

bool CDXGraph::SetNotifyWindow(HWND inWindow)
{
	if (mEvent)
	{
		mEvent->SetNotifyWindow((OAHWND)inWindow, WM_GRAPHNOTIFY, 0);
		return true;
	}
	return false;
}

void CDXGraph::HandleEvent(WPARAM inWParam, LPARAM inLParam)
{
	if (mEvent)
	{
		LONG eventCode = 0, eventParam1 = 0, eventParam2 = 0;
		while (SUCCEEDED(mEvent->GetEvent(&eventCode, &eventParam1, &eventParam2, 0)))
		{
			mEvent->FreeEventParams(eventCode, eventParam1, eventParam2);
			switch (eventCode)
			{
			case EC_COMPLETE:
				break;
			
			case EC_USERABORT:
				break;

			case EC_ERRORABORT:
				break;

			default:
				break;
			}
		}
	}
}

bool CDXGraph::Run(void)
{
	if (mGraph && mMediaControl)
	{
		if (!IsRunning())
		{
			if (SUCCEEDED(mMediaControl->Run()))
			{
				return true;
			}
		}
		else
		{
			return true;
		}
	}
	return false;
}

bool CDXGraph::Stop(void)
{
	if (mGraph && mMediaControl)
	{
		if (!IsStopped())
		{	
			if (SUCCEEDED(mMediaControl->Stop()))
			{
				return true;
			}
		}
	}
	return false;
}

bool CDXGraph::Pause(void)
{
	if (mGraph && mMediaControl)
	{
		if (!IsPaused())
		{	
			if (SUCCEEDED(mMediaControl->Pause()))
			{
				return true;
			}
		}
		else
		{
			return true;
		}
	}
	return false;
}

bool CDXGraph::IsRunning(void)
{
	if (mGraph && mMediaControl)
	{
		OAFilterState state = State_Stopped;
		if (SUCCEEDED(mMediaControl->GetState(10, &state)))
		{
			return state == State_Running;
		}
	}
	return false;
}

bool CDXGraph::IsStopped(void)
{
	if (mGraph && mMediaControl)
	{
		OAFilterState state = State_Stopped;
		if (SUCCEEDED(mMediaControl->GetState(10, &state)))
		{
			return state == State_Stopped;
		}
	}
	return false;
}

bool CDXGraph::IsPaused(void)
{
	if (mGraph && mMediaControl)
	{
		OAFilterState state = State_Stopped;
		if (SUCCEEDED(mMediaControl->GetState(10, &state)))
		{
			return state == State_Paused;
		}
	}
	return false;
}

bool CDXGraph::SetFullScreen(BOOL inEnabled)
{
	if (mVideoWindow)
	{
		HRESULT hr = mVideoWindow->put_FullScreenMode(inEnabled ? OATRUE : OAFALSE);
		return SUCCEEDED(hr);
	}
	return false;
}

bool CDXGraph::GetFullScreen(void)
{
	if (mVideoWindow)
	{
		long  fullScreenMode = OAFALSE;
		mVideoWindow->get_FullScreenMode(&fullScreenMode);
		return (fullScreenMode == OATRUE);
	}
	return false;
}

bool CDXGraph::SetSyncSource(IBaseFilter * inFilter)
{
	if (inFilter)
	{
		IReferenceClock *pClock = 0;
		inFilter->QueryInterface(IID_IReferenceClock, (void**)&pClock);
		if (pClock)
		{
			// Set the graph clock.
			IMediaFilter *pMediaFilter = 0;
			mGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter);
			pMediaFilter->SetSyncSource(pClock);
			pClock->Release();
			pMediaFilter->Release();
			return true;
		}
		return false;
	}
	else
	{
		// Do not use any reference clock
		IMediaFilter *pMediaFilter = 0;
		mGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter);
		pMediaFilter->SetSyncSource(NULL);
		pMediaFilter->Release();
		return true;
	}
}

bool CDXGraph::SetDefaultSyncSource(void)
{
	if (mGraph)
	{
		HRESULT hr = mGraph->SetDefaultSyncSource();
		return SUCCEEDED(hr) ?  true : false;
	}
	return false;
}

// IMediaSeeking features
bool CDXGraph::GetCurrentPosition(double * outPosition)
{
	if (mSeeking)
	{
		__int64 position = 0;
		if (SUCCEEDED(mSeeking->GetCurrentPosition(&position)))
		{
			*outPosition = ((double)position) / 10000000.;
			return true;
		}
	}
	return false;
}

bool CDXGraph::SetCurrentPosition(double inPosition)
{
	if (mSeeking)
	{
		__int64 one = 10000000;
		__int64 position = (__int64)(one * inPosition);
		HRESULT hr = mSeeking->SetPositions(&position, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame, 
			0, AM_SEEKING_NoPositioning);
		return SUCCEEDED(hr);
	}
	return false;
}

bool CDXGraph::GetDuration(double * outDuration)
{
	if (mSeeking)
	{
		__int64 length = 0;
		if (SUCCEEDED(mSeeking->GetDuration(&length)))
		{
			*outDuration = ((double)length) / 10000000.;
			return true;
		}
	}
	return false;
}

bool CDXGraph::RenderFile(const char * inFile)
{
	if (mGraph)
	{
		WCHAR    szFilePath[MAX_PATH];
		MultiByteToWideChar(CP_ACP, 0, inFile, -1, szFilePath, MAX_PATH);
		if (SUCCEEDED(mGraph->RenderFile(szFilePath, NULL)))
		{
			return true;
		}
	}
	return false;
}

bool CDXGraph::WaitForCompletion(void)
{
	if (mEvent && IsRunning())
	{
		long  eventCode = 0;
		HRESULT hr = mEvent->WaitForCompletion(INFINITE, &eventCode);
		return SUCCEEDED(hr);
	}
	return true;
}



//////////////////////// For GraphEdit Dubug purpose /////////////////////////////
void CDXGraph::AddToObjectTable(void)
{
	IMoniker * pMoniker = 0;
    IRunningObjectTable * objectTable = 0;
    if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) 
	{
		WCHAR wsz[256];
		wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)mGraph, GetCurrentProcessId());
		HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
		if (SUCCEEDED(hr)) 
		{
			hr = objectTable->Register(0, mGraph, pMoniker, &mObjectTableEntry);
			pMoniker->Release();
		}
		objectTable->Release();
	}
}

void CDXGraph::RemoveFromObjectTable(void)
{
	IRunningObjectTable * objectTable = 0;
    if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) 
	{
        objectTable->Revoke(mObjectTableEntry);
        objectTable->Release();
		mObjectTableEntry = 0;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利资源站| 777精品伊人久久久久大香线蕉| 色婷婷亚洲婷婷| 欧美草草影院在线视频| 亚洲免费观看高清完整版在线观看 | 亚洲一区日韩精品中文字幕| 国产一区在线不卡| 日韩一级视频免费观看在线| 亚洲国产综合人成综合网站| 成人中文字幕电影| 久久综合网色—综合色88| 日日噜噜夜夜狠狠视频欧美人 | 日本精品视频一区二区三区| 欧美成人精品3d动漫h| 亚洲国产欧美在线人成| 99久久免费精品| 中文幕一区二区三区久久蜜桃| 免费成人深夜小野草| 51精品秘密在线观看| 一区二区三区不卡视频| 91视频免费看| 亚洲男人的天堂在线aⅴ视频| 成人爱爱电影网址| 中文字幕一区二区三区四区| 国产高清精品在线| 国产日产精品一区| 国产成人免费视频一区| 国产亚洲视频系列| 国产成人精品在线看| 国产日本欧美一区二区| 成人免费视频国产在线观看| 国产精品午夜久久| 99久久综合国产精品| 国产精品成人免费| 91在线观看视频| 亚洲va国产天堂va久久en| 欧美在线观看你懂的| 天堂久久久久va久久久久| 日韩欧美亚洲另类制服综合在线| 麻豆中文一区二区| 国产视频在线观看一区二区三区| 成人黄色综合网站| 亚洲精品菠萝久久久久久久| 欧美日韩色一区| 视频一区二区不卡| 精品sm捆绑视频| 国产凹凸在线观看一区二区| 亚洲欧美综合色| 欧美三级乱人伦电影| 美女诱惑一区二区| 中文字幕不卡在线| 欧美日韩国产高清一区| 国产美女主播视频一区| 亚洲视频在线一区观看| 欧美日本高清视频在线观看| 美女一区二区在线观看| 国产精品色婷婷| 88在线观看91蜜桃国自产| 国产精品一级片| 亚洲一区视频在线观看视频| 欧美xxxxx牲另类人与| a亚洲天堂av| 人人爽香蕉精品| 亚洲欧洲av在线| 欧美一区日韩一区| eeuss鲁片一区二区三区| 视频一区二区中文字幕| 国产精品无人区| 日韩欧美国产精品一区| 色婷婷久久综合| 精品在线一区二区三区| 亚洲一区影音先锋| 国产欧美一区二区精品性色 | 日本免费新一区视频| 中文字幕乱码亚洲精品一区| 777久久久精品| aaa国产一区| 国产综合成人久久大片91| 亚洲与欧洲av电影| 中文字幕欧美日韩一区| 欧美一级xxx| 欧美在线观看18| 成人白浆超碰人人人人| 黄色资源网久久资源365| 亚洲五码中文字幕| 日韩码欧中文字| 国产午夜精品久久久久久久| 欧美一二区视频| 欧美日本在线观看| 欧美午夜电影一区| 色婷婷久久综合| 91视频免费看| 99久久精品免费看| 成人黄色免费短视频| 国产精品亚洲成人| 精品一区二区三区久久久| 天天综合天天做天天综合| 亚洲精品免费在线播放| 国产精品久久久久久久久久久免费看| 欧美精品一区二区三区很污很色的| 欧美日韩aaaaaa| 欧美日韩成人在线| 欧美午夜电影网| 91老司机福利 在线| 一本一道久久a久久精品综合蜜臀| 国产精品一线二线三线精华| 免费观看在线色综合| 日本aⅴ免费视频一区二区三区| 午夜久久久久久久久| 亚洲成人一区在线| 亚洲成人动漫av| 男人的天堂久久精品| 亚洲福利一区二区| 丝袜亚洲另类丝袜在线| 蜜臀av亚洲一区中文字幕| 免费日韩伦理电影| 激情久久久久久久久久久久久久久久| 久久精品国产99国产精品| 九一久久久久久| 粉嫩蜜臀av国产精品网站| 国产99久久久国产精品潘金| 粉嫩aⅴ一区二区三区四区五区| 国产成人欧美日韩在线电影| 国产91在线|亚洲| 一本色道久久综合亚洲精品按摩| 色综合久久综合网欧美综合网| 欧美在线视频全部完| 欧美精品色综合| 久久久www免费人成精品| 国产精品三级视频| 亚洲一二三四区| 免费高清成人在线| 国产69精品久久久久毛片| 成人在线综合网站| 欧美三级视频在线| 久久―日本道色综合久久| 中文字幕一区二区5566日韩| 亚洲国产一区在线观看| 青青草精品视频| 粉嫩高潮美女一区二区三区| 日本道精品一区二区三区| 91麻豆精品91久久久久同性| 久久综合狠狠综合| 亚洲精品日产精品乱码不卡| 免费高清在线视频一区·| 成人精品视频一区二区三区| 色88888久久久久久影院按摩 | 蜜桃av一区二区三区电影| 久久机这里只有精品| 不卡区在线中文字幕| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品一品二品| 在线观看视频91| 精品国产一区a| 一区二区三区精密机械公司| 秋霞电影网一区二区| 91丨九色丨蝌蚪丨老版| 欧美tk—视频vk| 亚洲国产精品久久不卡毛片| 国产在线视频一区二区| 在线精品视频免费观看| 国产日韩欧美一区二区三区综合| 亚洲国产wwwccc36天堂| 成人av网址在线观看| 日韩欧美国产1| 亚洲高清视频中文字幕| 高清不卡一二三区| 日韩一卡二卡三卡四卡| 亚洲一区国产视频| 99久久免费精品高清特色大片| 精品国产污网站| 天天av天天翘天天综合网色鬼国产| 不卡的av网站| 久久综合久久久久88| 天天色综合成人网| 欧美三级一区二区| 亚洲嫩草精品久久| 波多野结衣中文字幕一区| 久久久久久亚洲综合| 久久国产精品色婷婷| 欧美一级二级在线观看| 视频一区在线播放| 在线播放91灌醉迷j高跟美女 | 国产精品高潮久久久久无| 激情六月婷婷久久| 欧美本精品男人aⅴ天堂| 日本美女视频一区二区| 欧美日韩极品在线观看一区| 亚洲一区二区美女| 在线这里只有精品| 亚洲综合一二区| 91成人免费电影| 亚洲一区二区黄色| 欧美色综合网站| 偷窥国产亚洲免费视频| 欧美肥妇bbw| 免费在线观看一区二区三区| 欧美电视剧在线看免费| 国产在线一区观看| 国产欧美一区二区精品性色超碰 |