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

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

?? cdxgraph.cpp

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? 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一区二区三区免费野_久草精品视频
8x8x8国产精品| 国产精品美女久久久久久久久| 精品国产乱码久久| 亚洲免费在线电影| 韩国在线一区二区| 欧美三级电影在线观看| 国产精品国产三级国产aⅴ入口 | 日本丶国产丶欧美色综合| 日韩三级免费观看| 亚洲国产精品久久久久婷婷884| 国产一区二区三区四区在线观看| 欧美日韩成人一区| 亚洲欧美成aⅴ人在线观看 | 国产精品美女视频| 亚洲电影一级黄| 国产精品一色哟哟哟| 欧美怡红院视频| 日本一区二区三区高清不卡| 亚洲国产日日夜夜| 日韩电影一区二区三区| 国内精品久久久久影院薰衣草| 91猫先生在线| 国产欧美视频在线观看| 日本三级韩国三级欧美三级| 99国产精品久久| 久久久国际精品| 日韩精品电影在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美一区二区视频| 亚洲一线二线三线视频| 成人动漫在线一区| 精品人在线二区三区| 亚洲成人动漫一区| 91免费观看视频在线| 国产午夜精品在线观看| 久久99国内精品| 欧美一区二区视频网站| 亚洲第一成人在线| 91国产丝袜在线播放| 中文字幕在线一区二区三区| 国产91综合网| 亚洲国产精品传媒在线观看| 国产美女一区二区| 精品国产91久久久久久久妲己| 亚洲成人av免费| 欧美在线不卡视频| 亚洲精品免费在线观看| 色网综合在线观看| 一区二区国产盗摄色噜噜| 91亚洲精品一区二区乱码| 久久久久久久久久久久久久久99 | 久久久精品黄色| 捆绑调教一区二区三区| 欧美日韩aaa| 亚洲国产综合在线| 欧美三级乱人伦电影| 午夜欧美电影在线观看| 欧美男女性生活在线直播观看| 亚洲国产cao| 51午夜精品国产| 奇米888四色在线精品| 91精品国产免费| 美女视频一区二区| 久久女同精品一区二区| 国产福利一区二区三区视频| 国产精品视频一二| 91一区二区三区在线观看| 亚洲影院在线观看| 欧美高清精品3d| 美国十次综合导航| 久久无码av三级| 国产在线不卡一区| 欧美日韩在线播放| 亚洲日本va午夜在线电影| 欧美情侣在线播放| 午夜精品一区二区三区电影天堂| 欧美一区二区三区四区久久| 久久超碰97人人做人人爱| 欧美精品一区二区三区高清aⅴ | 色狠狠一区二区| 亚洲综合激情小说| 日韩精品一区二区三区视频播放 | 国产视频一区二区三区在线观看 | 免费在线看成人av| 国产亲近乱来精品视频| 色综合久久久久网| 午夜激情久久久| 国产三级欧美三级日产三级99| 99免费精品在线| 日韩黄色小视频| 国产精品视频第一区| 亚洲青青青在线视频| 51精品久久久久久久蜜臀| 亚洲一区二区在线观看视频| 国产欧美日韩精品在线| 在线观看免费一区| 波波电影院一区二区三区| 日日夜夜精品视频免费| 亚洲色图视频免费播放| 精品久久人人做人人爰| 欧美人与禽zozo性伦| 国产成人午夜高潮毛片| 久久综合色婷婷| 日韩欧美国产综合| 色综合久久综合网97色综合 | 成人综合在线网站| 亚洲成人激情综合网| 国产欧美一区二区三区鸳鸯浴| 欧美三级三级三级| 99这里都是精品| 国产美女一区二区三区| 午夜精品久久久久久久久久| 国产精品久久看| 欧美电影免费观看完整版| 欧美视频三区在线播放| aa级大片欧美| 国产成人鲁色资源国产91色综| 日本va欧美va瓶| 亚洲福利一区二区| 亚洲欧洲性图库| 国产欧美精品国产国产专区| 日韩视频一区二区三区| 欧美视频一区二| 欧洲一区二区av| 色老汉av一区二区三区| 成人av电影在线播放| 九九热在线视频观看这里只有精品| 日韩一区欧美一区| 国产欧美久久久精品影院| 日韩欧美黄色影院| 欧美成人精品高清在线播放| 日韩一级片网址| 欧美精品丝袜久久久中文字幕| 在线精品视频一区二区| 91啪亚洲精品| 色www精品视频在线观看| 成人免费看视频| 成人小视频免费观看| proumb性欧美在线观看| 不卡一区二区在线| 91蜜桃在线观看| 91丨九色丨国产丨porny| 成人午夜视频在线观看| a美女胸又www黄视频久久| 91亚洲精品久久久蜜桃| 色吧成人激情小说| 欧美日韩精品系列| 3d成人动漫网站| 欧美成人精精品一区二区频| 久久久久久久久久久久电影| 国产清纯白嫩初高生在线观看91| 日韩欧美国产综合在线一区二区三区| 9191成人精品久久| 欧美日本一区二区三区| 欧美性猛交xxxxxx富婆| 欧美性猛交一区二区三区精品| 日韩三级视频中文字幕| 久久综合五月天婷婷伊人| 国产拍欧美日韩视频二区| 亚洲免费观看高清完整版在线观看 | 国产91精品免费| 色屁屁一区二区| 欧美一级一区二区| 中文字幕的久久| 亚洲一区中文日韩| 久久99久久久欧美国产| 99re亚洲国产精品| 777a∨成人精品桃花网| 久久人人爽爽爽人久久久| 亚洲视频一区二区在线| 国产精品福利一区| 亚洲午夜免费视频| 六月丁香综合在线视频| 国产九色sp调教91| 成人黄动漫网站免费app| 欧美剧情片在线观看| 国产农村妇女毛片精品久久麻豆| 亚洲男女毛片无遮挡| 国产在线精品视频| 欧美亚洲一区二区在线观看| 久久综合国产精品| 五月婷婷欧美视频| 成人午夜av电影| 欧美一级黄色大片| 一区二区日韩av| 老司机免费视频一区二区三区| 国产宾馆实践打屁股91| 欧美一区二区三区性视频| 中文字幕在线视频一区| 免费看欧美美女黄的网站| 在线视频你懂得一区二区三区| 久久这里只有精品6| 视频精品一区二区| 一本大道av一区二区在线播放| 久久久久久久综合色一本| 午夜久久久久久久久| 懂色中文一区二区在线播放| 日韩欧美中文字幕制服| 亚洲第一久久影院| 一本久久a久久精品亚洲|