Fixed some bugs.
[wine/multimedia.git] / dlls / quartz / capgraph.c
blobc86765b55088bb18cae454da729b3ca544969830
1 /*
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
20 * FIXME - stub
21 * FIXME - not tested
24 #include "config.h"
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wingdi.h"
29 #include "winuser.h"
30 #include "winerror.h"
31 #include "strmif.h"
32 #include "control.h"
33 #include "uuids.h"
35 #include "wine/debug.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(quartz);
38 #include "quartz_private.h"
39 #include "capgraph.h"
42 /***************************************************************************
44 * CCaptureGraph::ICaptureGraphBuilder
48 static HRESULT WINAPI
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);
58 static ULONG WINAPI
59 ICaptureGraphBuilder_fnAddRef(ICaptureGraphBuilder* iface)
61 CCaptureGraph_THIS(iface,capgraph1);
63 TRACE("(%p)->()\n",This);
65 return IUnknown_AddRef(This->unk.punkControl);
68 static ULONG WINAPI
69 ICaptureGraphBuilder_fnRelease(ICaptureGraphBuilder* iface)
71 CCaptureGraph_THIS(iface,capgraph1);
73 TRACE("(%p)->()\n",This);
75 return IUnknown_Release(This->unk.punkControl);
79 static HRESULT WINAPI
80 ICaptureGraphBuilder_fnSetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder* pgb)
82 CCaptureGraph_THIS(iface,capgraph1);
84 FIXME("(%p)->()\n",This);
86 return E_NOTIMPL;
89 static HRESULT WINAPI
90 ICaptureGraphBuilder_fnGetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder** ppgb)
92 CCaptureGraph_THIS(iface,capgraph1);
94 FIXME("(%p)->()\n",This);
96 return E_NOTIMPL;
99 static HRESULT WINAPI
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);
106 return E_NOTIMPL;
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);
116 return E_NOTIMPL;
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);
126 return E_NOTIMPL;
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);
136 return E_NOTIMPL;
139 static HRESULT WINAPI
140 ICaptureGraphBuilder_fnAllocCapFile(ICaptureGraphBuilder* iface,LPCOLESTR pName,DWORDLONG llSize)
142 CCaptureGraph_THIS(iface,capgraph1);
144 FIXME("(%p)->()\n",This);
146 return E_NOTIMPL;
149 static HRESULT WINAPI
150 ICaptureGraphBuilder_fnCopyCaptureFile(ICaptureGraphBuilder* iface,LPOLESTR pOrgName,LPOLESTR pNewName,int fAllowEscAbort,IAMCopyCaptureFileProgress* pCallback)
152 CCaptureGraph_THIS(iface,capgraph1);
154 FIXME("(%p)->()\n",This);
156 return E_NOTIMPL;
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;
183 return NOERROR;
186 static void CCaptureGraph_UninitICaptureGraphBuilder( CCaptureGraph* This )
188 TRACE("(%p)\n",This);
192 /***************************************************************************
194 * new/delete for CCaptureGraph
198 /* can I use offsetof safely? - FIXME? */
199 static QUARTZ_IFEntry IFEntries[] =
201 { &IID_ICaptureGraphBuilder, offsetof(CCaptureGraph,capgraph1)-offsetof(CCaptureGraph,unk) },
204 static void QUARTZ_DestroyCaptureGraph(IUnknown* punk)
206 CCaptureGraph_THIS(punk,unk);
208 TRACE( "(%p)\n", This );
210 CCaptureGraph_UninitICaptureGraphBuilder(This);
213 HRESULT QUARTZ_CreateCaptureGraph(IUnknown* punkOuter,void** ppobj)
215 CCaptureGraph* pcg;
216 HRESULT hr;
218 TRACE("(%p,%p)\n",punkOuter,ppobj);
220 pcg = (CCaptureGraph*)QUARTZ_AllocObj( sizeof(CCaptureGraph) );
221 if ( pcg == NULL )
222 return E_OUTOFMEMORY;
224 QUARTZ_IUnkInit( &pcg->unk, punkOuter );
225 pcg->m_pfg = NULL;
227 hr = CCaptureGraph_InitICaptureGraphBuilder(pcg);
229 if ( FAILED(hr) )
231 QUARTZ_FreeObj(pcg);
232 return hr;
235 pcg->unk.pEntries = IFEntries;
236 pcg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]);
237 pcg->unk.pOnFinalRelease = QUARTZ_DestroyCaptureGraph;
239 *ppobj = (void*)(&pcg->unk);
241 return S_OK;