Nikolay Sivov : mfplay: Implement GetURL().
Alexandre Julliard
julliard at winehq.org
Wed Apr 7 15:48:30 CDT 2021
Module: wine
Branch: master
Commit: 342d7797987c2f890f0e2b13bdfff92333f9ea57
URL: https://source.winehq.org/git/wine.git/?a=commit;h=342d7797987c2f890f0e2b13bdfff92333f9ea57
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Apr 7 11:07:06 2021 +0300
mfplay: Implement GetURL().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfplay/Makefile.in | 2 +-
dlls/mfplay/player.c | 23 +++++++++++++++++++++--
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/mfplay/Makefile.in b/dlls/mfplay/Makefile.in
index c353fa33cc1..8cd572bf638 100644
--- a/dlls/mfplay/Makefile.in
+++ b/dlls/mfplay/Makefile.in
@@ -1,6 +1,6 @@
MODULE = mfplay.dll
IMPORTLIB = mfplay
-IMPORTS = mfplat mf user32 uuid mfuuid
+IMPORTS = mfplat mf ole32 user32 uuid mfuuid
EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c
index 9f20d6c1a2a..87a345e6968 100644
--- a/dlls/mfplay/player.c
+++ b/dlls/mfplay/player.c
@@ -24,6 +24,7 @@
#include "winbase.h"
#include "mfapi.h"
#include "mfplay.h"
+#include "mferror.h"
#include "wine/debug.h"
#include "wine/heap.h"
@@ -55,6 +56,7 @@ struct media_item
IMFMediaSource *source;
IMFPresentationDescriptor *pd;
DWORD_PTR user_data;
+ WCHAR *url;
};
struct media_player
@@ -308,6 +310,7 @@ static ULONG WINAPI media_item_Release(IMFPMediaItem *iface)
IMFMediaSource_Release(item->source);
if (item->pd)
IMFPresentationDescriptor_Release(item->pd);
+ free(item->url);
heap_free(item);
}
@@ -329,9 +332,19 @@ static HRESULT WINAPI media_item_GetMediaPlayer(IMFPMediaItem *iface,
static HRESULT WINAPI media_item_GetURL(IMFPMediaItem *iface, LPWSTR *url)
{
- FIXME("%p, %p.\n", iface, url);
+ struct media_item *item = impl_from_IMFPMediaItem(iface);
- return E_NOTIMPL;
+ TRACE("%p, %p.\n", iface, url);
+
+ if (!item->url)
+ return MF_E_NOT_FOUND;
+
+ if (!(*url = CoTaskMemAlloc((wcslen(item->url) + 1) * sizeof(*item->url))))
+ return E_OUTOFMEMORY;
+
+ wcscpy(*url, item->url);
+
+ return S_OK;
}
static HRESULT WINAPI media_item_GetObject(IMFPMediaItem *iface, IUnknown **obj)
@@ -769,6 +782,12 @@ static HRESULT WINAPI media_player_CreateMediaItemFromURL(IMFPMediaPlayer *iface
if (FAILED(hr = create_media_item(iface, user_data, &item)))
return hr;
+ if (url && !(item->url = wcsdup(url)))
+ {
+ IMFPMediaItem_Release(&item->IMFPMediaItem_iface);
+ return E_OUTOFMEMORY;
+ }
+
if (sync)
{
*ret = NULL;
More information about the wine-cvs
mailing list