2 * Implementation of CLSID_CaptureGraphBuilder[2].
4 * Copyright (C) Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35 #include "wine/debug.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(quartz);
38 #include "quartz_private.h"
42 /***************************************************************************
44 * CCaptureGraph::ICaptureGraphBuilder
49 ICaptureGraphBuilder_fnQueryInterface(ICaptureGraphBuilder* iface,REFIID riid,void** ppobj)
51 CCaptureGraph_THIS(iface,capgraph1);
53 TRACE("(%p)->()\n",This);
55 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
59 ICaptureGraphBuilder_fnAddRef(ICaptureGraphBuilder* iface)
61 CCaptureGraph_THIS(iface,capgraph1);
63 TRACE("(%p)->()\n",This);
65 return IUnknown_AddRef(This->unk.punkControl);
69 ICaptureGraphBuilder_fnRelease(ICaptureGraphBuilder* iface)
71 CCaptureGraph_THIS(iface,capgraph1);
73 TRACE("(%p)->()\n",This);
75 return IUnknown_Release(This->unk.punkControl);
80 ICaptureGraphBuilder_fnSetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder* pgb)
82 CCaptureGraph_THIS(iface,capgraph1);
84 TRACE("(%p)->()\n",This);
86 return ICaptureGraphBuilder2_SetFiltergraph(CCaptureGraph_ICaptureGraphBuilder2(This),pgb);
90 ICaptureGraphBuilder_fnGetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder** ppgb)
92 CCaptureGraph_THIS(iface,capgraph1);
94 TRACE("(%p)->()\n",This);
96 return ICaptureGraphBuilder2_GetFiltergraph(CCaptureGraph_ICaptureGraphBuilder2(This),ppgb);
100 ICaptureGraphBuilder_fnSetOutputFileName(ICaptureGraphBuilder* iface,const GUID* pguidType,LPCOLESTR pName,IBaseFilter** ppFilter,IFileSinkFilter** ppSink)
102 CCaptureGraph_THIS(iface,capgraph1);
104 FIXME("(%p)->() stub!\n",This);
109 static HRESULT WINAPI
110 ICaptureGraphBuilder_fnFindInterface(ICaptureGraphBuilder* iface,const GUID* pguidCat,IBaseFilter* pFilter,REFIID riid,void** ppvobj)
112 CCaptureGraph_THIS(iface,capgraph1);
114 FIXME("(%p)->() stub!\n",This);
119 static HRESULT WINAPI
120 ICaptureGraphBuilder_fnRenderStream(ICaptureGraphBuilder* iface,const GUID* pguidCat,IUnknown* pSource,IBaseFilter* pCompressor,IBaseFilter* pRenderer)
122 CCaptureGraph_THIS(iface,capgraph1);
124 FIXME("(%p)->() stub!\n",This);
129 static HRESULT WINAPI
130 ICaptureGraphBuilder_fnControlStream(ICaptureGraphBuilder* iface,const GUID* pguidCat,IBaseFilter* pFilter,REFERENCE_TIME* prtStart,REFERENCE_TIME* prtStop,WORD wStartCookie,WORD wStopCookie)
132 CCaptureGraph_THIS(iface,capgraph1);
134 FIXME("(%p)->() stub!\n",This);
139 static HRESULT WINAPI
140 ICaptureGraphBuilder_fnAllocCapFile(ICaptureGraphBuilder* iface,LPCOLESTR pName,DWORDLONG llSize)
142 CCaptureGraph_THIS(iface,capgraph1);
144 TRACE("(%p)->()\n",This);
146 return ICaptureGraphBuilder2_AllocCapFile(CCaptureGraph_ICaptureGraphBuilder2(This),pName,llSize);
149 static HRESULT WINAPI
150 ICaptureGraphBuilder_fnCopyCaptureFile(ICaptureGraphBuilder* iface,LPOLESTR pOrgName,LPOLESTR pNewName,int fAllowEscAbort,IAMCopyCaptureFileProgress* pCallback)
152 CCaptureGraph_THIS(iface,capgraph1);
154 TRACE("(%p)->()\n",This);
156 return ICaptureGraphBuilder2_CopyCaptureFile(CCaptureGraph_ICaptureGraphBuilder2(This),pOrgName,pNewName,fAllowEscAbort,pCallback);
159 static ICOM_VTABLE(ICaptureGraphBuilder) icapgraph1 =
161 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
162 /* IUnknown fields */
163 ICaptureGraphBuilder_fnQueryInterface,
164 ICaptureGraphBuilder_fnAddRef,
165 ICaptureGraphBuilder_fnRelease,
166 /* ICaptureGraphBuilder fields */
167 ICaptureGraphBuilder_fnSetFiltergraph,
168 ICaptureGraphBuilder_fnGetFiltergraph,
169 ICaptureGraphBuilder_fnSetOutputFileName,
170 ICaptureGraphBuilder_fnFindInterface,
171 ICaptureGraphBuilder_fnRenderStream,
172 ICaptureGraphBuilder_fnControlStream,
173 ICaptureGraphBuilder_fnAllocCapFile,
174 ICaptureGraphBuilder_fnCopyCaptureFile,
178 static HRESULT CCaptureGraph_InitICaptureGraphBuilder( CCaptureGraph* This )
180 TRACE("(%p)\n",This);
181 ICOM_VTBL(&This->capgraph1) = &icapgraph1;
186 static void CCaptureGraph_UninitICaptureGraphBuilder( CCaptureGraph* This )
188 TRACE("(%p)\n",This);
192 /***************************************************************************
194 * CCaptureGraph::ICaptureGraphBuilder2
198 static HRESULT WINAPI
199 ICaptureGraphBuilder2_fnQueryInterface(ICaptureGraphBuilder2* iface,REFIID riid,void** ppobj)
201 CCaptureGraph_THIS(iface,capgraph2);
203 TRACE("(%p)->()\n",This);
205 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
209 ICaptureGraphBuilder2_fnAddRef(ICaptureGraphBuilder2* iface)
211 CCaptureGraph_THIS(iface,capgraph2);
213 TRACE("(%p)->()\n",This);
215 return IUnknown_AddRef(This->unk.punkControl);
219 ICaptureGraphBuilder2_fnRelease(ICaptureGraphBuilder2* iface)
221 CCaptureGraph_THIS(iface,capgraph2);
223 TRACE("(%p)->()\n",This);
225 return IUnknown_Release(This->unk.punkControl);
228 static HRESULT WINAPI
229 ICaptureGraphBuilder2_fnSetFiltergraph(ICaptureGraphBuilder2* iface,IGraphBuilder* pgb)
231 CCaptureGraph_THIS(iface,capgraph2);
233 FIXME("(%p)->() stub!\n",This);
238 static HRESULT WINAPI
239 ICaptureGraphBuilder2_fnGetFiltergraph(ICaptureGraphBuilder2* iface,IGraphBuilder** ppgb)
241 CCaptureGraph_THIS(iface,capgraph2);
243 FIXME("(%p)->() stub!\n",This);
248 static HRESULT WINAPI
249 ICaptureGraphBuilder2_fnSetOutputFileName(ICaptureGraphBuilder2* iface,const GUID* pguid,LPCOLESTR pName,IBaseFilter** ppFilter,IFileSinkFilter** ppSink)
251 CCaptureGraph_THIS(iface,capgraph2);
253 FIXME("(%p)->() stub!\n",This);
258 static HRESULT WINAPI
259 ICaptureGraphBuilder2_fnFindInterface(ICaptureGraphBuilder2* iface,const GUID* pguidCat,const GUID* pguidType,IBaseFilter* pFilter,REFIID riid,void** ppvobj)
261 CCaptureGraph_THIS(iface,capgraph2);
263 FIXME("(%p)->() stub!\n",This);
268 static HRESULT WINAPI
269 ICaptureGraphBuilder2_fnRenderStream(ICaptureGraphBuilder2* iface,const GUID* pguidCat,const GUID* pguidType,IUnknown* pSource,IBaseFilter* pCompressor,IBaseFilter* pRenderer)
271 CCaptureGraph_THIS(iface,capgraph2);
273 FIXME("(%p)->() stub!\n",This);
278 static HRESULT WINAPI
279 ICaptureGraphBuilder2_fnControlStream(ICaptureGraphBuilder2* iface,const GUID* pguidCat,const GUID* pguidType,IBaseFilter* pFilter,REFERENCE_TIME* prtStart,REFERENCE_TIME* prtStop,WORD wStartCookie,WORD wStopCookie)
281 CCaptureGraph_THIS(iface,capgraph2);
283 FIXME("(%p)->() stub!\n",This);
288 static HRESULT WINAPI
289 ICaptureGraphBuilder2_fnAllocCapFile(ICaptureGraphBuilder2* iface,LPCOLESTR pName,DWORDLONG llSize)
291 CCaptureGraph_THIS(iface,capgraph2);
293 FIXME("(%p)->() stub!\n",This);
298 static HRESULT WINAPI
299 ICaptureGraphBuilder2_fnCopyCaptureFile(ICaptureGraphBuilder2* iface,LPOLESTR pOrgName,LPOLESTR pNewName,int fAllowEscAbort,IAMCopyCaptureFileProgress* pCallback)
301 CCaptureGraph_THIS(iface,capgraph2);
303 FIXME("(%p)->() stub!\n",This);
308 static HRESULT WINAPI
309 ICaptureGraphBuilder2_fnFindPin(ICaptureGraphBuilder2* iface,IUnknown* pSource,PIN_DIRECTION pindir,const GUID* pguidCat,const GUID* pguidType,BOOL bUnconnected,int num,IPin** ppPin)
311 CCaptureGraph_THIS(iface,capgraph2);
313 FIXME("(%p)->() stub!\n",This);
319 static ICOM_VTABLE(ICaptureGraphBuilder2) icapgraph2 =
321 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
322 /* IUnknown fields */
323 ICaptureGraphBuilder2_fnQueryInterface,
324 ICaptureGraphBuilder2_fnAddRef,
325 ICaptureGraphBuilder2_fnRelease,
326 /* ICaptureGraphBuilder2 fields */
327 ICaptureGraphBuilder2_fnSetFiltergraph,
328 ICaptureGraphBuilder2_fnGetFiltergraph,
329 ICaptureGraphBuilder2_fnSetOutputFileName,
330 ICaptureGraphBuilder2_fnFindInterface,
331 ICaptureGraphBuilder2_fnRenderStream,
332 ICaptureGraphBuilder2_fnControlStream,
333 ICaptureGraphBuilder2_fnAllocCapFile,
334 ICaptureGraphBuilder2_fnCopyCaptureFile,
335 ICaptureGraphBuilder2_fnFindPin,
338 static HRESULT CCaptureGraph_InitICaptureGraphBuilder2( CCaptureGraph* This )
340 TRACE("(%p)\n",This);
341 ICOM_VTBL(&This->capgraph2) = &icapgraph2;
346 static void CCaptureGraph_UninitICaptureGraphBuilder2( CCaptureGraph* This )
348 TRACE("(%p)\n",This);
352 /***************************************************************************
354 * new/delete for CCaptureGraph
358 /* can I use offsetof safely? - FIXME? */
359 static QUARTZ_IFEntry IFEntries[] =
361 { &IID_ICaptureGraphBuilder, offsetof(CCaptureGraph,capgraph1)-offsetof(CCaptureGraph,unk) },
362 { &IID_ICaptureGraphBuilder2, offsetof(CCaptureGraph,capgraph2)-offsetof(CCaptureGraph,unk) },
365 static void QUARTZ_DestroyCaptureGraph(IUnknown* punk)
367 CCaptureGraph_THIS(punk,unk);
369 TRACE( "(%p)\n", This );
371 CCaptureGraph_UninitICaptureGraphBuilder(This);
372 CCaptureGraph_UninitICaptureGraphBuilder2(This);
375 HRESULT QUARTZ_CreateCaptureGraph(IUnknown* punkOuter,void** ppobj)
380 TRACE("(%p,%p)\n",punkOuter,ppobj);
382 pcg = (CCaptureGraph*)QUARTZ_AllocObj( sizeof(CCaptureGraph) );
384 return E_OUTOFMEMORY;
386 QUARTZ_IUnkInit( &pcg->unk, punkOuter );
389 hr = CCaptureGraph_InitICaptureGraphBuilder(pcg);
392 hr = CCaptureGraph_InitICaptureGraphBuilder2(pcg);
395 CCaptureGraph_UninitICaptureGraphBuilder(pcg);
405 pcg->unk.pEntries = IFEntries;
406 pcg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]);
407 pcg->unk.pOnFinalRelease = QUARTZ_DestroyCaptureGraph;
409 *ppobj = (void*)(&pcg->unk);