Nikolay Sivov : evr: Added MFCreateVideoMixerAndPresenter().

Alexandre Julliard julliard at winehq.org
Wed Jul 1 15:22:49 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Jul  1 15:55:46 2020 +0300

evr: Added MFCreateVideoMixerAndPresenter().

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

---

 dlls/evr/evr.spec    |  2 +-
 dlls/evr/main.c      | 28 ++++++++++++++++++++++++++++
 dlls/evr/tests/evr.c | 13 +++++++++++++
 include/evr.idl      |  3 ++-
 4 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/dlls/evr/evr.spec b/dlls/evr/evr.spec
index e46cb04f64..73cbf05b46 100644
--- a/dlls/evr/evr.spec
+++ b/dlls/evr/evr.spec
@@ -14,7 +14,7 @@
 @ stub MFCreateVideoMediaTypeFromVideoInfoHeader2
 @ stub MFCreateVideoMediaTypeFromVideoInfoHeader
 @ stdcall MFCreateVideoMixer(ptr ptr ptr ptr)
-@ stub MFCreateVideoMixerAndPresenter
+@ stdcall MFCreateVideoMixerAndPresenter(ptr ptr ptr ptr ptr ptr)
 @ stub MFCreateVideoOTA
 @ stub MFCreateVideoPresenter2
 @ stdcall MFCreateVideoPresenter(ptr ptr ptr ptr)
diff --git a/dlls/evr/main.c b/dlls/evr/main.c
index 2c6db8430b..301330a51e 100644
--- a/dlls/evr/main.c
+++ b/dlls/evr/main.c
@@ -196,3 +196,31 @@ HRESULT WINAPI DllUnregisterServer(void)
 {
     return __wine_unregister_resources(instance_evr);
 }
+
+HRESULT WINAPI MFCreateVideoMixerAndPresenter(IUnknown *mixer_outer, IUnknown *presenter_outer,
+        REFIID riid_mixer, void **mixer, REFIID riid_presenter, void **presenter)
+{
+    HRESULT hr;
+
+    TRACE("%p, %p, %s, %p, %s, %p.\n", mixer_outer, presenter_outer, debugstr_guid(riid_mixer), mixer,
+            debugstr_guid(riid_presenter), presenter);
+
+    if (!mixer || !presenter)
+        return E_POINTER;
+
+    *mixer = *presenter = NULL;
+
+    if (SUCCEEDED(hr = CoCreateInstance(&CLSID_MFVideoMixer9, mixer_outer, CLSCTX_INPROC_SERVER, riid_mixer, mixer)))
+        hr = CoCreateInstance(&CLSID_MFVideoPresenter9, presenter_outer, CLSCTX_INPROC_SERVER, riid_presenter, presenter);
+
+    if (FAILED(hr))
+    {
+        if (*mixer)
+            IUnknown_Release((IUnknown *)*mixer);
+        if (*presenter)
+            IUnknown_Release((IUnknown *)*presenter);
+        *mixer = *presenter = NULL;
+    }
+
+    return hr;
+}
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c
index 1046e70312..b9f86eb252 100644
--- a/dlls/evr/tests/evr.c
+++ b/dlls/evr/tests/evr.c
@@ -950,6 +950,18 @@ static void test_default_presenter(void)
     IMFVideoPresenter_Release(presenter);
 }
 
+static void test_MFCreateVideoMixerAndPresenter(void)
+{
+    IUnknown *mixer, *presenter;
+    HRESULT hr;
+
+    hr = MFCreateVideoMixerAndPresenter(NULL, NULL, &IID_IUnknown, (void **)&mixer, &IID_IUnknown, (void **)&presenter);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    IUnknown_Release(mixer);
+    IUnknown_Release(presenter);
+}
+
 START_TEST(evr)
 {
     CoInitialize(NULL);
@@ -965,6 +977,7 @@ START_TEST(evr)
     test_default_mixer_type_negotiation();
     test_surface_sample();
     test_default_presenter();
+    test_MFCreateVideoMixerAndPresenter();
 
     CoUninitialize();
 }
diff --git a/include/evr.idl b/include/evr.idl
index 384a051944..8628e111a3 100644
--- a/include/evr.idl
+++ b/include/evr.idl
@@ -299,7 +299,8 @@ cpp_quote("DEFINE_GUID(MR_VIDEO_MIXER_SERVICE, 0x073cd2fc, 0x6cf4, 0x40b7, 0x88,
 cpp_quote("DEFINE_GUID(MR_VIDEO_ACCELERATION_SERVICE, 0xefef5175, 0x5c7d, 0x4ce2, 0xbb, 0xbd, 0x34, 0xff, 0x8b, 0xca, 0x65, 0x54);")
 cpp_quote("DEFINE_GUID(MR_BUFFER_SERVICE, 0xa562248c, 0x9ac6, 0x4ffc, 0x9f, 0xba, 0x3a, 0xf8, 0xf8, 0xad, 0x1a, 0x4d);")
 cpp_quote("DEFINE_GUID(VIDEO_ZOOM_RECT, 0x7aaa1638, 0x1b7f, 0x4c93, 0xbd, 0x89, 0x5b, 0x9c, 0x9f, 0xb6, 0xfc, 0xf0);")
-
 cpp_quote("HRESULT WINAPI MFCreateVideoMixer(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj);")
+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 MFCreateVideoSampleFromSurface(IUnknown *surface, IMFSample **sample);")




More information about the wine-cvs mailing list