Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenqualityforward.cpp
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy 00004 * FILE: dll/directx/ksproxy/clockforward.cpp 00005 * PURPOSE: IKsClockForwarder interface 00006 * 00007 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) 00008 */ 00009 #include "precomp.h" 00010 00011 #ifndef _MSC_VER 00012 const GUID KSCATEGORY_QUALITY = {0x97EBAACB, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; 00013 #endif 00014 00015 #define IID_IKsQualityForwarder KSCATEGORY_QUALITY 00016 00017 class CKsQualityForwarder : public IKsQualityForwarder 00018 { 00019 public: 00020 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 00021 00022 STDMETHODIMP_(ULONG) AddRef() 00023 { 00024 InterlockedIncrement(&m_Ref); 00025 return m_Ref; 00026 } 00027 STDMETHODIMP_(ULONG) Release() 00028 { 00029 InterlockedDecrement(&m_Ref); 00030 00031 if (!m_Ref) 00032 { 00033 delete this; 00034 return 0; 00035 } 00036 return m_Ref; 00037 } 00038 00039 // IKsObject interface 00040 HANDLE STDMETHODCALLTYPE KsGetObjectHandle(); 00041 00042 // IKsQualityForwarder 00043 VOID STDMETHODCALLTYPE KsFlushClient(IN IKsPin *Pin); 00044 00045 CKsQualityForwarder(HANDLE handle) : m_Ref(0), m_Handle(handle){} 00046 virtual ~CKsQualityForwarder(){ if (m_Handle) CloseHandle(m_Handle);} 00047 00048 protected: 00049 LONG m_Ref; 00050 HANDLE m_Handle; 00051 00052 00053 }; 00054 00055 HRESULT 00056 STDMETHODCALLTYPE 00057 CKsQualityForwarder::QueryInterface( 00058 IN REFIID refiid, 00059 OUT PVOID* Output) 00060 { 00061 if (IsEqualGUID(refiid, IID_IUnknown) || 00062 IsEqualGUID(refiid, IID_IKsQualityForwarder)) 00063 { 00064 *Output = PVOID(this); 00065 reinterpret_cast<IUnknown*>(*Output)->AddRef(); 00066 return NOERROR; 00067 } 00068 00069 return E_NOINTERFACE; 00070 } 00071 00072 //------------------------------------------------------------------- 00073 // IKsObject interface 00074 // 00075 00076 HANDLE 00077 STDMETHODCALLTYPE 00078 CKsQualityForwarder::KsGetObjectHandle() 00079 { 00080 return m_Handle; 00081 } 00082 00083 //------------------------------------------------------------------- 00084 // IKsQualityForwarder interface 00085 // 00086 VOID 00087 STDMETHODCALLTYPE 00088 CKsQualityForwarder::KsFlushClient( 00089 IN IKsPin *Pin) 00090 { 00091 #ifdef KSPROXY_TRACE 00092 OutputDebugString("UNIMPLEMENTED\n"); 00093 #endif 00094 } 00095 00096 HRESULT 00097 WINAPI 00098 CKsQualityForwarder_Constructor( 00099 IUnknown * pUnkOuter, 00100 REFIID riid, 00101 LPVOID * ppv) 00102 { 00103 HRESULT hr; 00104 HANDLE handle; 00105 00106 #ifdef KSPROXY_TRACE 00107 OutputDebugStringW(L"CKsQualityForwarder_Constructor\n"); 00108 #endif 00109 00110 // open default clock 00111 hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle); 00112 00113 if (hr != NOERROR) 00114 { 00115 #ifdef KSPROXY_TRACE 00116 OutputDebugString("CKsClockForwarder_Constructor failed to open device\n"); 00117 #endif 00118 return hr; 00119 } 00120 00121 CKsQualityForwarder * quality = new CKsQualityForwarder(handle); 00122 00123 if (!quality) 00124 { 00125 // free clock handle 00126 CloseHandle(handle); 00127 return E_OUTOFMEMORY; 00128 } 00129 00130 if (FAILED(quality->QueryInterface(riid, ppv))) 00131 { 00132 /* not supported */ 00133 delete quality; 00134 return E_NOINTERFACE; 00135 } 00136 00137 return NOERROR; 00138 } Generated on Sun May 27 2012 04:21:52 for ReactOS by
1.7.6.1
|