Module: wine Branch: master Commit: ee8e83bd45d53659def21934859aac9455941737 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ee8e83bd45d53659def219348...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Jan 27 17:37:47 2021 +0300
mf/sar: Handle shutdown state in rendering callback.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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;