Reactos
at master 331 lines 8.1 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS BDA Proxy 4 * FILE: dll/directx/msvidctl/tunerequest.cpp 5 * PURPOSE: ITuningRequest interface 6 * 7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) 8 */ 9#include "precomp.h" 10 11class CTuneRequest : public IDVBTuneRequest 12{ 13public: 14 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 15 16 STDMETHODIMP_(ULONG) AddRef() 17 { 18 InterlockedIncrement(&m_Ref); 19 return m_Ref; 20 } 21 STDMETHODIMP_(ULONG) Release() 22 { 23 InterlockedDecrement(&m_Ref); 24 if (!m_Ref) 25 { 26 OutputDebugStringW(L"CTuneRequest::Release : delete\n"); 27 28 WCHAR Buffer[100]; 29 swprintf(Buffer, L"CTuneRequest::Release : m_TuningSpace %p delete\n", m_TuningSpace); 30 OutputDebugStringW(Buffer); 31 32 33 m_TuningSpace->Release(); 34 //delete this; 35 return 0; 36 } 37 return m_Ref; 38 } 39 40 //IDispatch methods 41 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo); 42 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); 43 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); 44 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); 45 46 //ITuneRequest methods 47 HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace); 48 HRESULT STDMETHODCALLTYPE get_Components(IComponents **Components); 49 HRESULT STDMETHODCALLTYPE Clone(ITuneRequest **NewTuneRequest); 50 HRESULT STDMETHODCALLTYPE get_Locator(ILocator **Locator); 51 HRESULT STDMETHODCALLTYPE put_Locator(ILocator *Locator); 52 53 //IDVBTuneRequest methods 54 HRESULT STDMETHODCALLTYPE get_ONID(long *ONID); 55 HRESULT STDMETHODCALLTYPE put_ONID(long ONID); 56 HRESULT STDMETHODCALLTYPE get_TSID(long *TSID); 57 HRESULT STDMETHODCALLTYPE put_TSID(long TSID); 58 HRESULT STDMETHODCALLTYPE get_SID(long *SID); 59 HRESULT STDMETHODCALLTYPE put_SID(long SID); 60 61 CTuneRequest(ITuningSpace * TuningSpace) : m_Ref(0), m_ONID(-1), m_TSID(-1), m_SID(-1), m_Locator(0), m_TuningSpace(TuningSpace) 62 { 63 m_TuningSpace->AddRef(); 64 }; 65 66 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) 67 { 68 if (m_Locator) 69 m_Locator->AddRef(); 70 71 m_TuningSpace->AddRef(); 72 }; 73 74 virtual ~CTuneRequest(){}; 75 76protected: 77 LONG m_Ref; 78 LONG m_ONID; 79 LONG m_TSID; 80 LONG m_SID; 81 ILocator * m_Locator; 82 ITuningSpace * m_TuningSpace; 83}; 84 85 86HRESULT 87STDMETHODCALLTYPE 88CTuneRequest::QueryInterface( 89 IN REFIID refiid, 90 OUT PVOID* Output) 91{ 92 if (IsEqualGUID(refiid, IID_IUnknown)) 93 { 94 *Output = PVOID(this); 95 reinterpret_cast<IUnknown*>(*Output)->AddRef(); 96 return NOERROR; 97 } 98 99 if (IsEqualGUID(refiid, IID_ITuneRequest)) 100 { 101 *Output = (ITuneRequest*)this; 102 reinterpret_cast<ITuneRequest*>(*Output)->AddRef(); 103 return NOERROR; 104 } 105 106 if (IsEqualGUID(refiid, IID_IDVBTuneRequest)) 107 { 108 *Output = (IDVBTuneRequest*)this; 109 reinterpret_cast<IDVBTuneRequest*>(*Output)->AddRef(); 110 return NOERROR; 111 } 112 113 WCHAR Buffer[MAX_PATH]; 114 LPOLESTR lpstr; 115 StringFromCLSID(refiid, &lpstr); 116 swprintf(Buffer, L"CTuneRequest::QueryInterface: NoInterface for %s", lpstr); 117 OutputDebugStringW(Buffer); 118 CoTaskMemFree(lpstr); 119 120 121 return E_NOINTERFACE; 122} 123 124//------------------------------------------------------------------- 125// IDispatch methods 126// 127HRESULT 128STDMETHODCALLTYPE 129CTuneRequest::GetTypeInfoCount(UINT *pctinfo) 130{ 131 OutputDebugStringW(L"CTuneRequest::GetTypeInfoCount : NotImplemented\n"); 132 return E_NOTIMPL; 133} 134 135HRESULT 136STDMETHODCALLTYPE 137CTuneRequest::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) 138{ 139 OutputDebugStringW(L"CTuneRequest::GetTypeInfo : NotImplemented\n"); 140 return E_NOTIMPL; 141} 142HRESULT 143STDMETHODCALLTYPE 144CTuneRequest::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 145{ 146 OutputDebugStringW(L"CTuneRequest::GetIDsOfNames : NotImplemented\n"); 147 return E_NOTIMPL; 148} 149HRESULT 150STDMETHODCALLTYPE 151CTuneRequest::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 152{ 153 OutputDebugStringW(L"CTuneRequest::Invoke : NotImplemented\n"); 154 return E_NOTIMPL; 155} 156 157//------------------------------------------------------------------- 158// ITuneRequest interface 159// 160 161HRESULT 162STDMETHODCALLTYPE 163CTuneRequest::get_TuningSpace(ITuningSpace **TuningSpace) 164{ 165#ifdef MSVIDCTL_TRACE 166 OutputDebugStringW(L"CTuneRequest::get_TuningSpace\n"); 167#endif 168 169 *TuningSpace = m_TuningSpace; 170 m_TuningSpace->AddRef(); 171 172 return S_OK; 173} 174 175HRESULT 176STDMETHODCALLTYPE 177CTuneRequest::get_Components(IComponents **Components) 178{ 179 OutputDebugStringW(L"CTuneRequest::get_Components : NotImplemented\n"); 180 return E_NOTIMPL; 181} 182 183HRESULT 184STDMETHODCALLTYPE 185CTuneRequest::Clone(ITuneRequest **NewTuneRequest) 186{ 187#ifdef MSVIDCTL_TRACE 188 WCHAR Buffer[100]; 189 swprintf(Buffer, L"CTuneRequest::Clone %p\n", NewTuneRequest); 190 OutputDebugStringW(Buffer); 191#endif 192 193 *NewTuneRequest = new CTuneRequest(m_TuningSpace, m_ONID, m_TSID, m_SID, m_Locator); 194 195 if (!*NewTuneRequest) 196 return E_OUTOFMEMORY; 197 198 return S_OK; 199} 200 201HRESULT 202STDMETHODCALLTYPE 203CTuneRequest::get_Locator(ILocator **Locator) 204{ 205 OutputDebugStringW(L"CTuneRequest::get_Locator : NotImplemented\n"); 206 return E_NOTIMPL; 207} 208 209HRESULT 210STDMETHODCALLTYPE 211CTuneRequest::put_Locator(ILocator *Locator) 212{ 213 OutputDebugStringW(L"CTuneRequest::put_Locator : stub\n"); 214 m_Locator = Locator; 215 216 return S_OK; 217} 218 219//------------------------------------------------------------------- 220// IDVBTuneRequest interface 221// 222 223HRESULT 224STDMETHODCALLTYPE 225CTuneRequest::get_ONID(long *ONID) 226{ 227#ifdef MSVIDCTL_TRACE 228 OutputDebugStringW(L"CTuneRequest::get_ONID\n"); 229#endif 230 231 *ONID = m_ONID; 232 return S_OK; 233} 234 235HRESULT 236STDMETHODCALLTYPE 237CTuneRequest::put_ONID(long ONID) 238{ 239#ifdef MSVIDCTL_TRACE 240 WCHAR Buffer[100]; 241 swprintf(Buffer, L"CTuneRequest::put_ONID : %lu\n", ONID); 242 OutputDebugStringW(Buffer); 243#endif 244 245 m_ONID = ONID; 246 return S_OK; 247} 248 249HRESULT 250STDMETHODCALLTYPE 251CTuneRequest::get_TSID(long *TSID) 252{ 253#ifdef MSVIDCTL_TRACE 254 OutputDebugStringW(L"CTuneRequest::get_TSID\n"); 255#endif 256 257 *TSID = m_TSID; 258 return S_OK; 259} 260 261HRESULT 262STDMETHODCALLTYPE 263CTuneRequest::put_TSID(long TSID) 264{ 265#ifdef MSVIDCTL_TRACE 266 WCHAR Buffer[100]; 267 swprintf(Buffer, L"CTuneRequest::put_TSID : %lu\n", TSID); 268 OutputDebugStringW(Buffer); 269#endif 270 271 m_TSID = TSID; 272 return S_OK; 273} 274 275HRESULT 276STDMETHODCALLTYPE 277CTuneRequest::get_SID(long *SID) 278{ 279#ifdef MSVIDCTL_TRACE 280 OutputDebugStringW(L"CTuneRequest::get_SID\n"); 281#endif 282 283 *SID = m_SID; 284 return S_OK; 285} 286 287HRESULT 288STDMETHODCALLTYPE 289CTuneRequest::put_SID(long SID) 290{ 291#ifdef MSVIDCTL_TRACE 292 WCHAR Buffer[100]; 293 swprintf(Buffer, L"CTuneRequest::put_SID : %lu\n", SID); 294 OutputDebugStringW(Buffer); 295#endif 296 297 m_SID = SID; 298 return S_OK; 299} 300 301HRESULT 302WINAPI 303CTuneRequest_fnConstructor( 304 IUnknown *pUnknown, 305 ITuningSpace * TuningSpace, 306 REFIID riid, 307 LPVOID * ppv) 308{ 309 // construct device control 310 CTuneRequest * request = new CTuneRequest(TuningSpace); 311 312#ifdef MSVIDCTL_TRACE 313 WCHAR Buffer[MAX_PATH]; 314 LPOLESTR lpstr; 315 StringFromCLSID(riid, &lpstr); 316 swprintf(Buffer, L"CTuneRequest_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown); 317 OutputDebugStringW(Buffer); 318#endif 319 320 if (!request) 321 return E_OUTOFMEMORY; 322 323 if (FAILED(request->QueryInterface(riid, ppv))) 324 { 325 /* not supported */ 326 delete request; 327 return E_NOINTERFACE; 328 } 329 330 return NOERROR; 331}