2025-11-28 00:35:46 +09:00

89 lines
1.7 KiB
C++

#include "ClassFactory.h"
BOOL DX11VideoRenderer::CClassFactory::IsLocked(void)
{
return (s_lLockCount == 0) ? FALSE : TRUE;
}
DX11VideoRenderer::CClassFactory::CClassFactory(void) :
m_lRefCount(0)
{
}
DX11VideoRenderer::CClassFactory::~CClassFactory(void)
{
}
// IUnknown
ULONG DX11VideoRenderer::CClassFactory::AddRef(void)
{
return InterlockedIncrement(&m_lRefCount);
}
// IUnknown
HRESULT DX11VideoRenderer::CClassFactory::QueryInterface(REFIID iid, __RPC__deref_out _Result_nullonfailure_ void** ppv)
{
if (!ppv)
{
return E_POINTER;
}
if (iid == IID_IUnknown)
{
*ppv = static_cast<IUnknown*>(static_cast<IClassFactory*>(this));
}
else if (iid == __uuidof(IClassFactory))
{
*ppv = static_cast<IClassFactory*>(this);
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
// IUnknown
ULONG DX11VideoRenderer::CClassFactory::Release(void)
{
ULONG lRefCount = InterlockedDecrement(&m_lRefCount);
if (lRefCount == 0)
{
delete this;
}
return lRefCount;
}
// IClassFactory
HRESULT DX11VideoRenderer::CClassFactory::CreateInstance(_In_opt_ IUnknown* pUnkOuter, _In_ REFIID riid, _COM_Outptr_ void** ppvObject)
{
if (ppvObject == NULL)
{
return E_POINTER;
}
*ppvObject = NULL;
if (pUnkOuter != NULL)
{
return CLASS_E_NOAGGREGATION;
}
return CMediaSink::CreateInstance(riid, ppvObject);
}
// IClassFactory
HRESULT DX11VideoRenderer::CClassFactory::LockServer(BOOL bLock)
{
if (bLock == FALSE)
{
InterlockedDecrement(&s_lLockCount);
}
else
{
InterlockedIncrement(&s_lLockCount);
}
return S_OK;
}