From 6019f3c17989085ed0349edaade0c1c44e007e68 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 5 Oct 2020 15:26:41 +0300 Subject: [PATCH] mf: Implement MFCreateVideoRenderer(). Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- 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 31bc110ea48..c5b2ceecd67 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 4b5b085d082..2927d9f8a88 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 2c02b1d8e54..0bc297cc69c 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 77c46a075f1..c2178835383 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);")