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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷六月综合网| 欧美韩日一区二区三区| 亚洲第一成人在线| 欧美午夜一区二区三区免费大片| 国产精品动漫网站| 色综合天天狠狠| 亚洲一二三四在线观看| 欧美巨大另类极品videosbest | bt7086福利一区国产| 亚洲国产高清aⅴ视频| 成人激情免费电影网址| ㊣最新国产の精品bt伙计久久| 91香蕉视频污在线| 亚洲图片欧美综合| 欧美一级在线观看| 国内精品国产成人国产三级粉色 | 91亚洲精品久久久蜜桃网站 | 亚洲色图在线播放| 欧美性欧美巨大黑白大战| 日产国产高清一区二区三区| 精品人在线二区三区| 国产精品白丝jk黑袜喷水| 综合欧美亚洲日本| 欧美肥妇bbw| 国产精品99久| 亚洲国产人成综合网站| 欧美mv日韩mv亚洲| 91首页免费视频| 麻豆成人91精品二区三区| 国产女主播视频一区二区| 色婷婷激情一区二区三区| 美日韩一区二区三区| 亚洲欧洲韩国日本视频| 日韩一区二区三区四区| 成人国产精品免费观看视频| 亚洲成人av免费| 国产精品毛片久久久久久久| 8x福利精品第一导航| 成人免费毛片高清视频| 日韩国产精品91| 成人免费在线播放视频| 日韩午夜激情视频| 99久久综合国产精品| 激情小说亚洲一区| 亚洲一区二区在线免费观看视频| 久久久久久久久久久久久夜| 欧美揉bbbbb揉bbbbb| 成人18视频日本| 国产主播一区二区三区| 婷婷久久综合九色国产成人 | 成人动漫一区二区在线| 蜜臀久久99精品久久久久久9| 亚洲美女屁股眼交| 日韩一二三四区| 欧美又粗又大又爽| 99久久精品国产网站| 国产盗摄女厕一区二区三区| 日本不卡一区二区三区 | 精品久久国产老人久久综合| 欧美中文字幕一二三区视频| 成人一区二区在线观看| 紧缚奴在线一区二区三区| 天堂在线一区二区| 亚洲黄色小说网站| 亚洲三级免费电影| 中文字幕av不卡| 久久精品亚洲精品国产欧美| 欧美mv日韩mv国产| 日韩一卡二卡三卡国产欧美| 欧美精品在线观看播放| 欧美性感一类影片在线播放| 色香蕉久久蜜桃| 91美女片黄在线观看| av动漫一区二区| 成人国产亚洲欧美成人综合网 | 日韩精品福利网| 亚洲午夜精品17c| 亚洲主播在线播放| 艳妇臀荡乳欲伦亚洲一区| 综合久久国产九一剧情麻豆| 成人欧美一区二区三区1314| 亚洲视频一二区| 亚洲三级在线看| 一区二区不卡在线播放| 亚洲精品成人少妇| 亚洲一区二区三区四区在线| 又紧又大又爽精品一区二区| 一区二区三区丝袜| 亚洲国产精品人人做人人爽| 午夜影院久久久| 日本不卡的三区四区五区| 蜜桃av一区二区三区| 精品在线观看免费| 国产精品一区在线观看乱码| 国产传媒欧美日韩成人| 99久久婷婷国产综合精品电影| aaa亚洲精品一二三区| 91精品办公室少妇高潮对白| 欧美日韩中文另类| 欧美一区二区成人6969| 26uuu色噜噜精品一区二区| 国产婷婷精品av在线| 亚洲色图在线视频| 日韩激情中文字幕| 国产一二三精品| 91免费在线看| 91精品一区二区三区在线观看| 久久综合色之久久综合| 国产精品九色蝌蚪自拍| 亚洲国产精品久久艾草纯爱| 麻豆一区二区99久久久久| 国产99精品国产| 欧美日韩一区二区欧美激情| 欧美电视剧在线看免费| 国产精品欧美经典| 午夜av一区二区| 国产精品综合一区二区| 在线观看不卡视频| 欧美mv日韩mv国产网站app| 中文字幕亚洲区| 日本aⅴ亚洲精品中文乱码| 国产高清久久久| 欧美日韩国产综合一区二区| 久久久美女毛片| 亚洲国产另类av| 国产99精品在线观看| 欧美精品一二三区| 国产精品久久久久影院亚瑟| 午夜视频在线观看一区二区 | 中文字幕中文字幕中文字幕亚洲无线 | 精品国产91亚洲一区二区三区婷婷| 中文子幕无线码一区tr| 日韩中文字幕亚洲一区二区va在线| 国产成人免费视频网站高清观看视频| 日本高清免费不卡视频| 久久免费电影网| 日韩激情一二三区| 一本在线高清不卡dvd| 久久久久久影视| 日韩精品电影在线| 91久久精品网| 1区2区3区国产精品| 久草精品在线观看| 欧美精品自拍偷拍动漫精品| 亚洲色图一区二区| 成人h版在线观看| 久久久www成人免费无遮挡大片| 午夜精品爽啪视频| 日本韩国欧美一区二区三区| 中文字幕乱码一区二区免费| 久久国产精品99久久人人澡| 欧美日产国产精品| 亚洲国产一区二区三区青草影视| 97精品久久久午夜一区二区三区| 久久久久久久久久久久久女国产乱| 日本午夜精品视频在线观看| 欧美色区777第一页| 亚洲免费资源在线播放| av电影在线观看一区| 中文字幕乱码日本亚洲一区二区| 国产一区二区三区免费在线观看| 这里只有精品视频在线观看| 午夜影视日本亚洲欧洲精品| 欧美丝袜第三区| 亚洲午夜久久久久久久久电影院| 色婷婷国产精品| 亚洲自拍另类综合| 欧美亚洲综合另类| 亚洲午夜国产一区99re久久| 欧美丝袜丝交足nylons| 性欧美疯狂xxxxbbbb| 5566中文字幕一区二区电影| 日韩精品一二三区| 日韩一区二区高清| 久久成人免费电影| 久久久久久黄色| 成人avav影音| 亚洲乱码中文字幕| 欧美三区在线视频| 免费一区二区视频| 欧美成人性战久久| 国模套图日韩精品一区二区| 国产亚洲综合性久久久影院| 成人亚洲一区二区一| 最近日韩中文字幕| 欧美日韩一区小说| 麻豆一区二区三| 中文字幕免费不卡在线| 色就色 综合激情| 五月婷婷另类国产| 精品久久久久久综合日本欧美| 国产成a人亚洲| 亚洲乱码国产乱码精品精98午夜| 欧美在线free| 精品一区二区三区免费| 国产三级精品三级在线专区| 91麻豆国产在线观看| 日韩国产高清在线| 国产亚洲成年网址在线观看| 91在线国产福利|