Nikolay Sivov : mfmediaengine: Keep "preload" property.

Alexandre Julliard julliard at winehq.org
Mon Nov 2 16:21:19 CST 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Nov  2 15:54:18 2020 +0300

mfmediaengine: Keep "preload" property.

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

---

 dlls/mfmediaengine/main.c                | 22 ++++++++++++++++++----
 dlls/mfmediaengine/tests/mfmediaengine.c |  9 ++++++---
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index d93e2b2f38c..64f0ae6d2a1 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -87,6 +87,7 @@ struct media_engine
     MF_MEDIA_ENGINE_ERR error_code;
     HRESULT extended_code;
     MF_MEDIA_ENGINE_READY ready_state;
+    MF_MEDIA_ENGINE_PRELOAD preload;
     IMFMediaSession *session;
     IMFSourceResolver *resolver;
     BSTR current_source;
@@ -717,16 +718,29 @@ static USHORT WINAPI media_engine_GetNetworkState(IMFMediaEngine *iface)
 
 static MF_MEDIA_ENGINE_PRELOAD WINAPI media_engine_GetPreload(IMFMediaEngine *iface)
 {
-    FIXME("(%p): stub.\n", iface);
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
+    MF_MEDIA_ENGINE_PRELOAD preload;
+
+    TRACE("%p.\n", iface);
+
+    EnterCriticalSection(&engine->cs);
+    preload = engine->preload;
+    LeaveCriticalSection(&engine->cs);
 
-    return MF_MEDIA_ENGINE_PRELOAD_NONE;
+    return preload;
 }
 
 static HRESULT WINAPI media_engine_SetPreload(IMFMediaEngine *iface, MF_MEDIA_ENGINE_PRELOAD preload)
 {
-    FIXME("(%p, %d): stub.\n", iface, preload);
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
 
-    return E_NOTIMPL;
+    TRACE("%p, %d.\n", iface, preload);
+
+    EnterCriticalSection(&engine->cs);
+    engine->preload = preload;
+    LeaveCriticalSection(&engine->cs);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI media_engine_GetBuffered(IMFMediaEngine *iface, IMFMediaTimeRange **buffered)
diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c
index 660e5b95331..0394bcf6a0e 100644
--- a/dlls/mfmediaengine/tests/mfmediaengine.c
+++ b/dlls/mfmediaengine/tests/mfmediaengine.c
@@ -265,17 +265,20 @@ todo_wine
 
     /* Preload mode is still accessible. */
     state = IMFMediaEngine_GetPreload(media_engine);
-todo_wine
     ok(!state, "Unexpected state %d.\n", state);
 
     hr = IMFMediaEngine_SetPreload(media_engine, MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC);
-todo_wine
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
 
     state = IMFMediaEngine_GetPreload(media_engine);
-todo_wine
     ok(state == MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC, "Unexpected state %d.\n", state);
 
+    hr = IMFMediaEngine_SetPreload(media_engine, 100);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    state = IMFMediaEngine_GetPreload(media_engine);
+    ok(state == 100, "Unexpected state %d.\n", state);
+
     hr = IMFMediaEngine_GetBuffered(media_engine, &time_range);
 todo_wine
     ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);




More information about the wine-cvs mailing list