Reactos
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/cvpvbiconfig.cpp
5 * PURPOSE: CVPVBIConfig interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9#include "precomp.h"
10
11class CVPVBIConfig : public IVPVBIConfig,
12 public IDistributorNotify
13{
14public:
15 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
16
17 STDMETHODIMP_(ULONG) AddRef()
18 {
19 InterlockedIncrement(&m_Ref);
20 return m_Ref;
21 }
22 STDMETHODIMP_(ULONG) Release()
23 {
24 InterlockedDecrement(&m_Ref);
25
26 if (!m_Ref)
27 {
28 delete this;
29 return 0;
30 }
31 return m_Ref;
32 }
33
34 // IDistributorNotify interface
35 HRESULT STDMETHODCALLTYPE Stop();
36 HRESULT STDMETHODCALLTYPE Pause();
37 HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
38 HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
39 HRESULT STDMETHODCALLTYPE NotifyGraphChange();
40
41 // IVPBaseConfig
42 HRESULT STDMETHODCALLTYPE GetConnectInfo(LPDWORD pdwNumConnectInfo, IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo);
43 HRESULT STDMETHODCALLTYPE SetConnectInfo(DWORD dwChosenEntry);
44 HRESULT STDMETHODCALLTYPE GetVPDataInfo(LPAMVPDATAINFO pamvpDataInfo);
45 HRESULT STDMETHODCALLTYPE GetMaxPixelRate(LPAMVPSIZE pamvpSize, OUT LPDWORD pdwMaxPixelsPerSecond);
46 HRESULT STDMETHODCALLTYPE InformVPInputFormats(DWORD dwNumFormats, IN LPDDPIXELFORMAT pDDPixelFormats);
47 HRESULT STDMETHODCALLTYPE GetVideoFormats(LPDWORD pdwNumFormats, IN OUT LPDDPIXELFORMAT pddPixelFormats);
48 HRESULT STDMETHODCALLTYPE SetVideoFormat(DWORD dwChosenEntry);
49 HRESULT STDMETHODCALLTYPE SetInvertPolarity();
50 HRESULT STDMETHODCALLTYPE GetOverlaySurface(LPDIRECTDRAWSURFACE* ppddOverlaySurface);
51 HRESULT STDMETHODCALLTYPE SetDirectDrawKernelHandle(ULONG_PTR dwDDKernelHandle);
52 HRESULT STDMETHODCALLTYPE SetVideoPortID(IN DWORD dwVideoPortID);
53 HRESULT STDMETHODCALLTYPE SetDDSurfaceKernelHandles(DWORD cHandles, IN ULONG_PTR *rgDDKernelHandles);
54 HRESULT STDMETHODCALLTYPE SetSurfaceParameters(DWORD dwPitch, IN DWORD dwXOrigin, IN DWORD dwYOrigin);
55
56 CVPVBIConfig() : m_Ref(0){}
57 virtual ~CVPVBIConfig(){}
58
59protected:
60 LONG m_Ref;
61};
62
63HRESULT
64STDMETHODCALLTYPE
65CVPVBIConfig::QueryInterface(
66 IN REFIID refiid,
67 OUT PVOID* Output)
68{
69 if (IsEqualGUID(refiid, IID_IUnknown))
70 {
71 *Output = PVOID(this);
72 reinterpret_cast<IUnknown*>(*Output)->AddRef();
73 return NOERROR;
74 }
75 if (IsEqualGUID(refiid, IID_IDistributorNotify))
76 {
77 *Output = (IDistributorNotify*)(this);
78 reinterpret_cast<IDistributorNotify*>(*Output)->AddRef();
79 return NOERROR;
80 }
81
82 if (IsEqualGUID(refiid, IID_IVPVBIConfig))
83 {
84 *Output = (IVPConfig*)(this);
85 reinterpret_cast<IVPConfig*>(*Output)->AddRef();
86 return NOERROR;
87 }
88
89 return E_NOINTERFACE;
90}
91
92//-------------------------------------------------------------------
93// IDistributorNotify interface
94//
95
96
97HRESULT
98STDMETHODCALLTYPE
99CVPVBIConfig::Stop()
100{
101#ifdef KSPROXY_TRACE
102 OutputDebugStringW(L"UNIMPLEMENTED\n");
103#endif
104 return E_NOTIMPL;
105}
106
107HRESULT
108STDMETHODCALLTYPE
109CVPVBIConfig::Pause()
110{
111#ifdef KSPROXY_TRACE
112 OutputDebugStringW(L"UNIMPLEMENTED\n");
113#endif
114 return E_NOTIMPL;
115}
116
117HRESULT
118STDMETHODCALLTYPE
119CVPVBIConfig::Run(
120 REFERENCE_TIME tStart)
121{
122#ifdef KSPROXY_TRACE
123 OutputDebugStringW(L"UNIMPLEMENTED\n");
124#endif
125 return E_NOTIMPL;
126}
127
128HRESULT
129STDMETHODCALLTYPE
130CVPVBIConfig::SetSyncSource(
131 IReferenceClock *pClock)
132{
133#ifdef KSPROXY_TRACE
134 OutputDebugStringW(L"UNIMPLEMENTED\n");
135#endif
136 return E_NOTIMPL;
137}
138
139HRESULT
140STDMETHODCALLTYPE
141CVPVBIConfig::NotifyGraphChange()
142{
143#ifdef KSPROXY_TRACE
144 OutputDebugStringW(L"UNIMPLEMENTED\n");
145#endif
146 return E_NOTIMPL;
147}
148
149//-------------------------------------------------------------------
150// IVPBaseConfig
151//
152HRESULT
153STDMETHODCALLTYPE
154CVPVBIConfig::GetConnectInfo(
155 LPDWORD pdwNumConnectInfo,
156 IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
157{
158#ifdef KSPROXY_TRACE
159 OutputDebugStringW(L"UNIMPLEMENTED\n");
160#endif
161 return E_NOTIMPL;
162}
163
164HRESULT
165STDMETHODCALLTYPE
166CVPVBIConfig::SetConnectInfo(
167 DWORD dwChosenEntry)
168{
169#ifdef KSPROXY_TRACE
170 OutputDebugStringW(L"UNIMPLEMENTED\n");
171#endif
172 return E_NOTIMPL;
173}
174
175HRESULT
176STDMETHODCALLTYPE
177CVPVBIConfig::GetVPDataInfo(
178 LPAMVPDATAINFO pamvpDataInfo)
179{
180#ifdef KSPROXY_TRACE
181 OutputDebugStringW(L"UNIMPLEMENTED\n");
182#endif
183 return E_NOTIMPL;
184}
185
186HRESULT
187STDMETHODCALLTYPE
188CVPVBIConfig::GetMaxPixelRate(
189 LPAMVPSIZE pamvpSize,
190 OUT LPDWORD pdwMaxPixelsPerSecond)
191{
192#ifdef KSPROXY_TRACE
193 OutputDebugStringW(L"UNIMPLEMENTED\n");
194#endif
195 return E_NOTIMPL;
196}
197
198HRESULT
199STDMETHODCALLTYPE
200CVPVBIConfig::InformVPInputFormats(
201 DWORD dwNumFormats,
202 IN LPDDPIXELFORMAT pDDPixelFormats)
203{
204#ifdef KSPROXY_TRACE
205 OutputDebugStringW(L"UNIMPLEMENTED\n");
206#endif
207 return E_NOTIMPL;
208}
209
210HRESULT
211STDMETHODCALLTYPE
212CVPVBIConfig::GetVideoFormats(
213 LPDWORD pdwNumFormats,
214 IN OUT LPDDPIXELFORMAT pddPixelFormats)
215{
216#ifdef KSPROXY_TRACE
217 OutputDebugStringW(L"UNIMPLEMENTED\n");
218#endif
219 return E_NOTIMPL;
220}
221
222HRESULT
223STDMETHODCALLTYPE
224CVPVBIConfig::SetVideoFormat(
225 DWORD dwChosenEntry)
226{
227#ifdef KSPROXY_TRACE
228 OutputDebugStringW(L"UNIMPLEMENTED\n");
229#endif
230 return E_NOTIMPL;
231}
232
233HRESULT
234STDMETHODCALLTYPE
235CVPVBIConfig::SetInvertPolarity()
236{
237 #ifdef KSPROXY_TRACE
238 OutputDebugStringW(L"UNIMPLEMENTED\n");
239#endif
240 return E_NOTIMPL;
241}
242
243HRESULT
244STDMETHODCALLTYPE
245CVPVBIConfig::GetOverlaySurface(
246 LPDIRECTDRAWSURFACE* ppddOverlaySurface)
247{
248#ifdef KSPROXY_TRACE
249 OutputDebugStringW(L"UNIMPLEMENTED\n");
250#endif
251 return E_NOTIMPL;
252}
253
254HRESULT
255STDMETHODCALLTYPE
256CVPVBIConfig::SetDirectDrawKernelHandle(
257 ULONG_PTR dwDDKernelHandle)
258{
259#ifdef KSPROXY_TRACE
260 OutputDebugStringW(L"UNIMPLEMENTED\n");
261#endif
262 return E_NOTIMPL;
263}
264
265HRESULT
266STDMETHODCALLTYPE
267CVPVBIConfig::SetVideoPortID(
268 IN DWORD dwVideoPortID)
269{
270#ifdef KSPROXY_TRACE
271 OutputDebugStringW(L"UNIMPLEMENTED\n");
272#endif
273 return E_NOTIMPL;
274}
275
276
277HRESULT
278STDMETHODCALLTYPE
279CVPVBIConfig::SetDDSurfaceKernelHandles(
280 DWORD cHandles,
281 IN ULONG_PTR *rgDDKernelHandles)
282{
283#ifdef KSPROXY_TRACE
284 OutputDebugStringW(L"UNIMPLEMENTED\n");
285#endif
286 return E_NOTIMPL;
287}
288
289
290HRESULT
291STDMETHODCALLTYPE
292CVPVBIConfig::SetSurfaceParameters(
293 DWORD dwPitch,
294 IN DWORD dwXOrigin,
295 IN DWORD dwYOrigin)
296{
297#ifdef KSPROXY_TRACE
298 OutputDebugStringW(L"UNIMPLEMENTED\n");
299#endif
300 return E_NOTIMPL;
301}
302
303
304HRESULT
305WINAPI
306CVPVBIConfig_Constructor(
307 IUnknown * pUnkOuter,
308 REFIID riid,
309 LPVOID * ppv)
310{
311#ifdef KSPROXY_TRACE
312 OutputDebugStringW(L"CVPVBIConfig_Constructor\n");
313#endif
314
315 CVPVBIConfig * handler = new CVPVBIConfig();
316
317 if (!handler)
318 return E_OUTOFMEMORY;
319
320 if (FAILED(handler->QueryInterface(riid, ppv)))
321 {
322 /* not supported */
323 delete handler;
324 return E_NOINTERFACE;
325 }
326
327 return NOERROR;
328}