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

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

?? cdxgraph.cpp

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? CPP
字號:
//
// CDXGraph.cpp
//

#include "stdafx.h"
#include <streams.h>
#include "CDXGraph.h"

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

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

	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;
}

HRESULT	CDXGraph::QueryInterface(REFIID inIID, void ** ppvObject)
{
	HRESULT hr = E_FAIL;
	if (mGraph)
	{
		hr = mGraph->QueryInterface(inIID, ppvObject);
	}
	return hr;
}

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

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

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

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

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

IMediaEventEx * CDXGraph::GetEventHandle(void)
{
	return mEvent;
}

// 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::ResizeVideoWindow(long inLeft, long inTop, long inWidth, long inHeight)
{
	if (mVideoWindow)
	{
		long lVisible = OATRUE;
		mVideoWindow->get_Visible(&lVisible);
		// Hide the video window first
		mVideoWindow->put_Visible(OAFALSE);

		mVideoWindow->put_Left(inLeft);
		mVideoWindow->put_Top(inTop);
		mVideoWindow->put_Width(inWidth);
		mVideoWindow->put_Height(inHeight);
	
		// Restore the video window
		mVideoWindow->put_Visible(lVisible);
		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:
			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;
			}
		}
		else
		{
			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;
}

// 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::GetStopPosition(double * outPosition)
{
	if (mSeeking)
	{
		__int64 position = 0;
		if (SUCCEEDED(mSeeking->GetStopPosition(&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::SetStartStopPosition(double inStart, double inStop)
{
	if (mSeeking)
	{
		__int64 one = 10000000;
		__int64 startPos = (__int64)(one * inStart);
		__int64 stopPos  = (__int64)(one * inStop);
		HRESULT hr = mSeeking->SetPositions(&startPos, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame, 
			&stopPos, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame);
		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::SetPlaybackRate(double inRate)
{
	if (mSeeking)
	{
		if (SUCCEEDED(mSeeking->SetRate(inRate)))
		{
			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;
}


//////////////////////// 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一区二区三区免费野_久草精品视频
欧美日韩一区二区在线观看| 日韩高清一区二区| 99天天综合性| 亚洲日本免费电影| 色婷婷亚洲精品| 污片在线观看一区二区| 日韩午夜精品视频| 国产成人综合自拍| 中文幕一区二区三区久久蜜桃| 成av人片一区二区| 亚洲成人av免费| 欧美精品一区二区三区四区| 国产不卡视频在线播放| 亚洲精品日日夜夜| 3d动漫精品啪啪一区二区竹菊 | 国产福利一区二区| 中文字幕av一区二区三区| 色综合久久久久综合体| 亚洲电影中文字幕在线观看| 69久久夜色精品国产69蝌蚪网| 美腿丝袜亚洲色图| 国产精品女人毛片| 欧美性受极品xxxx喷水| 久久疯狂做爰流白浆xx| 国产精品嫩草99a| 欧美日韩视频不卡| 国产黑丝在线一区二区三区| 亚洲女同女同女同女同女同69| 欧美一区二区三区视频在线 | 成人美女视频在线看| 亚洲一区二区黄色| 久久久久一区二区三区四区| 色88888久久久久久影院野外| 日韩av在线发布| 国产精品私人自拍| 欧美日本韩国一区| 风间由美性色一区二区三区| 天天免费综合色| 国产色一区二区| 欧美日韩精品一区二区三区蜜桃| 国产永久精品大片wwwapp| 亚洲综合清纯丝袜自拍| 日本一区二区动态图| 91精品国产手机| 91免费看片在线观看| 国产中文一区二区三区| 亚洲成av人片在www色猫咪| 亚洲国产精品精华液2区45| 欧美一级艳片视频免费观看| 97久久精品人人做人人爽 | 亚洲五码中文字幕| 国产日韩欧美激情| 日韩一区二区三| 欧美日韩和欧美的一区二区| 成人免费视频网站在线观看| 九色|91porny| 日韩一区精品视频| 一区二区三区中文字幕| 国产精品久99| 国产欧美日韩一区二区三区在线观看 | 欧美一区二区免费视频| 91久久一区二区| 99re视频精品| 99久久99精品久久久久久| 国产一区二区三区综合| 久久成人免费网站| 久久精品久久久精品美女| 亚洲国产另类av| 伊人性伊人情综合网| 综合分类小说区另类春色亚洲小说欧美 | 国产精品福利电影一区二区三区四区| 久久女同互慰一区二区三区| 日韩视频国产视频| 在线成人免费视频| 日韩一区二区视频| 欧美电视剧在线观看完整版| 7799精品视频| 91精品国产高清一区二区三区蜜臀| 在线免费视频一区二区| 欧美亚洲综合久久| 欧洲精品一区二区三区在线观看| 色屁屁一区二区| 欧美色图激情小说| 欧美精品电影在线播放| 678五月天丁香亚洲综合网| 欧美日本在线看| 日韩午夜在线播放| 久久影院午夜论| 国产女人18毛片水真多成人如厕 | 亚洲午夜激情av| 午夜私人影院久久久久| 婷婷久久综合九色综合伊人色| 午夜a成v人精品| 精品一区二区日韩| 夫妻av一区二区| 欧美在线观看视频在线| 欧美一级高清片| 国产亚洲短视频| 亚洲精品日产精品乱码不卡| 亚洲第一福利一区| 久草中文综合在线| 成人网在线免费视频| 日本电影亚洲天堂一区| 91精品久久久久久久91蜜桃| xf在线a精品一区二区视频网站| 国产视频一区在线播放| 亚洲欧洲美洲综合色网| 亚洲国产一区在线观看| 麻豆一区二区在线| 99精品久久只有精品| 欧美日韩久久一区| 久久综合99re88久久爱| 国产精品家庭影院| 青青草91视频| 99久久久久久| 欧美一区二区三区免费| 亚洲国产岛国毛片在线| 亚洲成人动漫精品| 粉嫩在线一区二区三区视频| 欧美三级电影一区| 久久精品一区二区三区不卡| 伊人婷婷欧美激情| 国产美女一区二区三区| 91国偷自产一区二区开放时间 | 久久精品国产久精国产| 97久久精品人人做人人爽50路| 日韩一级片在线观看| 亚洲天堂av一区| 精品中文av资源站在线观看| 日本久久电影网| 国产日韩欧美亚洲| 日韩精品一级中文字幕精品视频免费观看 | 精品无人码麻豆乱码1区2区| 色8久久精品久久久久久蜜| 久久久久久久精| 日本不卡视频一二三区| 91蜜桃免费观看视频| 国产午夜精品理论片a级大结局| 亚洲国产精品一区二区www | 国产在线精品一区二区不卡了| 91丨porny丨户外露出| 精品国产一区久久| 天天亚洲美女在线视频| 91捆绑美女网站| 国产日韩亚洲欧美综合| 久久国产视频网| 欧美精品国产精品| 一区二区三区四区中文字幕| av亚洲精华国产精华| 国产日韩欧美高清| 国产剧情一区在线| 日韩一级片在线观看| 日本三级韩国三级欧美三级| 欧美日韩在线直播| 一区二区三区四区在线| 成人avav影音| 欧美激情在线免费观看| 国产乱码精品1区2区3区| 欧美变态tickling挠脚心| 日韩在线播放一区二区| 欧美久久久久免费| 亚洲成人午夜影院| 欧美视频你懂的| 一区二区三区在线不卡| 91福利资源站| 亚洲综合一区二区| 欧美日韩国产片| 日韩在线一区二区三区| 欧美肥大bbwbbw高潮| 五月天中文字幕一区二区| 欧美午夜精品一区二区三区| 亚洲综合无码一区二区| 欧美日韩久久不卡| 日日夜夜免费精品视频| 日韩一区二区电影在线| 国内久久精品视频| 日本一区二区三区四区| 不卡视频在线观看| 亚洲精品videosex极品| 欧美午夜理伦三级在线观看| 午夜国产不卡在线观看视频| 日韩午夜激情视频| 国产成人精品亚洲日本在线桃色 | 久国产精品韩国三级视频| 久久久久亚洲蜜桃| 99国产精品99久久久久久| 一区二区三区欧美视频| 7777女厕盗摄久久久| 国产久卡久卡久卡久卡视频精品| 国产日韩欧美麻豆| 日本精品一级二级| 久久成人久久鬼色| 国产精品传媒入口麻豆| 欧美精品v国产精品v日韩精品| 久久国内精品视频| 中文字幕五月欧美| 51午夜精品国产| 成人免费三级在线| 午夜欧美视频在线观看| 久久影视一区二区|