Nikolay Sivov : mfplay: Implement GetVideoWindow().

Alexandre Julliard julliard at winehq.org
Wed Apr 7 15:48:29 CDT 2021


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Apr  7 11:06:59 2021 +0300

mfplay: Implement GetVideoWindow().

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

---

 dlls/mfplay/player.c       | 18 ++++++++++++------
 dlls/mfplay/tests/mfplay.c |  8 +++++++-
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c
index 246704c2799..479aca40890 100644
--- a/dlls/mfplay/player.c
+++ b/dlls/mfplay/player.c
@@ -69,6 +69,7 @@ struct media_player
     IMFSourceResolver *resolver;
     MFP_CREATION_OPTIONS options;
     HWND event_window;
+    HWND output_window;
 };
 
 struct generic_event
@@ -862,11 +863,15 @@ static HRESULT WINAPI media_player_GetAspectRatioMode(IMFPMediaPlayer *iface,
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI media_player_GetVideoWindow(IMFPMediaPlayer *iface, HWND *hwnd)
+static HRESULT WINAPI media_player_GetVideoWindow(IMFPMediaPlayer *iface, HWND *window)
 {
-    FIXME("%p, %p.\n", iface, hwnd);
+    struct media_player *player = impl_from_IMFPMediaPlayer(iface);
 
-    return E_NOTIMPL;
+    TRACE("%p, %p.\n", iface, window);
+
+    *window = player->output_window;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI media_player_UpdateVideo(IMFPMediaPlayer *iface)
@@ -1166,12 +1171,12 @@ static const IMFAsyncCallbackVtbl media_player_events_callback_vtbl =
 };
 
 HRESULT WINAPI MFPCreateMediaPlayer(const WCHAR *url, BOOL start_playback, MFP_CREATION_OPTIONS options,
-        IMFPMediaPlayerCallback *callback, HWND hwnd, IMFPMediaPlayer **player)
+        IMFPMediaPlayerCallback *callback, HWND window, IMFPMediaPlayer **player)
 {
     struct media_player *object;
     HRESULT hr;
 
-    TRACE("%s, %d, %#x, %p, %p, %p.\n", debugstr_w(url), start_playback, options, callback, hwnd, player);
+    TRACE("%s, %d, %#x, %p, %p, %p.\n", debugstr_w(url), start_playback, options, callback, window, player);
 
     if (!(object = heap_alloc_zero(sizeof(*object))))
         return E_OUTOFMEMORY;
@@ -1184,9 +1189,10 @@ HRESULT WINAPI MFPCreateMediaPlayer(const WCHAR *url, BOOL start_playback, MFP_C
     object->events_callback.lpVtbl = &media_player_events_callback_vtbl;
     object->refcount = 1;
     object->callback = callback;
-    object->options = options;
     if (object->callback)
         IMFPMediaPlayerCallback_AddRef(object->callback);
+    object->options = options;
+    object->output_window = window;
     if (FAILED(hr = CreatePropertyStore(&object->propstore)))
         goto failed;
     if (FAILED(hr = MFCreateSourceResolver(&object->resolver)))
diff --git a/dlls/mfplay/tests/mfplay.c b/dlls/mfplay/tests/mfplay.c
index 64347265c40..6d82f630075 100644
--- a/dlls/mfplay/tests/mfplay.c
+++ b/dlls/mfplay/tests/mfplay.c
@@ -83,6 +83,7 @@ static void test_create_player(void)
     IPropertyStore *propstore;
     IMFPMediaPlayer *player;
     IUnknown *unk, *unk2;
+    HWND window;
     HRESULT hr;
 
     hr = MFPCreateMediaPlayer(NULL, FALSE, 0, NULL, NULL, &player);
@@ -108,8 +109,13 @@ static void test_create_player(void)
 
     IMFPMediaPlayer_Release(player);
 
-    hr = MFPCreateMediaPlayer(NULL, FALSE, 0, &callback, NULL, &player);
+    hr = MFPCreateMediaPlayer(NULL, FALSE, 0, &callback, (HWND)0x1, &player);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = IMFPMediaPlayer_GetVideoWindow(player, &window);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(window == (HWND)0x1, "Unexpected window.\n");
+
     IMFPMediaPlayer_Release(player);
 }
 




More information about the wine-cvs mailing list