Fix selecting string columns and matching against a wildcard.
[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 #define COBJMACROS
28
29 #include "winbase.h"
30 #include "wingdi.h"
31
32 #include "amstream_private.h"
33 #include "amstream.h"
34
35 WINE_DEFAULT_DEBUG_CHANNEL(amstream);
36
37 typedef struct {
38     IAMMultiMediaStream lpVtbl;
39     int ref;
40 } IAMMultiMediaStreamImpl;
41
42 static struct IAMMultiMediaStreamVtbl AM_Vtbl;
43
44 HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj)
45 {
46     IAMMultiMediaStreamImpl* object; 
47
48     FIXME("(%p,%p)\n", pUnkOuter, ppObj);
49
50     if( pUnkOuter )
51       return CLASS_E_NOAGGREGATION;
52       
53     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAMMultiMediaStreamImpl));
54     
55     object->lpVtbl.lpVtbl = &AM_Vtbl;
56     object->ref = 1;
57
58     *ppObj = object;
59     
60     return S_OK;
61 }
62
63 /*** IUnknown methods ***/
64 static HRESULT WINAPI IAMMultiMediaStreamImpl_QueryInterface(IAMMultiMediaStream* iface, REFIID riid, void** ppvObject)
65 {
66   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
67
68   FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
69
70   if (IsEqualGUID(riid, &IID_IUnknown)
71       || IsEqualGUID(riid, &IID_IAMMultiMediaStream))
72   {
73     IClassFactory_AddRef(iface);
74     *ppvObject = This;
75     return S_OK;
76   }
77
78   ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
79   return E_NOINTERFACE;
80 }
81
82 static ULONG WINAPI IAMMultiMediaStreamImpl_AddRef(IAMMultiMediaStream* iface)
83 {
84   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
85
86   FIXME("(%p/%p)\n", iface, This); 
87
88   This->ref++;
89   return S_OK;
90 }
91
92 static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
93 {
94   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
95
96   FIXME("(%p/%p)\n", iface, This); 
97
98   if (!--This->ref)
99     HeapFree(GetProcessHeap(), 0, This);
100
101   return S_OK;
102 }
103
104 /*** IMultiMediaStream methods ***/
105 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetInformation(IAMMultiMediaStream* iface, char* pdwFlags, STREAM_TYPE* pStreamType)
106 {
107   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
108
109   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pdwFlags, pStreamType); 
110
111   return S_FALSE;
112 }
113
114 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetMediaStream(IAMMultiMediaStream* iface, REFMSPID idPurpose, IMediaStream** ppMediaStream)
115 {
116   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
117
118   FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, idPurpose, ppMediaStream); 
119
120   return S_FALSE;
121 }
122
123 static HRESULT WINAPI IAMMultiMediaStreamImpl_EnumMediaStreams(IAMMultiMediaStream* iface, long Index, IMediaStream** ppMediaStream)
124 {
125   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
126
127   FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, Index, ppMediaStream); 
128
129   return S_FALSE;
130 }
131
132 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetState(IAMMultiMediaStream* iface, STREAM_STATE* pCurrentState)
133 {
134   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
135
136   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentState); 
137
138   return S_FALSE;
139 }
140
141 static HRESULT WINAPI IAMMultiMediaStreamImpl_SetState(IAMMultiMediaStream* iface, STREAM_STATE NewState)
142 {
143   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
144   
145   FIXME("(%p/%p)->() stub!\n", This, iface); 
146
147   return S_FALSE;
148 }
149
150 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetTime(IAMMultiMediaStream* iface, STREAM_TIME* pCurrentTime)
151 {
152   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
153
154   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentTime); 
155
156   return S_FALSE;
157 }
158
159 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetDuration(IAMMultiMediaStream* iface, STREAM_TIME* pDuration)
160 {
161   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
162
163   FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDuration); 
164
165   return S_FALSE;
166 }
167
168 static HRESULT WINAPI IAMMultiMediaStreamImpl_Seek(IAMMultiMediaStream* iface, STREAM_TIME SeekTime)
169 {
170   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
171
172   FIXME("(%p/%p)->() stub!\n", This, iface); 
173
174   return S_FALSE;
175 }
176
177 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetEndOfStream(IAMMultiMediaStream* iface, HANDLE* phEOS)
178 {
179   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
180
181   FIXME("(%p/%p)->(%p) stub!\n", This, iface, phEOS); 
182
183   return S_FALSE;
184 }
185
186 /*** IAMMultiMediaStream methods ***/
187 static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* iface, STREAM_TYPE StreamType, DWORD dwFlags, IGraphBuilder* pFilterGraph)
188 {
189   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
190
191   FIXME("(%p/%p)->(%lx,%lx,%p) stub!\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph); 
192
193   return S_FALSE;
194 }
195
196 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilterGraph(IAMMultiMediaStream* iface, IGraphBuilder** ppGraphBuilder)
197 {
198   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
199
200   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppGraphBuilder); 
201
202   return S_FALSE;
203 }
204
205 static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilter(IAMMultiMediaStream* iface, IMediaStreamFilter** ppFilter)
206 {
207   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
208
209   FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppFilter); 
210
211   return S_FALSE;
212 }
213
214 static HRESULT WINAPI IAMMultiMediaStreamImpl_AddMediaStream(IAMMultiMediaStream* iface, IUnknown* pStreamObject, const MSPID* PurposeId,
215                                           DWORD dwFlags, IMediaStream** ppNewStream)
216 {
217   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
218
219   FIXME("(%p/%p)->(%p,%p,%lx,%p) stub!\n", This, iface, pStreamObject, PurposeId, dwFlags, ppNewStream); 
220
221   return S_FALSE;
222 }
223
224 static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenFile(IAMMultiMediaStream* iface, LPCWSTR pszFileName, DWORD dwFlags)
225 {
226   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
227
228   FIXME("(%p/%p)->(%p,%lx) stub!\n", This, iface, pszFileName, dwFlags); 
229
230   return S_FALSE;
231 }
232
233 static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenMoniker(IAMMultiMediaStream* iface, IBindCtx* pCtx, IMoniker* pMoniker, DWORD dwFlags)
234 {
235   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
236
237   FIXME("(%p/%p)->(%p,%p,%lx) stub!\n", This, iface, pCtx, pMoniker, dwFlags); 
238
239   return S_FALSE;
240 }
241
242 static HRESULT WINAPI IAMMultiMediaStreamImpl_Render(IAMMultiMediaStream* iface, DWORD dwFlags)
243 {
244   IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
245
246   FIXME("(%p/%p)->(%lx) stub!\n", This, iface, dwFlags); 
247
248   return S_FALSE;
249 }
250
251 static IAMMultiMediaStreamVtbl AM_Vtbl =
252 {
253     IAMMultiMediaStreamImpl_QueryInterface,
254     IAMMultiMediaStreamImpl_AddRef,
255     IAMMultiMediaStreamImpl_Release,
256     IAMMultiMediaStreamImpl_GetInformation,
257     IAMMultiMediaStreamImpl_GetMediaStream,
258     IAMMultiMediaStreamImpl_EnumMediaStreams,
259     IAMMultiMediaStreamImpl_GetState,
260     IAMMultiMediaStreamImpl_SetState,
261     IAMMultiMediaStreamImpl_GetTime,
262     IAMMultiMediaStreamImpl_GetDuration,
263     IAMMultiMediaStreamImpl_Seek,
264     IAMMultiMediaStreamImpl_GetEndOfStream,
265     IAMMultiMediaStreamImpl_Initialize,
266     IAMMultiMediaStreamImpl_GetFilterGraph,
267     IAMMultiMediaStreamImpl_GetFilter,
268     IAMMultiMediaStreamImpl_AddMediaStream,
269     IAMMultiMediaStreamImpl_OpenFile,
270     IAMMultiMediaStreamImpl_OpenMoniker,
271     IAMMultiMediaStreamImpl_Render
272 };