243 lines
5.8 KiB
C
243 lines
5.8 KiB
C
/*
|
|
* Implementation of CLSID_CaptureGraphBuilder[2].
|
|
*
|
|
* Copyright (C) Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* FIXME - stub
|
|
* FIXME - not tested
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "windef.h"
|
|
#include "winbase.h"
|
|
#include "wingdi.h"
|
|
#include "winuser.h"
|
|
#include "winerror.h"
|
|
#include "strmif.h"
|
|
#include "control.h"
|
|
#include "uuids.h"
|
|
|
|
#include "wine/debug.h"
|
|
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
|
|
|
|
#include "quartz_private.h"
|
|
#include "capgraph.h"
|
|
|
|
|
|
/***************************************************************************
|
|
*
|
|
* CCaptureGraph::ICaptureGraphBuilder
|
|
*
|
|
*/
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnQueryInterface(ICaptureGraphBuilder* iface,REFIID riid,void** ppobj)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
TRACE("(%p)->()\n",This);
|
|
|
|
return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
|
|
}
|
|
|
|
static ULONG WINAPI
|
|
ICaptureGraphBuilder_fnAddRef(ICaptureGraphBuilder* iface)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
TRACE("(%p)->()\n",This);
|
|
|
|
return IUnknown_AddRef(This->unk.punkControl);
|
|
}
|
|
|
|
static ULONG WINAPI
|
|
ICaptureGraphBuilder_fnRelease(ICaptureGraphBuilder* iface)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
TRACE("(%p)->()\n",This);
|
|
|
|
return IUnknown_Release(This->unk.punkControl);
|
|
}
|
|
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnSetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder* pgb)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->()\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnGetFiltergraph(ICaptureGraphBuilder* iface,IGraphBuilder** ppgb)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->()\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnSetOutputFileName(ICaptureGraphBuilder* iface,const GUID* pguidType,LPCOLESTR pName,IBaseFilter** ppFilter,IFileSinkFilter** ppSink)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->() stub!\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnFindInterface(ICaptureGraphBuilder* iface,const GUID* pguidCat,IBaseFilter* pFilter,REFIID riid,void** ppvobj)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->() stub!\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnRenderStream(ICaptureGraphBuilder* iface,const GUID* pguidCat,IUnknown* pSource,IBaseFilter* pCompressor,IBaseFilter* pRenderer)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->() stub!\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnControlStream(ICaptureGraphBuilder* iface,const GUID* pguidCat,IBaseFilter* pFilter,REFERENCE_TIME* prtStart,REFERENCE_TIME* prtStop,WORD wStartCookie,WORD wStopCookie)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->() stub!\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnAllocCapFile(ICaptureGraphBuilder* iface,LPCOLESTR pName,DWORDLONG llSize)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->()\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static HRESULT WINAPI
|
|
ICaptureGraphBuilder_fnCopyCaptureFile(ICaptureGraphBuilder* iface,LPOLESTR pOrgName,LPOLESTR pNewName,int fAllowEscAbort,IAMCopyCaptureFileProgress* pCallback)
|
|
{
|
|
CCaptureGraph_THIS(iface,capgraph1);
|
|
|
|
FIXME("(%p)->()\n",This);
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
static ICOM_VTABLE(ICaptureGraphBuilder) icapgraph1 =
|
|
{
|
|
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
|
/* IUnknown fields */
|
|
ICaptureGraphBuilder_fnQueryInterface,
|
|
ICaptureGraphBuilder_fnAddRef,
|
|
ICaptureGraphBuilder_fnRelease,
|
|
/* ICaptureGraphBuilder fields */
|
|
ICaptureGraphBuilder_fnSetFiltergraph,
|
|
ICaptureGraphBuilder_fnGetFiltergraph,
|
|
ICaptureGraphBuilder_fnSetOutputFileName,
|
|
ICaptureGraphBuilder_fnFindInterface,
|
|
ICaptureGraphBuilder_fnRenderStream,
|
|
ICaptureGraphBuilder_fnControlStream,
|
|
ICaptureGraphBuilder_fnAllocCapFile,
|
|
ICaptureGraphBuilder_fnCopyCaptureFile,
|
|
};
|
|
|
|
|
|
static HRESULT CCaptureGraph_InitICaptureGraphBuilder( CCaptureGraph* This )
|
|
{
|
|
TRACE("(%p)\n",This);
|
|
ICOM_VTBL(&This->capgraph1) = &icapgraph1;
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
static void CCaptureGraph_UninitICaptureGraphBuilder( CCaptureGraph* This )
|
|
{
|
|
TRACE("(%p)\n",This);
|
|
}
|
|
|
|
|
|
/***************************************************************************
|
|
*
|
|
* new/delete for CCaptureGraph
|
|
*
|
|
*/
|
|
|
|
/* can I use offsetof safely? - FIXME? */
|
|
static QUARTZ_IFEntry IFEntries[] =
|
|
{
|
|
{ &IID_ICaptureGraphBuilder, offsetof(CCaptureGraph,capgraph1)-offsetof(CCaptureGraph,unk) },
|
|
};
|
|
|
|
static void QUARTZ_DestroyCaptureGraph(IUnknown* punk)
|
|
{
|
|
CCaptureGraph_THIS(punk,unk);
|
|
|
|
TRACE( "(%p)\n", This );
|
|
|
|
CCaptureGraph_UninitICaptureGraphBuilder(This);
|
|
}
|
|
|
|
HRESULT QUARTZ_CreateCaptureGraph(IUnknown* punkOuter,void** ppobj)
|
|
{
|
|
CCaptureGraph* pcg;
|
|
HRESULT hr;
|
|
|
|
TRACE("(%p,%p)\n",punkOuter,ppobj);
|
|
|
|
pcg = (CCaptureGraph*)QUARTZ_AllocObj( sizeof(CCaptureGraph) );
|
|
if ( pcg == NULL )
|
|
return E_OUTOFMEMORY;
|
|
|
|
QUARTZ_IUnkInit( &pcg->unk, punkOuter );
|
|
pcg->m_pfg = NULL;
|
|
|
|
hr = CCaptureGraph_InitICaptureGraphBuilder(pcg);
|
|
|
|
if ( FAILED(hr) )
|
|
{
|
|
QUARTZ_FreeObj(pcg);
|
|
return hr;
|
|
}
|
|
|
|
pcg->unk.pEntries = IFEntries;
|
|
pcg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]);
|
|
pcg->unk.pOnFinalRelease = QUARTZ_DestroyCaptureGraph;
|
|
|
|
*ppobj = (void*)(&pcg->unk);
|
|
|
|
return S_OK;
|
|
}
|