ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

qualityforward.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.