Nikolay Sivov : mf/sar: Implement stream flushing.

Alexandre Julliard julliard at winehq.org
Wed May 13 16:29:55 CDT 2020


Module: wine
Branch: master
Commit: 3000b6ea1a398ffddf842e49e35f4deaeb157e92
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3000b6ea1a398ffddf842e49e35f4deaeb157e92

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed May 13 16:42:10 2020 +0300

mf/sar: Implement stream flushing.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mf/sar.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c
index 59ee9c3dc4..0ea46dcb89 100644
--- a/dlls/mf/sar.c
+++ b/dlls/mf/sar.c
@@ -1396,9 +1396,30 @@ static HRESULT WINAPI audio_renderer_stream_PlaceMarker(IMFStreamSink *iface, MF
 
 static HRESULT WINAPI audio_renderer_stream_Flush(IMFStreamSink *iface)
 {
-    FIXME("%p.\n", iface);
+    struct audio_renderer *renderer = impl_from_IMFStreamSink(iface);
+    struct queued_object *obj, *obj2;
+    HRESULT hr = S_OK;
 
-    return E_NOTIMPL;
+    TRACE("%p.\n", iface);
+
+    EnterCriticalSection(&renderer->cs);
+    if (renderer->flags & SAR_SHUT_DOWN)
+        hr = MF_E_STREAMSINK_REMOVED;
+    else
+    {
+        LIST_FOR_EACH_ENTRY_SAFE(obj, obj2, &renderer->queue, struct queued_object, entry)
+        {
+            if (obj->type == OBJECT_TYPE_MARKER)
+            {
+                IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkMarker,
+                        &GUID_NULL, S_OK, &obj->u.marker.context);
+            }
+            release_pending_object(obj);
+        }
+    }
+    LeaveCriticalSection(&renderer->cs);
+
+    return hr;
 }
 
 static const IMFStreamSinkVtbl audio_renderer_stream_vtbl =




More information about the wine-cvs mailing list