[PATCH 2/2] mf/sar: Handle shutdown state in rendering callback.

Nikolay Sivov nsivov at codeweavers.com
Wed Jan 27 08:37:47 CST 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mf/sar.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c
index d839cba90f1..9030b3a81c0 100644
--- a/dlls/mf/sar.c
+++ b/dlls/mf/sar.c
@@ -1750,9 +1750,8 @@ static HRESULT WINAPI audio_renderer_render_callback_GetParameters(IMFAsyncCallb
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI audio_renderer_render_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result)
+static void audio_renderer_render(struct audio_renderer *renderer, IMFAsyncResult *result)
 {
-    struct audio_renderer *renderer = impl_from_render_callback_IMFAsyncCallback(iface);
     unsigned int src_frames, dst_frames, max_frames, src_len;
     struct queued_object *obj, *obj2;
     BOOL keep_sample = FALSE;
@@ -1760,8 +1759,6 @@ static HRESULT WINAPI audio_renderer_render_callback_Invoke(IMFAsyncCallback *if
     BYTE *dst, *src;
     HRESULT hr;
 
-    EnterCriticalSection(&renderer->cs);
-
     LIST_FOR_EACH_ENTRY_SAFE(obj, obj2, &renderer->queue, struct queued_object, entry)
     {
         if (obj->type == OBJECT_TYPE_MARKER)
@@ -1816,7 +1813,15 @@ static HRESULT WINAPI audio_renderer_render_callback_Invoke(IMFAsyncCallback *if
 
     if (FAILED(hr = MFPutWaitingWorkItem(renderer->buffer_ready_event, 0, result, &renderer->buffer_ready_key)))
         WARN("Failed to submit wait item, hr %#x.\n", hr);
+}
 
+static HRESULT WINAPI audio_renderer_render_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result)
+{
+    struct audio_renderer *renderer = impl_from_render_callback_IMFAsyncCallback(iface);
+
+    EnterCriticalSection(&renderer->cs);
+    if (!(renderer->flags & SAR_SHUT_DOWN))
+        audio_renderer_render(renderer, result);
     LeaveCriticalSection(&renderer->cs);
 
     return S_OK;
-- 
2.29.2




More information about the wine-devel mailing list