⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdxfilter.cpp

📁 陆其明的实务精选中附带光盘中的视频聊天源代码
💻 CPP
字号:
//
// CDXFilter.cpp
//

/*-----------------------------------------------------*\
			HQ Tech, Make Technology Easy!       
 More information, please go to http://hqtech.nease.net.
/*-----------------------------------------------------*/

#include "stdafx.h"
#include "CDXFilter.h"
#include "UFilterUtils.h"

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

////////////////////////////////////////////////////////////////////////////////
CDXFilter::CDXFilter(IGraphBuilder * inGraph, GUID inClsid, const char * inName)
{
	mGraph  = inGraph;	
	mClsid  = inClsid;
	mFilter = NULL;

	if (inName)
	{
		MultiByteToWideChar(CP_ACP, 0, inName, -1, mName, 256);
	}
	else
	{
		wcscpy(mName, L"");
	}
}

CDXFilter::~CDXFilter()
{
	ReleaseFilter();
}

BOOL CDXFilter::CreateFilter(void)
{
	if (!mFilter && mGraph)
	{
		if (SUCCEEDED(CoCreateInstance(mClsid, NULL, CLSCTX_INPROC_SERVER,
			IID_IBaseFilter, (void **)&mFilter)))
		{
			if (SUCCEEDED(mGraph->AddFilter(mFilter, mName)))
			{
				return TRUE;
			}
		}
	}
	ReleaseFilter();
	return FALSE;
}

BOOL CDXFilter::Attach(IBaseFilter * inFilter, const char * inName)
{
	ReleaseFilter();
	
	if (inName)
	{
		MultiByteToWideChar(CP_ACP, 0, inName, -1, mName, 256);
	}

	if (mGraph && inFilter)
	{
		if (SUCCEEDED(mGraph->AddFilter(inFilter, mName)))
		{
			mFilter = inFilter;
			mFilter->AddRef();  // Add extra refercence count
			return TRUE;
		}
	}
	return FALSE;
}

void CDXFilter::Detach(void)
{
	if (mFilter)
	{
		mFilter->Release();
		mFilter = NULL;
	}
}

BOOL CDXFilter::QueryInterface(REFIID inIID, LPVOID * outObj)
{
	if (mFilter)
	{
		HRESULT hr = mFilter->QueryInterface(inIID, outObj);
		return SUCCEEDED(hr);
	}
	return FALSE;
}

void CDXFilter::ReleaseFilter(void)
{
	if (mFilter)
	{
		if (mGraph)
		{
			mGraph->RemoveFilter(mFilter);
		}
		mFilter->Release();
		mFilter = NULL;
	}
}

IBaseFilter * CDXFilter::GetFilter(void)
{
	return mFilter;
}

IPin * CDXFilter::GetPin(BOOL inInput, const char * inPartialName)
{
	return UFilterUtils::GetPin(mFilter, inInput, inPartialName);
}

BOOL CDXFilter::GetPinCount(int & outInputPin, int & outOutputPin)
{
	return UFilterUtils::GetPinCount(mFilter, outInputPin, outOutputPin);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -