Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mfplay/player.c | 33 +++++++-------
dlls/mfplay/tests/Makefile.in | 2 +-
dlls/mfplay/tests/mfplay.c | 86 +++++++++++++++++++++++++++++++++--
3 files changed, 101 insertions(+), 20 deletions(-)
diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c
index 28226f92962..03f204768ab 100644
--- a/dlls/mfplay/player.c
+++ b/dlls/mfplay/player.c
@@ -1323,6 +1323,15 @@ static HRESULT WINAPI media_player_SetMute(IMFPMediaPlayer *iface, BOOL mute)
return E_NOTIMPL;
}
+static HRESULT media_player_get_display_control(const struct media_player *player,
+ IMFVideoDisplayControl **display_control)
+{
+ HRESULT hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
+ &IID_IMFVideoDisplayControl, (void **)display_control);
+ if (SUCCEEDED(hr)) return hr;
+ return hr == MF_E_SHUTDOWN ? hr : MF_E_INVALIDREQUEST;
+}
+
static HRESULT WINAPI media_player_GetNativeVideoSize(IMFPMediaPlayer *iface,
SIZE *video, SIZE *arvideo)
{
@@ -1332,8 +1341,7 @@ static HRESULT WINAPI media_player_GetNativeVideoSize(IMFPMediaPlayer *iface,
TRACE("%p, %p, %p.\n", iface, video, arvideo);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_GetNativeVideoSize(display_control, video, arvideo);
IMFVideoDisplayControl_Release(display_control);
@@ -1351,8 +1359,7 @@ static HRESULT WINAPI media_player_GetIdealVideoSize(IMFPMediaPlayer *iface,
TRACE("%p, %p, %p.\n", iface, min_size, max_size);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_GetIdealVideoSize(display_control, min_size, max_size);
IMFVideoDisplayControl_Release(display_control);
@@ -1370,8 +1377,7 @@ static HRESULT WINAPI media_player_SetVideoSourceRect(IMFPMediaPlayer *iface,
TRACE("%p, %p.\n", iface, rect);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_SetVideoPosition(display_control, rect, NULL);
IMFVideoDisplayControl_Release(display_control);
@@ -1390,8 +1396,7 @@ static HRESULT WINAPI media_player_GetVideoSourceRect(IMFPMediaPlayer *iface,
TRACE("%p, %p.\n", iface, rect);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_GetVideoPosition(display_control, rect, &dest);
IMFVideoDisplayControl_Release(display_control);
@@ -1408,8 +1413,7 @@ static HRESULT WINAPI media_player_SetAspectRatioMode(IMFPMediaPlayer *iface, DW
TRACE("%p, %u.\n", iface, mode);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_SetAspectRatioMode(display_control, mode);
IMFVideoDisplayControl_Release(display_control);
@@ -1427,8 +1431,7 @@ static HRESULT WINAPI media_player_GetAspectRatioMode(IMFPMediaPlayer *iface,
TRACE("%p, %p.\n", iface, mode);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_GetAspectRatioMode(display_control, mode);
IMFVideoDisplayControl_Release(display_control);
@@ -1463,8 +1466,7 @@ static HRESULT WINAPI media_player_SetBorderColor(IMFPMediaPlayer *iface, COLORR
TRACE("%p, %#x.\n", iface, color);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_SetBorderColor(display_control, color);
IMFVideoDisplayControl_Release(display_control);
@@ -1481,8 +1483,7 @@ static HRESULT WINAPI media_player_GetBorderColor(IMFPMediaPlayer *iface, COLORR
TRACE("%p, %p.\n", iface, color);
- if (SUCCEEDED(hr = MFGetService((IUnknown *)player->session, &MR_VIDEO_RENDER_SERVICE,
- &IID_IMFVideoDisplayControl, (void **)&display_control)))
+ if (SUCCEEDED(hr = media_player_get_display_control(player, &display_control)))
{
hr = IMFVideoDisplayControl_GetBorderColor(display_control, color);
IMFVideoDisplayControl_Release(display_control);
diff --git a/dlls/mfplay/tests/Makefile.in b/dlls/mfplay/tests/Makefile.in
index 43c7ec26240..4eabb5ae0ab 100644
--- a/dlls/mfplay/tests/Makefile.in
+++ b/dlls/mfplay/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = mfplay.dll
-IMPORTS = mfplay uuid mfuuid
+IMPORTS = mfplay user32 uuid mfuuid
C_SRCS = \
mfplay.c
diff --git a/dlls/mfplay/tests/mfplay.c b/dlls/mfplay/tests/mfplay.c
index 438d636daa2..074cee6d217 100644
--- a/dlls/mfplay/tests/mfplay.c
+++ b/dlls/mfplay/tests/mfplay.c
@@ -142,13 +142,16 @@ static void test_create_player(void)
static void test_shutdown(void)
{
- SIZE min_size, max_size;
+ SIZE size, min_size, max_size;
+ MFP_MEDIAPLAYER_STATE state;
+ MFVideoNormalizedRect rect;
IMFPMediaPlayer *player;
float slowest, fastest;
- HRESULT hr;
- MFP_MEDIAPLAYER_STATE state;
IMFPMediaItem *item;
+ COLORREF color;
HWND window;
+ DWORD mode;
+ HRESULT hr;
hr = MFPCreateMediaPlayer(NULL, FALSE, 0, NULL, NULL, &player);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -180,6 +183,28 @@ static void test_shutdown(void)
hr = IMFPMediaPlayer_GetIdealVideoSize(player, &min_size, &max_size);
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+ hr = IMFPMediaPlayer_GetVideoSourceRect(player, &rect);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetBorderColor(player, &color);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetAspectRatioMode(player, &mode);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetNativeVideoSize(player, &size, &size);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_SetBorderColor(player, 0);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_SetAspectRatioMode(player, MFVideoARMode_None);
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_UpdateVideo(player);
+todo_wine
+ ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+
hr = IMFPMediaPlayer_CreateMediaItemFromURL(player, L"url", TRUE, 0, &item);
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
@@ -212,9 +237,64 @@ static void test_media_item(void)
IMFPMediaPlayer_Release(player);
}
+static void test_video_control(void)
+{
+ MFVideoNormalizedRect rect;
+ IMFPMediaPlayer *player;
+ COLORREF color;
+ HWND window;
+ DWORD mode;
+ HRESULT hr;
+ SIZE size;
+
+ window = CreateWindowA("static", "mfplay_test", WS_OVERLAPPEDWINDOW,
+ 0, 0, 640, 480, 0, 0, 0, 0);
+ ok(!!window, "Failed to create output window.\n");
+
+ hr = MFPCreateMediaPlayer(NULL, FALSE, 0, NULL, window, &player);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ /* No active media item */
+
+ rect.left = rect.top = 0.0f;
+ rect.right = rect.bottom = 1.0f;
+ hr = IMFPMediaPlayer_SetVideoSourceRect(player, &rect);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_SetBorderColor(player, 0);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_SetAspectRatioMode(player, MFVideoARMode_None);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetVideoSourceRect(player, &rect);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetBorderColor(player, &color);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetAspectRatioMode(player, &mode);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetIdealVideoSize(player, &size, &size);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_GetNativeVideoSize(player, &size, &size);
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPMediaPlayer_UpdateVideo(player);
+todo_wine
+ ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
+
+ IMFPMediaPlayer_Release(player);
+
+ DestroyWindow(window);
+}
+
START_TEST(mfplay)
{
test_create_player();
test_shutdown();
test_media_item();
+ test_video_control();
}
--
2.33.0