Module: wine Branch: master Commit: bf8c08d9e38686aeecfbbf22a595327888079494 URL: https://gitlab.winehq.org/wine/wine/-/commit/bf8c08d9e38686aeecfbbf22a595327...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Aug 19 13:25:26 2022 +0300
evr: Add IMFVideoRenderer stub to the filter.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/evr/evr.c | 43 +++++++++++++++++++++++++++++++++++++++++++ dlls/evr/tests/evr.c | 1 + 2 files changed, 44 insertions(+)
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c index ef2d247f79a..581fca0365e 100644 --- a/dlls/evr/evr.c +++ b/dlls/evr/evr.c @@ -36,6 +36,7 @@ struct evr IEVRFilterConfig IEVRFilterConfig_iface; IAMFilterMiscFlags IAMFilterMiscFlags_iface; IMFGetService IMFGetService_iface; + IMFVideoRenderer IMFVideoRenderer_iface; };
static struct evr *impl_from_strmbase_renderer(struct strmbase_renderer *iface) @@ -53,6 +54,8 @@ static HRESULT evr_query_interface(struct strmbase_renderer *iface, REFIID iid, *out = &filter->IAMFilterMiscFlags_iface; else if (IsEqualGUID(iid, &IID_IMFGetService)) *out = &filter->IMFGetService_iface; + else if (IsEqualGUID(iid, &IID_IMFVideoRenderer)) + *out = &filter->IMFVideoRenderer_iface; else return E_NOINTERFACE;
@@ -214,6 +217,45 @@ static const IMFGetServiceVtbl filter_get_service_vtbl = filter_get_service_GetService, };
+static struct evr *impl_from_IMFVideoRenderer(IMFVideoRenderer *iface) +{ + return CONTAINING_RECORD(iface, struct evr, IMFVideoRenderer_iface); +} + +static HRESULT WINAPI filter_video_renderer_QueryInterface(IMFVideoRenderer *iface, REFIID riid, void **obj) +{ + struct evr *filter = impl_from_IMFVideoRenderer(iface); + return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, riid, obj); +} + +static ULONG WINAPI filter_video_renderer_AddRef(IMFVideoRenderer *iface) +{ + struct evr *filter = impl_from_IMFVideoRenderer(iface); + return IUnknown_AddRef(filter->renderer.filter.outer_unk); +} + +static ULONG WINAPI filter_video_renderer_Release(IMFVideoRenderer *iface) +{ + struct evr *filter = impl_from_IMFVideoRenderer(iface); + return IUnknown_Release(filter->renderer.filter.outer_unk); +} + +static HRESULT WINAPI filter_video_renderer_InitializeRenderer(IMFVideoRenderer *iface, IMFTransform *mixer, + IMFVideoPresenter *presenter) +{ + FIXME("iface %p, mixer %p, presenter %p.\n", iface, mixer, presenter); + + return E_NOTIMPL; +} + +static const IMFVideoRendererVtbl filter_video_renderer_vtbl = +{ + filter_video_renderer_QueryInterface, + filter_video_renderer_AddRef, + filter_video_renderer_Release, + filter_video_renderer_InitializeRenderer, +}; + HRESULT evr_filter_create(IUnknown *outer, void **out) { struct evr *object; @@ -226,6 +268,7 @@ HRESULT evr_filter_create(IUnknown *outer, void **out) object->IEVRFilterConfig_iface.lpVtbl = &filter_config_vtbl; object->IAMFilterMiscFlags_iface.lpVtbl = &filter_misc_flags_vtbl; object->IMFGetService_iface.lpVtbl = &filter_get_service_vtbl; + object->IMFVideoRenderer_iface.lpVtbl = &filter_video_renderer_vtbl;
TRACE("Created EVR %p.\n", object); *out = &object->renderer.filter.IUnknown_inner; diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 7875a05ce83..c4604c954b3 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -280,6 +280,7 @@ static void test_interfaces(void) check_interface(filter, &IID_IBaseFilter, TRUE); check_interface(filter, &IID_IEVRFilterConfig, TRUE); check_interface(filter, &IID_IMFGetService, TRUE); + check_interface(filter, &IID_IMFVideoRenderer, TRUE); check_interface(filter, &IID_IMediaFilter, TRUE); check_interface(filter, &IID_IMediaPosition, TRUE); check_interface(filter, &IID_IMediaSeeking, TRUE);