[PATCH 3/3] mf: Release previous video renderer services before initializing.
Rémi Bernon
wine at gitlab.winehq.org
Fri Jun 24 06:47:11 CDT 2022
From: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/mf/evr.c | 26 ++++++++++++++++++++++++--
dlls/mf/tests/mf.c | 1 -
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index b035b8b601b..d9808504733 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -279,6 +279,8 @@ static ULONG WINAPI video_stream_sink_Release(IMFStreamSink *iface)
struct video_stream *stream = impl_from_IMFStreamSink(iface);
ULONG refcount = InterlockedDecrement(&stream->refcount);
+ TRACE("%p, refcount %lu.\n", iface, refcount);
+
if (!refcount)
{
if (stream->event_queue)
@@ -1745,6 +1747,28 @@ static HRESULT WINAPI video_renderer_InitializeRenderer(IMFVideoRenderer *iface,
TRACE("%p, %p, %p.\n", iface, mixer, presenter);
+ EnterCriticalSection(&renderer->cs);
+
+ if (renderer->mixer)
+ {
+ video_renderer_release_services(renderer);
+ IMFTransform_Release(renderer->mixer);
+ renderer->mixer = NULL;
+ }
+
+ if (renderer->presenter)
+ {
+ video_renderer_release_presenter_services(renderer);
+ IMFVideoPresenter_Release(renderer->presenter);
+ renderer->presenter = NULL;
+ }
+
+ if (renderer->device_manager)
+ {
+ IUnknown_Release(renderer->device_manager);
+ renderer->device_manager = NULL;
+ }
+
if (mixer)
IMFTransform_AddRef(mixer);
else if (FAILED(hr = video_renderer_create_mixer(NULL, &mixer)))
@@ -1762,8 +1786,6 @@ static HRESULT WINAPI video_renderer_InitializeRenderer(IMFVideoRenderer *iface,
return hr;
}
- EnterCriticalSection(&renderer->cs);
-
if (renderer->flags & EVR_SHUT_DOWN)
hr = MF_E_SHUTDOWN;
else
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index ab380d1c475..adc6f7134d5 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -4765,7 +4765,6 @@ static void test_evr(void)
IMFMediaSink_Release(sink);
ref = IMFVideoRenderer_Release(video_renderer);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
hr = MFCreateVideoRendererActivate(NULL, NULL);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/310
More information about the wine-devel
mailing list