Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplay/player.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c index f7832598ae6..42b40b99ea1 100644 --- a/dlls/mfplay/player.c +++ b/dlls/mfplay/player.c @@ -1860,21 +1860,6 @@ static void media_player_create_forward_event(struct media_player *player, HRESU LeaveCriticalSection(&player->cs); }
-static void media_player_create_playback_ended_event(struct media_player *player, HRESULT event_status, - struct media_event **event) -{ - EnterCriticalSection(&player->cs); - - if (SUCCEEDED(media_event_create(player, MFP_EVENT_TYPE_PLAYBACK_ENDED, event_status, player->item, event))) - { - if (player->item) - IMFPMediaItem_Release(player->item); - player->item = NULL; - } - - LeaveCriticalSection(&player->cs); -} - static HRESULT WINAPI media_player_session_events_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result) { @@ -1936,7 +1921,7 @@ static HRESULT WINAPI media_player_session_events_callback_Invoke(IMFAsyncCallba if (SUCCEEDED(IMFMediaEvent_GetUINT32(session_event, &MF_EVENT_TOPOLOGY_STATUS, &status)) && status == MF_TOPOSTATUS_ENDED) { - media_player_create_playback_ended_event(player, event_status, &event); + media_event_create(player, MFP_EVENT_TYPE_PLAYBACK_ENDED, event_status, player->item, &event); }
break;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplay/player.c | 6 +++++- dlls/mfplay/tests/mfplay.c | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c index 42b40b99ea1..28226f92962 100644 --- a/dlls/mfplay/player.c +++ b/dlls/mfplay/player.c @@ -1224,12 +1224,16 @@ static HRESULT media_item_create_topology(struct media_player *player, struct me static HRESULT WINAPI media_player_SetMediaItem(IMFPMediaPlayer *iface, IMFPMediaItem *item_iface) { struct media_player *player = impl_from_IMFPMediaPlayer(iface); - struct media_item *item = unsafe_impl_from_IMFPMediaItem(item_iface); + struct media_item *item; IMFTopology *topology; HRESULT hr;
TRACE("%p, %p.\n", iface, item_iface);
+ if (!item_iface) + return E_POINTER; + + item = unsafe_impl_from_IMFPMediaItem(item_iface); if (item->player != iface) return E_INVALIDARG;
diff --git a/dlls/mfplay/tests/mfplay.c b/dlls/mfplay/tests/mfplay.c index a2d6da54f3e..438d636daa2 100644 --- a/dlls/mfplay/tests/mfplay.c +++ b/dlls/mfplay/tests/mfplay.c @@ -198,8 +198,23 @@ static void test_shutdown(void) IMFPMediaPlayer_Release(player); }
+static void test_media_item(void) +{ + IMFPMediaPlayer *player; + HRESULT hr; + + hr = MFPCreateMediaPlayer(NULL, FALSE, 0, NULL, NULL, &player); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFPMediaPlayer_SetMediaItem(player, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + IMFPMediaPlayer_Release(player); +} + START_TEST(mfplay) { test_create_player(); test_shutdown(); + test_media_item(); }