Module: wine Branch: master Commit: 4b839bdd6aa02abe8dcf2565f59900e9f199a5b6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=4b839bdd6aa02abe8dcf2565f...
Author: Zebediah Figura z.figura12@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@gmail.com Signed-off-by: Alexandre Julliard julliard@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);