From 80c233b9ddf41872f604552a81bf156ef993b441 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Wed, 18 Jan 2012 07:49:45 -0600 Subject: [PATCH] amstream: Have the MediaStream Filter use strmbase. --- dlls/amstream/Makefile.in | 2 +- dlls/amstream/mediastreamfilter.c | 81 +++++++++++++------------------ 2 files changed, 36 insertions(+), 47 deletions(-) diff --git a/dlls/amstream/Makefile.in b/dlls/amstream/Makefile.in index 0418c0534d8..3353a38a610 100644 --- a/dlls/amstream/Makefile.in +++ b/dlls/amstream/Makefile.in @@ -1,5 +1,5 @@ MODULE = amstream.dll -IMPORTS = strmiids uuid ole32 advapi32 +IMPORTS = strmiids strmbase uuid ole32 advapi32 C_SRCS = \ amstream.c \ diff --git a/dlls/amstream/mediastreamfilter.c b/dlls/amstream/mediastreamfilter.c index 0c72c775ee0..d576b490c36 100644 --- a/dlls/amstream/mediastreamfilter.c +++ b/dlls/amstream/mediastreamfilter.c @@ -24,6 +24,9 @@ #include "winbase.h" #include "wingdi.h" +#include "dshow.h" + +#include "wine/strmbase.h" #include "amstream_private.h" #include "amstream.h" @@ -33,18 +36,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(amstream); typedef struct { - IMediaStreamFilter IMediaStreamFilter_iface; - LONG ref; - CRITICAL_SECTION csFilter; - FILTER_STATE state; - REFERENCE_TIME rtStreamStart; - IReferenceClock * pClock; - FILTER_INFO filterInfo; + BaseFilter filter; + } IMediaStreamFilterImpl; static inline IMediaStreamFilterImpl *impl_from_IMediaStreamFilter(IMediaStreamFilter *iface) { - return CONTAINING_RECORD(iface, IMediaStreamFilterImpl, IMediaStreamFilter_iface); + return CONTAINING_RECORD(iface, IMediaStreamFilterImpl, filter); } /*** IUnknown methods ***/ @@ -80,18 +78,13 @@ static HRESULT WINAPI MediaStreamFilterImpl_QueryInterface(IMediaStreamFilter *i static ULONG WINAPI MediaStreamFilterImpl_AddRef(IMediaStreamFilter *iface) { - IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface); - ULONG refCount = InterlockedIncrement(&This->ref); - - TRACE("(%p)->() AddRef from %d\n", iface, refCount - 1); - - return refCount; + return BaseFilterImpl_AddRef((IBaseFilter*)iface); } static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter *iface) { IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface); - ULONG refCount = InterlockedDecrement(&This->ref); + ULONG refCount = BaseFilterImpl_Release((IBaseFilter*)iface); TRACE("(%p)->() Release from %d\n", iface, refCount + 1); @@ -105,14 +98,10 @@ static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter *iface) static HRESULT WINAPI MediaStreamFilterImpl_GetClassID(IMediaStreamFilter * iface, CLSID * pClsid) { - TRACE("(%p)->(%p)\n", iface, pClsid); - - *pClsid = CLSID_MediaStreamFilter; - - return S_OK; + return BaseFilterImpl_GetClassID((IBaseFilter*)iface, pClsid); } -/*** IMediaFilter methods ***/ +/*** IBaseFilter methods ***/ static HRESULT WINAPI MediaStreamFilterImpl_Stop(IMediaStreamFilter * iface) { @@ -137,32 +126,22 @@ static HRESULT WINAPI MediaStreamFilterImpl_Run(IMediaStreamFilter * iface, REFE static HRESULT WINAPI MediaStreamFilterImpl_GetState(IMediaStreamFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState) { - FIXME("(%p)->(%d,%p): Stub!\n", iface, dwMilliSecsTimeout, pState); - - return E_NOTIMPL; + return BaseFilterImpl_GetState((IBaseFilter*)iface, dwMilliSecsTimeout, pState); } static HRESULT WINAPI MediaStreamFilterImpl_SetSyncSource(IMediaStreamFilter * iface, IReferenceClock *pClock) { - TRACE("(%p)->(%p): Stub!\n", iface, pClock); - - return E_NOTIMPL; + return BaseFilterImpl_SetSyncSource((IBaseFilter*)iface, pClock); } static HRESULT WINAPI MediaStreamFilterImpl_GetSyncSource(IMediaStreamFilter * iface, IReferenceClock **ppClock) { - FIXME("(%p)->(%p): Stub!\n", iface, ppClock); - - return E_NOTIMPL; + return BaseFilterImpl_GetSyncSource((IBaseFilter*)iface, ppClock); } -/*** IBaseFilter methods ***/ - static HRESULT WINAPI MediaStreamFilterImpl_EnumPins(IMediaStreamFilter * iface, IEnumPins **ppEnum) { - FIXME("(%p)->(%p): Stub!\n", iface, ppEnum); - - return E_NOTIMPL; + return BaseFilterImpl_EnumPins((IBaseFilter*)iface, ppEnum); } static HRESULT WINAPI MediaStreamFilterImpl_FindPin(IMediaStreamFilter * iface, LPCWSTR Id, IPin **ppPin) @@ -174,23 +153,17 @@ static HRESULT WINAPI MediaStreamFilterImpl_FindPin(IMediaStreamFilter * iface, static HRESULT WINAPI MediaStreamFilterImpl_QueryFilterInfo(IMediaStreamFilter * iface, FILTER_INFO *pInfo) { - FIXME("(%p)->(%p): Stub!\n", iface, pInfo); - - return E_NOTIMPL; + return BaseFilterImpl_QueryFilterInfo((IBaseFilter*)iface, pInfo); } static HRESULT WINAPI MediaStreamFilterImpl_JoinFilterGraph(IMediaStreamFilter * iface, IFilterGraph *pGraph, LPCWSTR pName) { - FIXME("(%p)->(%p, %s): Stub!\n", iface, pGraph, debugstr_w(pName)); - - return E_NOTIMPL; + return BaseFilterImpl_JoinFilterGraph((IBaseFilter*)iface, pGraph, pName); } static HRESULT WINAPI MediaStreamFilterImpl_QueryVendorInfo(IMediaStreamFilter * iface, LPWSTR *pVendorInfo) { - FIXME("(%p)->(%p): Stub!\n", iface, pVendorInfo); - - return E_NOTIMPL; + return BaseFilterImpl_QueryVendorInfo((IBaseFilter*)iface, pVendorInfo); } /*** IMediaStreamFilter methods ***/ @@ -286,6 +259,23 @@ static const IMediaStreamFilterVtbl MediaStreamFilter_Vtbl = MediaStreamFilterImpl_EndOfStream }; +static IPin* WINAPI MediaStreamFilterImpl_GetPin(BaseFilter *iface, int pos) +{ + /* No pins */ + return NULL; +} + +static LONG WINAPI MediaStreamFilterImpl_GetPinCount(BaseFilter *iface) +{ + /* No pins */ + return 0; +} + +static const BaseFilterFuncTable BaseFuncTable = { + MediaStreamFilterImpl_GetPin, + MediaStreamFilterImpl_GetPinCount +}; + HRESULT MediaStreamFilter_create(IUnknown *pUnkOuter, void **ppObj) { IMediaStreamFilterImpl* object; @@ -302,8 +292,7 @@ HRESULT MediaStreamFilter_create(IUnknown *pUnkOuter, void **ppObj) return E_OUTOFMEMORY; } - object->IMediaStreamFilter_iface.lpVtbl = &MediaStreamFilter_Vtbl; - object->ref = 1; + BaseFilter_Init(&object->filter, (IBaseFilterVtbl*)&MediaStreamFilter_Vtbl, &CLSID_MediaStreamFilter, (DWORD_PTR)(__FILE__ ": MediaStreamFilterImpl.csFilter"), &BaseFuncTable); *ppObj = object;