Zebediah Figura : strmbase: Reimplement BaseFilterImpl_QueryInterface() using a callback.
Module: wine Branch: master Commit: 4b839bdd6aa02abe8dcf2565f59900e9f199a5b6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=4b839bdd6aa02abe8dcf2565f... Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed May 29 20:52:56 2019 -0500 strmbase: Reimplement BaseFilterImpl_QueryInterface() using a callback. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/strmbase/filter.c | 24 ++++++++++++++++++------ include/wine/strmbase.h | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c index cf8000f..1af955f 100644 --- a/dlls/strmbase/filter.c +++ b/dlls/strmbase/filter.c @@ -27,20 +27,32 @@ static inline BaseFilter *impl_from_IBaseFilter(IBaseFilter *iface) return CONTAINING_RECORD(iface, BaseFilter, IBaseFilter_iface); } -HRESULT WINAPI BaseFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv) +HRESULT WINAPI BaseFilterImpl_QueryInterface(IBaseFilter *iface, REFIID iid, void **out) { - TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv); + BaseFilter *filter = impl_from_IBaseFilter(iface); + HRESULT hr; + + TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out); - *ppv = NULL; + *out = NULL; + + if (filter->pFuncsTable->filter_query_interface + && SUCCEEDED(hr = filter->pFuncsTable->filter_query_interface(filter, iid, out))) + { + return hr; + } - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPersist) || - IsEqualIID(riid, &IID_IMediaFilter) || IsEqualIID(riid, &IID_IBaseFilter)) + if (IsEqualIID(iid, &IID_IUnknown) + || IsEqualIID(iid, &IID_IPersist) + || IsEqualIID(iid, &IID_IMediaFilter) + || IsEqualIID(iid, &IID_IBaseFilter)) { - *ppv = iface; + *out = iface; IBaseFilter_AddRef(iface); return S_OK; } + WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); return E_NOINTERFACE; } diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 9bc13de..1d36f13 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -172,6 +172,7 @@ typedef struct BaseFilterFuncTable { IPin *(*filter_get_pin)(BaseFilter *iface, unsigned int index); void (*filter_destroy)(BaseFilter *iface); + HRESULT (*filter_query_interface)(BaseFilter *iface, REFIID iid, void **out); } BaseFilterFuncTable; HRESULT WINAPI BaseFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
participants (1)
-
Alexandre Julliard