Add amstream dll (MultiMedia Streams), part of Direct Show.
[wine] / dlls / amstream / amstream.c
1 /*
2  * Implementation of IAMMultiMediaStream Interface
3  *
4  * Copyright 2004 Christian Costa
5  *
6  * This file contains the (internal) driver registration functions,
7  * driver enumeration APIs and DirectDraw creation functions.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  */
23
24 #include "config.h"
25 #include "wine/debug.h"
26
27 #include "winbase.h"
28 #include "wingdi.h"
29
30 #include "amstream_private.h"
31 #include "amstream.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(amstream);
34
35 typedef struct {
36     IAMMultiMediaStream lpVtbl;
37     int ref;
38 } IAMMultiMediaStreamImpl;
39
40 static struct ICOM_VTABLE(IAMMultiMediaStream) AM_Vtbl;
41
42 HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj)
43 {
44     IAMMultiMediaStreamImpl* object; 
45
46     FIXME("(%p,%p)\n", pUnkOuter, ppObj);
47       
48     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAMMultiMediaStreamImpl));
49     
50     object->lpVtbl.lpVtbl = &AM_Vtbl;
51     object->ref = 1;
52
53     *ppObj = object;
54     
55     return S_OK;
56 }
57
58 /*** IUnknown methods ***/
59 static HRESULT WINAPI IAMMultiMediaStreamImpl_QueryInterface(IAMMultiMediaStream* iface, REFIID riid, void** ppvObject)
60 {
61   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
62
63   FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
64
65   if (IsEqualGUID(riid, &IID_IUnknown)
66       || IsEqualGUID(riid, &IID_IAMMultiMediaStream))
67   {
68     IClassFactory_AddRef(iface);
69     *ppvObject = This;
70     return S_OK;
71   }
72
73   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
74   return E_NOINTERFACE;
75 }
76
77 static ULONG WINAPI IAMMultiMediaStreamImpl_AddRef(IAMMultiMediaStream* iface)
78 {
79   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
80
81   FIXME("(%p/%p)\n", iface, This); 
82
83   This->ref++;
84   return S_OK;
85 }
86
87 static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
88 {
89   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
90
91   FIXME("(%p/%p)\n", iface, This); 
92
93   if (!--This->ref)
94     HeapFree(GetProcessHeap(), 0, This);
95
96   return S_OK;
97 }
98
99 /*** IMultiMediaStream methods ***/
100 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetInformation(IAMMultiMediaStream* iface, char* pdwFlags, STREAM_TYPE* pStreamType)
101 {
102   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
103
104   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pdwFlags, pStreamType); 
105
106   return S_FALSE;
107 }
108
109 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetMediaStream(IAMMultiMediaStream* iface, REFMSPID idPurpose, IMediaStream** ppMediaStream)
110 {
111   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
112
113   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, idPurpose, ppMediaStream); 
114
115   return S_FALSE;
116 }
117
118 static HRESULT WINAPI IAMMultiMediaStreamImpl_EnumMediaStreams(IAMMultiMediaStream* iface, long Index, IMediaStream** ppMediaStream)
119 {
120   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
121
122   FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, Index, ppMediaStream); 
123
124   return S_FALSE;
125 }
126
127 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetState(IAMMultiMediaStream* iface, STREAM_STATE* pCurrentState)
128 {
129   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
130
131   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentState); 
132
133   return S_FALSE;
134 }
135
136 static HRESULT WINAPI IAMMultiMediaStreamImpl_SetState(IAMMultiMediaStream* iface, STREAM_STATE NewState)
137 {
138   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
139   
140   FIXME("(%p/%p)->() stub!\n", This, iface); 
141
142   return S_FALSE;
143 }
144
145 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetTime(IAMMultiMediaStream* iface, STREAM_TIME* pCurrentTime)
146 {
147   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
148
149   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentTime); 
150
151   return S_FALSE;
152 }
153
154 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetDuration(IAMMultiMediaStream* iface, STREAM_TIME* pDuration)
155 {
156   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
157
158   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDuration); 
159
160   return S_FALSE;
161 }
162
163 static HRESULT WINAPI IAMMultiMediaStreamImpl_Seek(IAMMultiMediaStream* iface, STREAM_TIME SeekTime)
164 {
165   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
166
167   FIXME("(%p/%p)->() stub!\n", This, iface); 
168
169   return S_FALSE;
170 }
171
172 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetEndOfStream(IAMMultiMediaStream* iface, HANDLE* phEOS)
173 {
174   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
175
176   FIXME("(%p/%p)->(%p) stub!\n", This, iface, phEOS); 
177
178   return S_FALSE;
179 }
180
181 /*** IAMMultiMediaStream methods ***/
182 static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* iface, STREAM_TYPE StreamType, DWORD dwFlags, IGraphBuilder* pFilterGraph)
183 {
184   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
185
186   FIXME("(%p/%p)->(%lx,%lx,%p) stub!\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph); 
187
188   return S_FALSE;
189 }
190
191 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilterGraph(IAMMultiMediaStream* iface, IGraphBuilder** ppGraphBuilder)
192 {
193   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
194
195   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppGraphBuilder); 
196
197   return S_FALSE;
198 }
199
200 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilter(IAMMultiMediaStream* iface, IMediaStreamFilter** ppFilter)
201 {
202   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
203
204   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppFilter); 
205
206   return S_FALSE;
207 }
208
209 static HRESULT WINAPI IAMMultiMediaStreamImpl_AddMediaStream(IAMMultiMediaStream* iface, IUnknown* pStreamObject, const MSPID* PurposeId,
210                                           DWORD dwFlags, IMediaStream** ppNewStream)
211 {
212   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
213
214   FIXME("(%p/%p)->(%p,%p,%lx,%p) stub!\n", This, iface, pStreamObject, PurposeId, dwFlags, ppNewStream); 
215
216   return S_FALSE;
217 }
218
219 static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenFile(IAMMultiMediaStream* iface, LPCWSTR pszFileName, DWORD dwFlags)
220 {
221   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
222
223   FIXME("(%p/%p)->(%p,%lx) stub!\n", This, iface, pszFileName, dwFlags); 
224
225   return S_FALSE;
226 }
227
228 static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenMoniker(IAMMultiMediaStream* iface, IBindCtx* pCtx, IMoniker* pMoniker, DWORD dwFlags)
229 {
230   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
231
232   FIXME("(%p/%p)->(%p,%p,%lx) stub!\n", This, iface, pCtx, pMoniker, dwFlags); 
233
234   return S_FALSE;
235 }
236
237 static HRESULT WINAPI IAMMultiMediaStreamImpl_Render(IAMMultiMediaStream* iface, DWORD dwFlags)
238 {
239   ICOM_THIS(IAMMultiMediaStreamImpl, iface);
240
241   FIXME("(%p/%p)->(%lx) stub!\n", This, iface, dwFlags); 
242
243   return S_FALSE;
244 }
245
246 static ICOM_VTABLE(IAMMultiMediaStream) AM_Vtbl =
247 {
248     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
249     IAMMultiMediaStreamImpl_QueryInterface,
250     IAMMultiMediaStreamImpl_AddRef,
251     IAMMultiMediaStreamImpl_Release,
252     IAMMultiMediaStreamImpl_GetInformation,
253     IAMMultiMediaStreamImpl_GetMediaStream,
254     IAMMultiMediaStreamImpl_EnumMediaStreams,
255     IAMMultiMediaStreamImpl_GetState,
256     IAMMultiMediaStreamImpl_SetState,
257     IAMMultiMediaStreamImpl_GetTime,
258     IAMMultiMediaStreamImpl_GetDuration,
259     IAMMultiMediaStreamImpl_Seek,
260     IAMMultiMediaStreamImpl_GetEndOfStream,
261     IAMMultiMediaStreamImpl_Initialize,
262     IAMMultiMediaStreamImpl_GetFilterGraph,
263     IAMMultiMediaStreamImpl_GetFilter,
264     IAMMultiMediaStreamImpl_AddMediaStream,
265     IAMMultiMediaStreamImpl_OpenFile,
266     IAMMultiMediaStreamImpl_OpenMoniker,
267     IAMMultiMediaStreamImpl_Render
268 };