[PATCH 1/6] mf/evr: Handle sample requests from the mixer.

Nikolay Sivov nsivov at codeweavers.com
Wed Nov 11 07:36:46 CST 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mf/evr.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 486958f5f79..a77372977c7 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -21,6 +21,7 @@
 #include "mf_private.h"
 #include "uuids.h"
 #include "evr.h"
+#include "evcode.h"
 #include "d3d9.h"
 #include "initguid.h"
 #include "dxva2api.h"
@@ -1723,9 +1724,34 @@ static ULONG WINAPI video_renderer_event_sink_Release(IMediaEventSink *iface)
 
 static HRESULT WINAPI video_renderer_event_sink_Notify(IMediaEventSink *iface, LONG event, LONG_PTR param1, LONG_PTR param2)
 {
-    FIXME("%p, %d, %ld, %ld.\n", iface, event, param1, param2);
+    struct video_renderer *renderer = impl_from_IMediaEventSink(iface);
+    HRESULT hr = S_OK;
+    unsigned int idx;
 
-    return E_NOTIMPL;
+    TRACE("%p, %d, %ld, %ld.\n", iface, event, param1, param2);
+
+    EnterCriticalSection(&renderer->cs);
+
+    if (event == EC_SAMPLE_NEEDED)
+    {
+        idx = param1;
+        if (idx >= renderer->stream_count)
+            hr = MF_E_INVALIDSTREAMNUMBER;
+        else
+        {
+            hr = IMFMediaEventQueue_QueueEventParamVar(renderer->streams[idx]->event_queue,
+                MEStreamSinkRequestSample, &GUID_NULL, S_OK, NULL);
+        }
+    }
+    else
+    {
+        WARN("Unhandled event %d.\n", event);
+        hr = MF_E_UNEXPECTED;
+    }
+
+    LeaveCriticalSection(&renderer->cs);
+
+    return hr;
 }
 
 static const IMediaEventSinkVtbl media_event_sink_vtbl =
-- 
2.28.0




More information about the wine-devel mailing list