Zebediah Figura : strmbase/renderer: Add a QueryInterface() callback.

Alexandre Julliard julliard at winehq.org
Fri May 31 15:53:31 CDT 2019


Module: wine
Branch: master
Commit: d930dff4a860455fef775409586e4406df5d1efa
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d930dff4a860455fef775409586e4406df5d1efa

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Thu May 30 22:59:36 2019 -0500

strmbase/renderer: Add a QueryInterface() callback.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/strmbase/renderer.c | 24 +++++++++++++++++++++++-
 include/wine/strmbase.h  |  1 +
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 7a69d98..5308cd3 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -200,10 +200,32 @@ static void renderer_destroy(BaseFilter *iface)
     filter->pFuncsTable->renderer_destroy(filter);
 }
 
-static const BaseFilterFuncTable RendererBaseFilterFuncTable =
+static HRESULT renderer_query_interface(BaseFilter *iface, REFIID iid, void **out)
 {
+    BaseRenderer *filter = impl_from_BaseFilter(iface);
+    HRESULT hr;
+
+    if (filter->pFuncsTable->renderer_query_interface
+            && SUCCEEDED(hr = filter->pFuncsTable->renderer_query_interface(filter, iid, out)))
+    {
+        return hr;
+    }
+
+    if (IsEqualIID(iid, &IID_IMediaSeeking) || IsEqualIID(iid, &IID_IMediaPosition))
+        return IUnknown_QueryInterface(filter->pPosition, iid, out);
+    else if (IsEqualIID(iid, &IID_IQualityControl))
+    {
+        *out = &filter->qcimpl->IQualityControl_iface;
+        IUnknown_AddRef((IUnknown *)*out);
+        return S_OK;
+    }
+    return E_NOINTERFACE;
+}
+
+static const BaseFilterFuncTable RendererBaseFilterFuncTable = {
     .filter_get_pin = renderer_get_pin,
     .filter_destroy = renderer_destroy,
+    .filter_query_interface = renderer_query_interface,
 };
 
 static HRESULT WINAPI BaseRenderer_Input_CheckMediaType(BasePin *pin, const AM_MEDIA_TYPE * pmt)
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 1d36f13..e192e98 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -606,6 +606,7 @@ typedef struct BaseRendererFuncTable {
 	BaseRenderer_BeginFlush pfnBeginFlush;
 	BaseRenderer_EndFlush pfnEndFlush;
         void (*renderer_destroy)(BaseRenderer *iface);
+        HRESULT (*renderer_query_interface)(BaseRenderer *iface, REFIID iid, void **out);
 } BaseRendererFuncTable;
 
 HRESULT WINAPI BaseRendererImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);




More information about the wine-cvs mailing list