Module: wine Branch: master Commit: 9ff3db5247717e1d8d8d90cbbea8ccec17ee7040 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9ff3db5247717e1d8d8d90cbb...
Author: Zebediah Figura z.figura12@gmail.com Date: Wed May 15 18:16:55 2019 -0500
strmbase: Factor out strmbase_renderer_cleanup().
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/strmbase/renderer.c | 50 ++++++++++++++++++++++++++---------------------- include/wine/strmbase.h | 1 + 2 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index c357102..fd6cf52 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -275,36 +275,40 @@ HRESULT WINAPI BaseRendererImpl_QueryInterface(IBaseFilter* iface, REFIID riid, return BaseFilterImpl_QueryInterface(iface, riid, ppv); }
-ULONG WINAPI BaseRendererImpl_Release(IBaseFilter* iface) +void strmbase_renderer_cleanup(BaseRenderer *filter) { - BaseRenderer *This = impl_from_IBaseFilter(iface); - ULONG refCount = InterlockedDecrement(&This->filter.refCount); + IPin *peer;
- if (!refCount) + if (SUCCEEDED(IPin_ConnectedTo(&filter->pInputPin->pin.IPin_iface, &peer))) { - IPin *pConnectedTo; + IPin_Disconnect(peer); + IPin_Release(peer); + } + IPin_Disconnect(&filter->pInputPin->pin.IPin_iface); + IPin_Release(&filter->pInputPin->pin.IPin_iface);
- if (SUCCEEDED(IPin_ConnectedTo(&This->pInputPin->pin.IPin_iface, &pConnectedTo))) - { - IPin_Disconnect(pConnectedTo); - IPin_Release(pConnectedTo); - } - IPin_Disconnect(&This->pInputPin->pin.IPin_iface); - IPin_Release(&This->pInputPin->pin.IPin_iface); + if (filter->pPosition) + IUnknown_Release(filter->pPosition); + + filter->csRenderLock.DebugInfo->Spare[0] = 0; + DeleteCriticalSection(&filter->csRenderLock);
- if (This->pPosition) - IUnknown_Release(This->pPosition); + BaseRendererImpl_ClearPendingSample(filter); + CloseHandle(filter->evComplete); + CloseHandle(filter->ThreadSignal); + CloseHandle(filter->RenderEvent); + QualityControlImpl_Destroy(filter->qcimpl); + BaseFilter_Destroy(&filter->filter); +} + +ULONG WINAPI BaseRendererImpl_Release(IBaseFilter* iface) +{ + BaseRenderer *This = impl_from_IBaseFilter(iface); + ULONG refCount = InterlockedDecrement(&This->filter.refCount);
- This->csRenderLock.DebugInfo->Spare[0] = 0; - DeleteCriticalSection(&This->csRenderLock); + if (!refCount) + strmbase_renderer_cleanup(This);
- BaseRendererImpl_ClearPendingSample(This); - CloseHandle(This->evComplete); - CloseHandle(This->ThreadSignal); - CloseHandle(This->RenderEvent); - QualityControlImpl_Destroy(This->qcimpl); - BaseFilter_Destroy(&This->filter); - } return refCount; }
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 1cd0028..b561c76 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -623,6 +623,7 @@ HRESULT WINAPI BaseRendererImpl_ClearPendingSample(BaseRenderer *iface); HRESULT WINAPI strmbase_renderer_init(BaseRenderer *filter, const IBaseFilterVtbl *vtbl, IUnknown *outer, const CLSID *clsid, const WCHAR *sink_name, DWORD_PTR debug_info, const BaseRendererFuncTable *func_table); +void strmbase_renderer_cleanup(BaseRenderer *filter);
#ifdef __IBasicAudio_FWD_DEFINED__ typedef struct tagBasicAudio