mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
331 lines
7.9 KiB
C++
331 lines
7.9 KiB
C++
/*
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
* PROJECT: ReactOS BDA Proxy
|
|
* FILE: dll/directx/msvidctl/tunerequest.cpp
|
|
* PURPOSE: ITuningRequest interface
|
|
*
|
|
* PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
|
|
*/
|
|
#include "precomp.h"
|
|
|
|
class CTuneRequest : public IDVBTuneRequest
|
|
{
|
|
public:
|
|
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
|
|
|
|
STDMETHODIMP_(ULONG) AddRef()
|
|
{
|
|
InterlockedIncrement(&m_Ref);
|
|
return m_Ref;
|
|
}
|
|
STDMETHODIMP_(ULONG) Release()
|
|
{
|
|
InterlockedDecrement(&m_Ref);
|
|
if (!m_Ref)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::Release : delete\n");
|
|
|
|
WCHAR Buffer[100];
|
|
swprintf(Buffer, L"CTuneRequest::Release : m_TuningSpace %p delete\n", m_TuningSpace);
|
|
OutputDebugStringW(Buffer);
|
|
|
|
|
|
m_TuningSpace->Release();
|
|
//delete this;
|
|
return 0;
|
|
}
|
|
return m_Ref;
|
|
}
|
|
|
|
//IDispatch methods
|
|
HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
|
HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
|
HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
|
HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
|
|
|
//ITuneRequest methods
|
|
HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace);
|
|
HRESULT STDMETHODCALLTYPE get_Components(IComponents **Components);
|
|
HRESULT STDMETHODCALLTYPE Clone(ITuneRequest **NewTuneRequest);
|
|
HRESULT STDMETHODCALLTYPE get_Locator(ILocator **Locator);
|
|
HRESULT STDMETHODCALLTYPE put_Locator(ILocator *Locator);
|
|
|
|
//IDVBTuneRequest methods
|
|
HRESULT STDMETHODCALLTYPE get_ONID(long *ONID);
|
|
HRESULT STDMETHODCALLTYPE put_ONID(long ONID);
|
|
HRESULT STDMETHODCALLTYPE get_TSID(long *TSID);
|
|
HRESULT STDMETHODCALLTYPE put_TSID(long TSID);
|
|
HRESULT STDMETHODCALLTYPE get_SID(long *SID);
|
|
HRESULT STDMETHODCALLTYPE put_SID(long SID);
|
|
|
|
CTuneRequest(ITuningSpace * TuningSpace) : m_Ref(0), m_ONID(-1), m_TSID(-1), m_SID(-1), m_Locator(0), m_TuningSpace(TuningSpace)
|
|
{
|
|
m_TuningSpace->AddRef();
|
|
};
|
|
|
|
CTuneRequest(ITuningSpace * TuningSpace, LONG ONID, LONG TSID, LONG SID, ILocator * Locator) : m_Ref(1), m_ONID(ONID), m_TSID(TSID), m_SID(SID), m_Locator(Locator), m_TuningSpace(TuningSpace)
|
|
{
|
|
if (m_Locator)
|
|
m_Locator->AddRef();
|
|
|
|
m_TuningSpace->AddRef();
|
|
};
|
|
|
|
virtual ~CTuneRequest(){};
|
|
|
|
protected:
|
|
LONG m_Ref;
|
|
LONG m_ONID;
|
|
LONG m_TSID;
|
|
LONG m_SID;
|
|
ILocator * m_Locator;
|
|
ITuningSpace * m_TuningSpace;
|
|
};
|
|
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::QueryInterface(
|
|
IN REFIID refiid,
|
|
OUT PVOID* Output)
|
|
{
|
|
if (IsEqualGUID(refiid, IID_IUnknown))
|
|
{
|
|
*Output = PVOID(this);
|
|
reinterpret_cast<IUnknown*>(*Output)->AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
if (IsEqualGUID(refiid, IID_ITuneRequest))
|
|
{
|
|
*Output = (ITuneRequest*)this;
|
|
reinterpret_cast<ITuneRequest*>(*Output)->AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
if (IsEqualGUID(refiid, IID_IDVBTuneRequest))
|
|
{
|
|
*Output = (IDVBTuneRequest*)this;
|
|
reinterpret_cast<IDVBTuneRequest*>(*Output)->AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
WCHAR Buffer[MAX_PATH];
|
|
LPOLESTR lpstr;
|
|
StringFromCLSID(refiid, &lpstr);
|
|
swprintf(Buffer, L"CTuneRequest::QueryInterface: NoInterface for %s", lpstr);
|
|
OutputDebugStringW(Buffer);
|
|
CoTaskMemFree(lpstr);
|
|
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// IDispatch methods
|
|
//
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::GetTypeInfoCount(UINT *pctinfo)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::GetTypeInfoCount : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::GetTypeInfo : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::GetIDsOfNames : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::Invoke : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// ITuneRequest interface
|
|
//
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_TuningSpace(ITuningSpace **TuningSpace)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
OutputDebugStringW(L"CTuneRequest::get_TuningSpace\n");
|
|
#endif
|
|
|
|
*TuningSpace = m_TuningSpace;
|
|
m_TuningSpace->AddRef();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_Components(IComponents **Components)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::get_Components : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::Clone(ITuneRequest **NewTuneRequest)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
WCHAR Buffer[100];
|
|
swprintf(Buffer, L"CTuneRequest::Clone %p\n", NewTuneRequest);
|
|
OutputDebugStringW(Buffer);
|
|
#endif
|
|
|
|
*NewTuneRequest = new CTuneRequest(m_TuningSpace, m_ONID, m_TSID, m_SID, m_Locator);
|
|
|
|
if (!*NewTuneRequest)
|
|
return E_OUTOFMEMORY;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_Locator(ILocator **Locator)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::get_Locator : NotImplemented\n");
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::put_Locator(ILocator *Locator)
|
|
{
|
|
OutputDebugStringW(L"CTuneRequest::put_Locator : stub\n");
|
|
m_Locator = Locator;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// IDVBTuneRequest interface
|
|
//
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_ONID(long *ONID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
OutputDebugStringW(L"CTuneRequest::get_ONID\n");
|
|
#endif
|
|
|
|
*ONID = m_ONID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::put_ONID(long ONID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
WCHAR Buffer[100];
|
|
swprintf(Buffer, L"CTuneRequest::put_ONID : %lu\n", ONID);
|
|
OutputDebugStringW(Buffer);
|
|
#endif
|
|
|
|
m_ONID = ONID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_TSID(long *TSID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
OutputDebugStringW(L"CTuneRequest::get_TSID\n");
|
|
#endif
|
|
|
|
*TSID = m_TSID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::put_TSID(long TSID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
WCHAR Buffer[100];
|
|
swprintf(Buffer, L"CTuneRequest::put_TSID : %lu\n", TSID);
|
|
OutputDebugStringW(Buffer);
|
|
#endif
|
|
|
|
m_TSID = TSID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::get_SID(long *SID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
OutputDebugStringW(L"CTuneRequest::get_SID\n");
|
|
#endif
|
|
|
|
*SID = m_SID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
STDMETHODCALLTYPE
|
|
CTuneRequest::put_SID(long SID)
|
|
{
|
|
#ifdef MSVIDCTL_TRACE
|
|
WCHAR Buffer[100];
|
|
swprintf(Buffer, L"CTuneRequest::put_SID : %lu\n", SID);
|
|
OutputDebugStringW(Buffer);
|
|
#endif
|
|
|
|
m_SID = SID;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
WINAPI
|
|
CTuneRequest_fnConstructor(
|
|
IUnknown *pUnknown,
|
|
ITuningSpace * TuningSpace,
|
|
REFIID riid,
|
|
LPVOID * ppv)
|
|
{
|
|
// construct device control
|
|
CTuneRequest * request = new CTuneRequest(TuningSpace);
|
|
|
|
#ifdef MSVIDCTL_TRACE
|
|
WCHAR Buffer[MAX_PATH];
|
|
LPOLESTR lpstr;
|
|
StringFromCLSID(riid, &lpstr);
|
|
swprintf(Buffer, L"CTuneRequest_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
|
|
OutputDebugStringW(Buffer);
|
|
#endif
|
|
|
|
if (!request)
|
|
return E_OUTOFMEMORY;
|
|
|
|
if (FAILED(request->QueryInterface(riid, ppv)))
|
|
{
|
|
/* not supported */
|
|
delete request;
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
return NOERROR;
|
|
}
|