Zebediah Figura : quartz/filesource: Use BaseFilterImpl_Release().
Alexandre Julliard
julliard at winehq.org
Fri May 24 15:46:35 CDT 2019
Module: wine
Branch: master
Commit: b9735fc69e89706f8f9733e8be4b5016053ac2ae
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b9735fc69e89706f8f9733e8be4b5016053ac2ae
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Thu May 23 17:06:34 2019 -0500
quartz/filesource: Use BaseFilterImpl_Release().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/filesource.c | 59 +++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 33 deletions(-)
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index 269fa27..bb0f162 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -403,8 +403,32 @@ static IPin *async_reader_get_pin(BaseFilter *iface, unsigned int index)
return This->pOutputPin;
}
-static const BaseFilterFuncTable BaseFuncTable = {
+static void async_reader_destroy(BaseFilter *iface)
+{
+ AsyncReader *filter = impl_from_BaseFilter(iface);
+
+ if (filter->pOutputPin)
+ {
+ IPin *peer;
+ if (SUCCEEDED(IPin_ConnectedTo(filter->pOutputPin, &peer)))
+ {
+ IPin_Disconnect(peer);
+ IPin_Release(peer);
+ }
+ IPin_Disconnect(filter->pOutputPin);
+ IPin_Release(filter->pOutputPin);
+ }
+ CoTaskMemFree(filter->pszFileName);
+ if (filter->pmt)
+ DeleteMediaType(filter->pmt);
+ strmbase_filter_cleanup(&filter->filter);
+ CoTaskMemFree(filter);
+}
+
+static const BaseFilterFuncTable BaseFuncTable =
+{
.filter_get_pin = async_reader_get_pin,
+ .filter_destroy = async_reader_destroy,
};
HRESULT AsyncReader_create(IUnknown * pUnkOuter, LPVOID * ppv)
@@ -468,37 +492,6 @@ static HRESULT WINAPI AsyncReader_QueryInterface(IBaseFilter * iface, REFIID rii
return E_NOINTERFACE;
}
-static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface)
-{
- AsyncReader *This = impl_from_IBaseFilter(iface);
- ULONG refCount = InterlockedDecrement(&This->filter.refCount);
-
- TRACE("%p->() Release from %d\n", This, refCount + 1);
-
- if (!refCount)
- {
- if (This->pOutputPin)
- {
- IPin *pConnectedTo;
- if(SUCCEEDED(IPin_ConnectedTo(This->pOutputPin, &pConnectedTo)))
- {
- IPin_Disconnect(pConnectedTo);
- IPin_Release(pConnectedTo);
- }
- IPin_Disconnect(This->pOutputPin);
- IPin_Release(This->pOutputPin);
- }
- CoTaskMemFree(This->pszFileName);
- if (This->pmt)
- DeleteMediaType(This->pmt);
- strmbase_filter_cleanup(&This->filter);
- CoTaskMemFree(This);
- return 0;
- }
- else
- return refCount;
-}
-
/** IMediaFilter methods **/
static HRESULT WINAPI AsyncReader_Stop(IBaseFilter * iface)
@@ -538,7 +531,7 @@ static const IBaseFilterVtbl AsyncReader_Vtbl =
{
AsyncReader_QueryInterface,
BaseFilterImpl_AddRef,
- AsyncReader_Release,
+ BaseFilterImpl_Release,
BaseFilterImpl_GetClassID,
AsyncReader_Stop,
AsyncReader_Pause,
More information about the wine-cvs
mailing list