Nikolay Sivov : mf: Implement MFCreateVideoRenderer().

Alexandre Julliard julliard at winehq.org
Mon Oct 5 15:54:59 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Oct  5 15:26:41 2020 +0300

mf: Implement MFCreateVideoRenderer().

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

---

 dlls/mf/evr.c      | 28 ++++++++++++++++++++++++++++
 dlls/mf/mf.spec    |  2 +-
 dlls/mf/tests/mf.c |  4 ++++
 include/evr.idl    |  1 +
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 31bc110ea4..c5b2ceecd6 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -1388,3 +1388,31 @@ HRESULT WINAPI MFCreateVideoRendererActivate(HWND hwnd, IMFActivate **activate)
 
     return hr;
 }
+
+/***********************************************************************
+ *      MFCreateVideoRenderer (mf.@)
+ */
+HRESULT WINAPI MFCreateVideoRenderer(REFIID riid, void **renderer)
+{
+    IMFAttributes *attributes;
+    IUnknown *obj;
+    HRESULT hr;
+
+    TRACE("%s, %p.\n", debugstr_guid(riid), renderer);
+
+    *renderer = NULL;
+
+    if (FAILED(hr = MFCreateAttributes(&attributes, 0)))
+        return hr;
+
+    hr = evr_create_object(attributes, NULL, &obj);
+    IMFAttributes_Release(attributes);
+
+    if (SUCCEEDED(hr))
+    {
+        hr = IUnknown_QueryInterface(obj, riid, renderer);
+        IUnknown_Release(obj);
+    }
+
+    return hr;
+}
diff --git a/dlls/mf/mf.spec b/dlls/mf/mf.spec
index 4b5b085d08..2927d9f8a8 100644
--- a/dlls/mf/mf.spec
+++ b/dlls/mf/mf.spec
@@ -66,7 +66,7 @@
 @ stub MFCreateTranscodeSinkActivate
 @ stub MFCreateTranscodeTopology
 @ stub MFCreateUrlmonSchemePlugin
-@ stub MFCreateVideoRenderer
+@ stdcall MFCreateVideoRenderer(ptr ptr)
 @ stdcall MFCreateVideoRendererActivate(long ptr)
 @ stub MFCreateWMAEncoderActivate
 @ stub MFCreateWMVEncoderActivate
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 2c02b1d8e5..0bc297cc69 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -3253,6 +3253,10 @@ static void test_evr(void)
     hr = CoInitialize(NULL);
     ok(hr == S_OK, "Failed to initialize, hr %#x.\n", hr);
 
+    hr = MFCreateVideoRenderer(&IID_IUnknown, (void **)&unk);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    IUnknown_Release(unk);
+
     hr = MFCreateVideoRendererActivate(NULL, NULL);
     ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
 
diff --git a/include/evr.idl b/include/evr.idl
index 77c46a075f..c217883538 100644
--- a/include/evr.idl
+++ b/include/evr.idl
@@ -313,5 +313,6 @@ cpp_quote("HRESULT WINAPI MFCreateVideoMixer(IUnknown *owner, REFIID riid_device
 cpp_quote("HRESULT WINAPI MFCreateVideoMixerAndPresenter(IUnknown *mixer_outer, IUnknown *presenter_outer, ")
 cpp_quote("        REFIID riid_mixer, void **mixer, REFIID riid_presenter, void **presenter);")
 cpp_quote("HRESULT WINAPI MFCreateVideoPresenter(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj);")
+cpp_quote("HRESULT WINAPI MFCreateVideoRenderer(REFIID riid, void **renderer);")
 cpp_quote("HRESULT WINAPI MFCreateVideoSampleAllocator(REFIID riid, void **allocator);")
 cpp_quote("HRESULT WINAPI MFCreateVideoSampleFromSurface(IUnknown *surface, IMFSample **sample);")




More information about the wine-cvs mailing list