[PATCH 2/5] quartz/dsoundrender: Use BaseFilterImpl_Release().
Zebediah Figura
z.figura12 at gmail.com
Mon May 27 23:09:56 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/dsoundrender.c | 69 +++++++++++++++++---------------------
1 file changed, 30 insertions(+), 39 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index 844085a473b..2b50eaef9f9 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -586,6 +586,31 @@ static HRESULT WINAPI DSoundRender_EndFlush(BaseRenderer* iface)
return S_OK;
}
+static void dsound_render_destroy(BaseRenderer *iface)
+{
+ DSoundRenderImpl *filter = impl_from_BaseRenderer(iface);
+
+ if (filter->threadid)
+ {
+ PostThreadMessageW(filter->threadid, WM_APP, 0, 0);
+ WaitForSingleObject(filter->advisethread, INFINITE);
+ CloseHandle(filter->advisethread);
+ }
+
+ if (filter->dsbuffer)
+ IDirectSoundBuffer_Release(filter->dsbuffer);
+ filter->dsbuffer = NULL;
+ if (filter->dsound)
+ IDirectSound8_Release(filter->dsound);
+ filter->dsound = NULL;
+
+ BasicAudio_Destroy(&filter->basicAudio);
+ CloseHandle(filter->blocked);
+
+ strmbase_renderer_cleanup(&filter->renderer);
+ CoTaskMemFree(filter);
+}
+
static const BaseRendererFuncTable BaseFuncTable = {
DSoundRender_CheckMediaType,
DSoundRender_DoRenderSample,
@@ -606,6 +631,7 @@ static const BaseRendererFuncTable BaseFuncTable = {
DSoundRender_EndOfStream,
DSoundRender_BeginFlush,
DSoundRender_EndFlush,
+ dsound_render_destroy,
};
HRESULT DSoundRender_create(IUnknown * pUnkOuter, LPVOID * ppv)
@@ -712,41 +738,6 @@ static HRESULT WINAPI DSoundRender_QueryInterface(IBaseFilter * iface, REFIID ri
return E_NOINTERFACE;
}
-static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
-{
- DSoundRenderImpl *This = impl_from_IBaseFilter(iface);
- ULONG refCount = InterlockedDecrement(&This->renderer.filter.refCount);
-
- TRACE("(%p)->() Release from %d\n", This, refCount + 1);
-
- if (!refCount)
- {
- if (This->threadid) {
- PostThreadMessageW(This->threadid, WM_APP, 0, 0);
- WaitForSingleObject(This->advisethread, INFINITE);
- CloseHandle(This->advisethread);
- }
-
- if (This->dsbuffer)
- IDirectSoundBuffer_Release(This->dsbuffer);
- This->dsbuffer = NULL;
- if (This->dsound)
- IDirectSound8_Release(This->dsound);
- This->dsound = NULL;
-
- BasicAudio_Destroy(&This->basicAudio);
- CloseHandle(This->blocked);
-
- TRACE("Destroying Audio Renderer\n");
- strmbase_renderer_cleanup(&This->renderer);
- CoTaskMemFree(This);
-
- return 0;
- }
- else
- return refCount;
-}
-
static HRESULT WINAPI DSoundRender_Pause(IBaseFilter * iface)
{
DSoundRenderImpl *This = impl_from_IBaseFilter(iface);
@@ -781,7 +772,7 @@ static const IBaseFilterVtbl DSoundRender_Vtbl =
{
DSoundRender_QueryInterface,
BaseFilterImpl_AddRef,
- DSoundRender_Release,
+ BaseFilterImpl_Release,
BaseFilterImpl_GetClassID,
BaseRendererImpl_Stop,
DSoundRender_Pause,
@@ -820,7 +811,7 @@ static ULONG WINAPI Basicaudio_Release(IBasicAudio *iface) {
TRACE("(%p/%p)->()\n", This, iface);
- return DSoundRender_Release(&This->renderer.filter.IBaseFilter_iface);
+ return BaseFilterImpl_Release(&This->renderer.filter.IBaseFilter_iface);
}
/*** IBasicAudio methods ***/
@@ -1016,7 +1007,7 @@ static ULONG WINAPI ReferenceClock_Release(IReferenceClock *iface)
TRACE("(%p/%p)->()\n", This, iface);
- return DSoundRender_Release(&This->renderer.filter.IBaseFilter_iface);
+ return BaseFilterImpl_Release(&This->renderer.filter.IBaseFilter_iface);
}
/*** IReferenceClock methods ***/
@@ -1184,7 +1175,7 @@ static ULONG WINAPI AMDirectSound_Release(IAMDirectSound *iface)
TRACE("(%p/%p)->()\n", This, iface);
- return DSoundRender_Release(&This->renderer.filter.IBaseFilter_iface);
+ return BaseFilterImpl_Release(&This->renderer.filter.IBaseFilter_iface);
}
/*** IAMDirectSound methods ***/
--
2.21.0
More information about the wine-devel
mailing list