Nikolay Sivov : mf/sar: Handle shutdown state in rendering callback.
Alexandre Julliard
julliard at winehq.org
Wed Jan 27 15:35:04 CST 2021
Module: wine
Branch: master
Commit: ee8e83bd45d53659def21934859aac9455941737
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ee8e83bd45d53659def21934859aac9455941737
Author: Nikolay Sivov <nsivov at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list