[PATCH 5/6] mfmediaengine: Keep auto-play flag.

Nikolay Sivov nsivov at codeweavers.com
Thu May 28 10:54:20 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfmediaengine/main.c                | 28 +++++++++++++++++++++---
 dlls/mfmediaengine/tests/mfmediaengine.c |  1 -
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index 0c082a87f5f..7053a3afea3 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -59,6 +59,7 @@ enum media_engine_flags
 {
     /* MF_MEDIA_ENGINE_CREATEFLAGS_MASK is 0x1f. */
     FLAGS_ENGINE_SHUT_DOWN = 0x20,
+    FLAGS_ENGINE_AUTO_PLAY = 0x40,
 };
 
 struct media_engine
@@ -74,6 +75,14 @@ struct media_engine
     CRITICAL_SECTION cs;
 };
 
+static void media_engine_set_flag(struct media_engine *engine, unsigned int mask, BOOL value)
+{
+    if (value)
+        engine->flags |= mask;
+    else
+        engine->flags &= ~mask;
+}
+
 static inline struct media_engine *impl_from_IMFMediaEngine(IMFMediaEngine *iface)
 {
     return CONTAINING_RECORD(iface, struct media_engine, IMFMediaEngine_iface);
@@ -306,16 +315,29 @@ static BOOL WINAPI media_engine_IsEnded(IMFMediaEngine *iface)
 
 static BOOL WINAPI media_engine_GetAutoPlay(IMFMediaEngine *iface)
 {
-    FIXME("(%p): stub.\n", iface);
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
+    BOOL value;
 
-    return FALSE;
+    TRACE("%p.\n", iface);
+
+    EnterCriticalSection(&engine->cs);
+    value = !!(engine->flags & FLAGS_ENGINE_AUTO_PLAY);
+    LeaveCriticalSection(&engine->cs);
+
+    return value;
 }
 
 static HRESULT WINAPI media_engine_SetAutoPlay(IMFMediaEngine *iface, BOOL autoplay)
 {
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
+
     FIXME("(%p, %d): stub.\n", iface, autoplay);
 
-    return E_NOTIMPL;
+    EnterCriticalSection(&engine->cs);
+    media_engine_set_flag(engine, FLAGS_ENGINE_AUTO_PLAY, autoplay);
+    LeaveCriticalSection(&engine->cs);
+
+    return S_OK;
 }
 
 static BOOL WINAPI media_engine_GetLoop(IMFMediaEngine *iface)
diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c
index d3c15566a43..8f6c4ca75bb 100644
--- a/dlls/mfmediaengine/tests/mfmediaengine.c
+++ b/dlls/mfmediaengine/tests/mfmediaengine.c
@@ -338,7 +338,6 @@ todo_wine
     ok(!state, "Unexpected state.\n");
 
     hr = IMFMediaEngine_SetAutoPlay(media_engine, TRUE);
-todo_wine
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
 
     state = IMFMediaEngine_GetAutoPlay(media_engine);
-- 
2.26.2




More information about the wine-devel mailing list