Reactos
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msvidctl/enumtuningspaces.cpp
5 * PURPOSE: ITuningSpace interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9#include "precomp.h"
10
11class CEnumTuningSpaces : public IEnumTuningSpaces
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 //delete this;
27 return 0;
28 }
29 return m_Ref;
30 }
31
32 // IEnumTuningSpaces methods
33 HRESULT STDMETHODCALLTYPE Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched);
34 HRESULT STDMETHODCALLTYPE Skip(ULONG celt);
35 HRESULT STDMETHODCALLTYPE Reset();
36 HRESULT STDMETHODCALLTYPE Clone(IEnumTuningSpaces **ppEnum);
37
38 CEnumTuningSpaces() : m_Ref(0){};
39
40 virtual ~CEnumTuningSpaces(){};
41
42protected:
43 LONG m_Ref;
44};
45
46HRESULT
47STDMETHODCALLTYPE
48CEnumTuningSpaces::QueryInterface(
49 IN REFIID refiid,
50 OUT PVOID* Output)
51{
52 if (IsEqualGUID(refiid, IID_IUnknown))
53 {
54 *Output = PVOID(this);
55 reinterpret_cast<IUnknown*>(*Output)->AddRef();
56 return NOERROR;
57 }
58
59 if (IsEqualGUID(refiid, IID_IEnumTuningSpaces))
60 {
61 *Output = (IEnumTuningSpaces*)this;
62 reinterpret_cast<IEnumTuningSpaces*>(*Output)->AddRef();
63 return NOERROR;
64 }
65
66 WCHAR Buffer[MAX_PATH];
67 LPOLESTR lpstr;
68 StringFromCLSID(refiid, &lpstr);
69 swprintf(Buffer, L"CEnumTuningSpaces::QueryInterface: NoInterface for %s\n", lpstr);
70 OutputDebugStringW(Buffer);
71 CoTaskMemFree(lpstr);
72
73 return E_NOINTERFACE;
74}
75
76//-------------------------------------------------------------------
77// IEnumTuningSpaces
78//
79HRESULT
80STDMETHODCALLTYPE
81CEnumTuningSpaces::Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched)
82{
83 OutputDebugStringW(L"CEnumTuningSpaces::Next : stub\n");
84 return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)rgelt);
85
86}
87
88HRESULT
89STDMETHODCALLTYPE
90CEnumTuningSpaces::Skip(ULONG celt)
91{
92 OutputDebugStringW(L"CEnumTuningSpaces::Skip : NotImplemented\n");
93 return E_NOTIMPL;
94}
95
96HRESULT
97STDMETHODCALLTYPE
98CEnumTuningSpaces::Reset()
99{
100 OutputDebugStringW(L"CEnumTuningSpaces::Reset : NotImplemented\n");
101 return E_NOTIMPL;
102}
103
104HRESULT
105STDMETHODCALLTYPE
106CEnumTuningSpaces::Clone(IEnumTuningSpaces **ppEnum)
107{
108 OutputDebugStringW(L"CEnumTuningSpaces::Clone : NotImplemented\n");
109 return E_NOTIMPL;
110}
111
112HRESULT
113WINAPI
114CEnumTuningSpaces_fnConstructor(
115 IUnknown *pUnknown,
116 REFIID riid,
117 LPVOID * ppv)
118{
119 // construct device control
120 CEnumTuningSpaces * tuningspaces = new CEnumTuningSpaces();
121
122#ifdef MSVIDCTL_TRACE
123 WCHAR Buffer[MAX_PATH];
124 LPOLESTR lpstr;
125 StringFromCLSID(riid, &lpstr);
126 swprintf(Buffer, L"CEnumTuningSpaces_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
127 OutputDebugStringW(Buffer);
128#endif
129
130 if (!tuningspaces)
131 return E_OUTOFMEMORY;
132
133 if (FAILED(tuningspaces->QueryInterface(riid, ppv)))
134 {
135 /* not supported */
136 delete tuningspaces;
137 return E_NOINTERFACE;
138 }
139
140 return NOERROR;
141}
142