Module: wine Branch: master Commit: 7f71eda49705cba0b6bceb3a19bbdfbb0e0dddaf URL: https://gitlab.winehq.org/wine/wine/-/commit/7f71eda49705cba0b6bceb3a19bbdfb...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Aug 18 23:46:42 2022 +0300
evr: Add IMFGetService stub.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/evr/evr.c | 42 ++++++++++++++++++++++++++++++++++++++++++ dlls/evr/tests/evr.c | 1 + 2 files changed, 43 insertions(+)
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c index e64151b650c..ef2d247f79a 100644 --- a/dlls/evr/evr.c +++ b/dlls/evr/evr.c @@ -35,6 +35,7 @@ struct evr struct strmbase_renderer renderer; IEVRFilterConfig IEVRFilterConfig_iface; IAMFilterMiscFlags IAMFilterMiscFlags_iface; + IMFGetService IMFGetService_iface; };
static struct evr *impl_from_strmbase_renderer(struct strmbase_renderer *iface) @@ -50,6 +51,8 @@ static HRESULT evr_query_interface(struct strmbase_renderer *iface, REFIID iid, *out = &filter->IEVRFilterConfig_iface; else if (IsEqualGUID(iid, &IID_IAMFilterMiscFlags)) *out = &filter->IAMFilterMiscFlags_iface; + else if (IsEqualGUID(iid, &IID_IMFGetService)) + *out = &filter->IMFGetService_iface; else return E_NOINTERFACE;
@@ -173,6 +176,44 @@ static const IAMFilterMiscFlagsVtbl filter_misc_flags_vtbl = filter_misc_flags_GetMiscFlags, };
+static struct evr *impl_from_IMFGetService(IMFGetService *iface) +{ + return CONTAINING_RECORD(iface, struct evr, IMFGetService_iface); +} + +static HRESULT WINAPI filter_get_service_QueryInterface(IMFGetService *iface, REFIID riid, void **obj) +{ + struct evr *filter = impl_from_IMFGetService(iface); + return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, riid, obj); +} + +static ULONG WINAPI filter_get_service_AddRef(IMFGetService *iface) +{ + struct evr *filter = impl_from_IMFGetService(iface); + return IUnknown_AddRef(filter->renderer.filter.outer_unk); +} + +static ULONG WINAPI filter_get_service_Release(IMFGetService *iface) +{ + struct evr *filter = impl_from_IMFGetService(iface); + return IUnknown_Release(filter->renderer.filter.outer_unk); +} + +static HRESULT WINAPI filter_get_service_GetService(IMFGetService *iface, REFGUID service, REFIID riid, void **obj) +{ + FIXME("iface %p, service %s, riid %s, obj %p.\n", iface, debugstr_guid(service), debugstr_guid(riid), obj); + + return E_NOTIMPL; +} + +static const IMFGetServiceVtbl filter_get_service_vtbl = +{ + filter_get_service_QueryInterface, + filter_get_service_AddRef, + filter_get_service_Release, + filter_get_service_GetService, +}; + HRESULT evr_filter_create(IUnknown *outer, void **out) { struct evr *object; @@ -184,6 +225,7 @@ HRESULT evr_filter_create(IUnknown *outer, void **out) &CLSID_EnhancedVideoRenderer, L"EVR Input0", &renderer_ops); object->IEVRFilterConfig_iface.lpVtbl = &filter_config_vtbl; object->IAMFilterMiscFlags_iface.lpVtbl = &filter_misc_flags_vtbl; + object->IMFGetService_iface.lpVtbl = &filter_get_service_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 37bb55739d3..7875a05ce83 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -279,6 +279,7 @@ static void test_interfaces(void) check_interface(filter, &IID_IAMFilterMiscFlags, TRUE); check_interface(filter, &IID_IBaseFilter, TRUE); check_interface(filter, &IID_IEVRFilterConfig, TRUE); + check_interface(filter, &IID_IMFGetService, TRUE); check_interface(filter, &IID_IMediaFilter, TRUE); check_interface(filter, &IID_IMediaPosition, TRUE); check_interface(filter, &IID_IMediaSeeking, TRUE);