Reactos
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/basicaudio.cpp
5 * PURPOSE: IBasicAudio interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9#include "precomp.h"
10
11class CKsBasicAudio : public IBasicAudio,
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 methods
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 // IDispatch methods
42 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
43 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
44 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
45 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
46
47
48 // IBasicAudio methods
49 HRESULT STDMETHODCALLTYPE put_Volume(long lVolume);
50 HRESULT STDMETHODCALLTYPE get_Volume(long *plVolume);
51 HRESULT STDMETHODCALLTYPE put_Balance(long lBalance);
52 HRESULT STDMETHODCALLTYPE get_Balance(long *plBalance);
53
54
55 CKsBasicAudio() : m_Ref(0){}
56 virtual ~CKsBasicAudio(){}
57
58protected:
59 LONG m_Ref;
60};
61
62HRESULT
63STDMETHODCALLTYPE
64CKsBasicAudio::QueryInterface(
65 IN REFIID refiid,
66 OUT PVOID* Output)
67{
68 if (IsEqualGUID(refiid, IID_IUnknown))
69 {
70 *Output = PVOID(this);
71 reinterpret_cast<IUnknown*>(*Output)->AddRef();
72 return NOERROR;
73 }
74 if (IsEqualGUID(refiid, IID_IDistributorNotify))
75 {
76 *Output = (IDistributorNotify*)(this);
77 reinterpret_cast<IDistributorNotify*>(*Output)->AddRef();
78 return NOERROR;
79 }
80
81 if (IsEqualGUID(refiid, IID_IBasicAudio))
82 {
83 *Output = (IBasicAudio*)(this);
84 reinterpret_cast<IBasicAudio*>(*Output)->AddRef();
85 return NOERROR;
86 }
87
88 return E_NOINTERFACE;
89}
90
91//-------------------------------------------------------------------
92// IDistributorNotify interface
93//
94
95
96HRESULT
97STDMETHODCALLTYPE
98CKsBasicAudio::Stop()
99{
100#ifdef KSPROXY_TRACE
101 OutputDebugStringW(L"UNIMPLEMENTED\n");
102#endif
103 return E_NOTIMPL;
104}
105
106HRESULT
107STDMETHODCALLTYPE
108CKsBasicAudio::Pause()
109{
110#ifdef KSPROXY_TRACE
111 OutputDebugStringW(L"UNIMPLEMENTED\n");
112#endif
113
114 return E_NOTIMPL;
115}
116
117HRESULT
118STDMETHODCALLTYPE
119CKsBasicAudio::Run(
120 REFERENCE_TIME tStart)
121{
122#ifdef KSPROXY_TRACE
123 OutputDebugStringW(L"UNIMPLEMENTED\n");
124#endif
125
126 return E_NOTIMPL;
127}
128
129HRESULT
130STDMETHODCALLTYPE
131CKsBasicAudio::SetSyncSource(
132 IReferenceClock *pClock)
133{
134#ifdef KSPROXY_TRACE
135 OutputDebugStringW(L"UNIMPLEMENTED\n");
136#endif
137 return E_NOTIMPL;
138}
139
140HRESULT
141STDMETHODCALLTYPE
142CKsBasicAudio::NotifyGraphChange()
143{
144#ifdef KSPROXY_TRACE
145 OutputDebugStringW(L"UNIMPLEMENTED\n");
146#endif
147
148 return E_NOTIMPL;
149}
150
151//-------------------------------------------------------------------
152// IDispatch interface
153//
154
155HRESULT
156STDMETHODCALLTYPE
157CKsBasicAudio::GetTypeInfoCount(
158 UINT *pctinfo)
159{
160#ifdef KSPROXY_TRACE
161 OutputDebugStringW(L"UNIMPLEMENTED\n");
162#endif
163
164 return E_NOTIMPL;
165}
166
167HRESULT
168STDMETHODCALLTYPE
169CKsBasicAudio::GetTypeInfo(
170 UINT iTInfo,
171 LCID lcid,
172 ITypeInfo **ppTInfo)
173{
174#ifdef KSPROXY_TRACE
175 OutputDebugStringW(L"UNIMPLEMENTED\n");
176#endif
177 return E_NOTIMPL;
178}
179
180HRESULT
181STDMETHODCALLTYPE
182CKsBasicAudio::GetIDsOfNames(
183 REFIID riid,
184 LPOLESTR *rgszNames,
185 UINT cNames,
186 LCID lcid,
187 DISPID *rgDispId)
188{
189#ifdef KSPROXY_TRACE
190 OutputDebugStringW(L"UNIMPLEMENTED\n");
191#endif
192
193 return E_NOTIMPL;
194}
195
196HRESULT
197STDMETHODCALLTYPE
198CKsBasicAudio::Invoke(
199 DISPID dispIdMember,
200 REFIID riid,
201 LCID lcid,
202 WORD wFlags,
203 DISPPARAMS *pDispParams,
204 VARIANT *pVarResult,
205 EXCEPINFO *pExcepInfo,
206 UINT *puArgErr)
207{
208#ifdef KSPROXY_TRACE
209 OutputDebugStringW(L"UNIMPLEMENTED\n");
210#endif
211
212 return E_NOTIMPL;
213}
214
215//-------------------------------------------------------------------
216// IBasicAudio interface
217//
218
219HRESULT
220STDMETHODCALLTYPE
221CKsBasicAudio::put_Volume(
222 long lVolume)
223{
224#ifdef KSPROXY_TRACE
225 OutputDebugStringW(L"UNIMPLEMENTED\n");
226#endif
227
228 return E_NOTIMPL;
229}
230
231
232HRESULT
233STDMETHODCALLTYPE
234CKsBasicAudio::get_Volume(
235 long *plVolume)
236{
237#ifdef KSPROXY_TRACE
238 OutputDebugStringW(L"UNIMPLEMENTED\n");
239#endif
240
241 return E_NOTIMPL;
242}
243
244
245HRESULT
246STDMETHODCALLTYPE
247CKsBasicAudio::put_Balance(
248 long lBalance)
249{
250#ifdef KSPROXY_TRACE
251 OutputDebugStringW(L"UNIMPLEMENTED\n");
252#endif
253
254 return E_NOTIMPL;
255}
256
257
258HRESULT
259STDMETHODCALLTYPE
260CKsBasicAudio::get_Balance(
261 long *plBalance)
262{
263#ifdef KSPROXY_TRACE
264 OutputDebugStringW(L"UNIMPLEMENTED\n");
265#endif
266
267 return E_NOTIMPL;
268}
269
270HRESULT
271WINAPI
272CKsBasicAudio_Constructor(
273 IUnknown * pUnkOuter,
274 REFIID riid,
275 LPVOID * ppv)
276{
277#ifdef KSPROXY_TRACE
278 OutputDebugStringW(L"CKsBasicAudio_Constructor\n");
279#endif
280
281 CKsBasicAudio * handler = new CKsBasicAudio();
282
283 if (!handler)
284 return E_OUTOFMEMORY;
285
286 if (FAILED(handler->QueryInterface(riid, ppv)))
287 {
288 /* not supported */
289 delete handler;
290 return E_NOINTERFACE;
291 }
292
293 return NOERROR;
294}