From a95c1f300e29f9d575ca60a677c76b3d22ac1b2a Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 13 May 2019 22:17:54 -0500 Subject: [PATCH] strmbase: Remove function pointers from the IEnumPinsImpl structure. Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/strmbase/enumpins.c | 39 +++++++++++++------------------- dlls/strmbase/filter.c | 21 ++++++----------- dlls/strmbase/strmbase_private.h | 4 +--- include/wine/strmbase.h | 4 +--- 4 files changed, 25 insertions(+), 43 deletions(-) diff --git a/dlls/strmbase/enumpins.c b/dlls/strmbase/enumpins.c index 65a11bd34e5..7aa66112c46 100644 --- a/dlls/strmbase/enumpins.c +++ b/dlls/strmbase/enumpins.c @@ -29,9 +29,6 @@ typedef struct IEnumPinsImpl LONG refCount; ULONG uIndex; BaseFilter *base; - BaseFilter_GetPin receive_pin; - BaseFilter_GetPinCount receive_pincount; - BaseFilter_GetPinVersion receive_version; DWORD Version; } IEnumPinsImpl; @@ -42,7 +39,7 @@ static inline IEnumPinsImpl *impl_from_IEnumPins(IEnumPins *iface) static const struct IEnumPinsVtbl IEnumPinsImpl_Vtbl; -HRESULT WINAPI EnumPins_Construct(BaseFilter *base, BaseFilter_GetPin receive_pin, BaseFilter_GetPinCount receive_pincount, BaseFilter_GetPinVersion receive_version, IEnumPins ** ppEnum) +HRESULT enum_pins_create(BaseFilter *base, IEnumPins **ppEnum) { IEnumPinsImpl * pEnumPins; @@ -58,13 +55,10 @@ HRESULT WINAPI EnumPins_Construct(BaseFilter *base, BaseFilter_GetPin receive_p pEnumPins->IEnumPins_iface.lpVtbl = &IEnumPinsImpl_Vtbl; pEnumPins->refCount = 1; pEnumPins->uIndex = 0; - pEnumPins->receive_pin = receive_pin; - pEnumPins->receive_pincount = receive_pincount; - pEnumPins->receive_version = receive_version; pEnumPins->base = base; IBaseFilter_AddRef(&base->IBaseFilter_iface); *ppEnum = &pEnumPins->IEnumPins_iface; - pEnumPins->Version = receive_version(base); + pEnumPins->Version = base->pin_version; TRACE("Created new enumerator (%p)\n", *ppEnum); return S_OK; @@ -134,13 +128,13 @@ static HRESULT WINAPI IEnumPinsImpl_Next(IEnumPins * iface, ULONG cPins, IPin ** if (pcFetched) *pcFetched = 0; - if (This->Version != This->receive_version(This->base)) + if (This->Version != This->base->pin_version) return VFW_E_ENUM_OUT_OF_SYNC; while (i < cPins) { IPin *pin; - pin = This->receive_pin(This->base, This->uIndex + i); + pin = This->base->pFuncsTable->pfnGetPin(This->base, This->uIndex + i); if (!pin) break; @@ -164,39 +158,38 @@ static HRESULT WINAPI IEnumPinsImpl_Skip(IEnumPins *iface, ULONG count) TRACE("enum_pins %p, count %u.\n", enum_pins, count); - if (enum_pins->Version != enum_pins->receive_version(enum_pins->base)) + if (enum_pins->Version != enum_pins->base->pin_version) return VFW_E_ENUM_OUT_OF_SYNC; - if (enum_pins->uIndex + count > enum_pins->receive_pincount(enum_pins->base)) + if (enum_pins->uIndex + count > enum_pins->base->pFuncsTable->pfnGetPinCount(enum_pins->base)) return S_FALSE; enum_pins->uIndex += count; return S_OK; } -static HRESULT WINAPI IEnumPinsImpl_Reset(IEnumPins * iface) +static HRESULT WINAPI IEnumPinsImpl_Reset(IEnumPins *iface) { - IEnumPinsImpl *This = impl_from_IEnumPins(iface); + IEnumPinsImpl *enum_pins = impl_from_IEnumPins(iface); - TRACE("(%p)->()\n", iface); + TRACE("iface %p.\n", iface); - This->Version = This->receive_version(This->base); + enum_pins->Version = enum_pins->base->pin_version; + enum_pins->uIndex = 0; - This->uIndex = 0; return S_OK; } -static HRESULT WINAPI IEnumPinsImpl_Clone(IEnumPins * iface, IEnumPins ** ppEnum) +static HRESULT WINAPI IEnumPinsImpl_Clone(IEnumPins *iface, IEnumPins **out) { + IEnumPinsImpl *enum_pins = impl_from_IEnumPins(iface); HRESULT hr; - IEnumPinsImpl *This = impl_from_IEnumPins(iface); - TRACE("(%p)->(%p)\n", iface, ppEnum); + TRACE("iface %p, out %p.\n", iface, out); - hr = EnumPins_Construct(This->base, This->receive_pin, This->receive_pincount, This->receive_version, ppEnum); - if (FAILED(hr)) + if (FAILED(hr = enum_pins_create(enum_pins->base, out))) return hr; - return IEnumPins_Skip(*ppEnum, This->uIndex); + return IEnumPins_Skip(*out, enum_pins->uIndex); } static const IEnumPinsVtbl IEnumPinsImpl_Vtbl = diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c index 50340cd9b50..ed0039f2ea7 100644 --- a/dlls/strmbase/filter.c +++ b/dlls/strmbase/filter.c @@ -125,13 +125,13 @@ HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter * iface, IReferenceClock return S_OK; } -HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum) +HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter *iface, IEnumPins **enum_pins) { - BaseFilter *This = impl_from_IBaseFilter(iface); + BaseFilter *filter = impl_from_IBaseFilter(iface); - TRACE("(%p)->(%p)\n", iface, ppEnum); + TRACE("iface %p, enum_pins %p.\n", iface, enum_pins); - return EnumPins_Construct(This, This->pFuncsTable->pfnGetPin, This->pFuncsTable->pfnGetPinCount, BaseFilterImpl_GetPinVersion, ppEnum); + return enum_pins_create(filter, enum_pins); } HRESULT WINAPI BaseFilterImpl_FindPin(IBaseFilter *iface, const WCHAR *id, IPin **ret) @@ -206,16 +206,9 @@ HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter * iface, LPWSTR *pVend return E_NOTIMPL; } -LONG WINAPI BaseFilterImpl_GetPinVersion(BaseFilter * This) +VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter *filter) { - TRACE("(%p)\n", This); - return This->pinVersion; -} - -VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter * This) -{ - InterlockedIncrement(&This->pinVersion); - TRACE("(%p) -> New pinVersion %i\n", This,This->pinVersion); + InterlockedIncrement(&filter->pin_version); } HRESULT WINAPI BaseFilter_Init(BaseFilter * This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable* pBaseFuncsTable) @@ -229,7 +222,7 @@ HRESULT WINAPI BaseFilter_Init(BaseFilter * This, const IBaseFilterVtbl *Vtbl, c ZeroMemory(&This->filterInfo, sizeof(FILTER_INFO)); This->clsid = *pClsid; This->csFilter.DebugInfo->Spare[0] = DebugInfo; - This->pinVersion = 1; + This->pin_version = 1; This->pFuncsTable = pBaseFuncsTable; diff --git a/dlls/strmbase/strmbase_private.h b/dlls/strmbase/strmbase_private.h index f3367f88c5a..de13a530c6d 100644 --- a/dlls/strmbase/strmbase_private.h +++ b/dlls/strmbase/strmbase_private.h @@ -63,9 +63,7 @@ void QualityControlRender_DoQOS(QualityControlImpl *priv); void QualityControlRender_BeginRender(QualityControlImpl *This); void QualityControlRender_EndRender(QualityControlImpl *This); -HRESULT WINAPI EnumPins_Construct(BaseFilter *base, BaseFilter_GetPin pfn_get_pin, - BaseFilter_GetPinCount pfn_get_pin_count, BaseFilter_GetPinVersion pfn_get_pin_version, - IEnumPins **enum_pins); +HRESULT enum_pins_create(BaseFilter *base, IEnumPins **enum_pins); HRESULT WINAPI RendererPosPassThru_RegisterMediaTime(IUnknown *iface, REFERENCE_TIME start); HRESULT WINAPI RendererPosPassThru_ResetMediaTime(IUnknown *iface); diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 120642c101a..477f162120d 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -163,14 +163,13 @@ typedef struct BaseFilter IReferenceClock * pClock; FILTER_INFO filterInfo; CLSID clsid; - LONG pinVersion; + LONG pin_version; const struct BaseFilterFuncTable* pFuncsTable; } BaseFilter; typedef IPin* (WINAPI *BaseFilter_GetPin)(BaseFilter* iface, int iPosition); typedef LONG (WINAPI *BaseFilter_GetPinCount)(BaseFilter* iface); -typedef LONG (WINAPI *BaseFilter_GetPinVersion)(BaseFilter* iface); typedef struct BaseFilterFuncTable { /* Required */ @@ -191,7 +190,6 @@ HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO * HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter * iface, IFilterGraph *pGraph, LPCWSTR pName ); HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter * iface, LPWSTR *pVendorInfo); -LONG WINAPI BaseFilterImpl_GetPinVersion(BaseFilter* This); VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter* This); HRESULT WINAPI BaseFilter_Init(BaseFilter * This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable* pBaseFuncsTable);