[PATCH 4/7] strmbase/transform: Don't expose IMediaSeeking from the filter.

Zebediah Figura z.figura12 at gmail.com
Fri May 17 17:56:15 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/tests/acmwrapper.c |  4 ++--
 dlls/quartz/tests/avidec.c     |  4 ++--
 dlls/strmbase/transform.c      | 25 ++++++++++++++++++++++---
 3 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/dlls/quartz/tests/acmwrapper.c b/dlls/quartz/tests/acmwrapper.c
index a543893d79..5acc91e722 100644
--- a/dlls/quartz/tests/acmwrapper.c
+++ b/dlls/quartz/tests/acmwrapper.c
@@ -74,7 +74,7 @@ static void test_interfaces(void)
     check_interface(filter, &IID_IBasicVideo, FALSE);
     check_interface(filter, &IID_IKsPropertySet, FALSE);
     todo_wine check_interface(filter, &IID_IMediaPosition, FALSE);
-    todo_wine check_interface(filter, &IID_IMediaSeeking, FALSE);
+    check_interface(filter, &IID_IMediaSeeking, FALSE);
     check_interface(filter, &IID_IPin, FALSE);
     todo_wine check_interface(filter, &IID_IQualityControl, FALSE);
     check_interface(filter, &IID_IQualProp, FALSE);
@@ -89,7 +89,7 @@ static void test_interfaces(void)
     check_interface(pin, &IID_IUnknown, TRUE);
 
     check_interface(pin, &IID_IMediaPosition, FALSE);
-    todo_wine check_interface(pin, &IID_IMediaSeeking, FALSE);
+    check_interface(pin, &IID_IMediaSeeking, FALSE);
 
     IPin_Release(pin);
 
diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c
index e897af434f..ffea059232 100644
--- a/dlls/quartz/tests/avidec.c
+++ b/dlls/quartz/tests/avidec.c
@@ -98,7 +98,7 @@ static void test_interfaces(void)
     check_interface(filter, &IID_IBasicVideo, FALSE);
     check_interface(filter, &IID_IKsPropertySet, FALSE);
     todo_wine check_interface(filter, &IID_IMediaPosition, FALSE);
-    todo_wine check_interface(filter, &IID_IMediaSeeking, FALSE);
+    check_interface(filter, &IID_IMediaSeeking, FALSE);
     check_interface(filter, &IID_IPersistPropertyBag, FALSE);
     check_interface(filter, &IID_IPin, FALSE);
     todo_wine check_interface(filter, &IID_IQualityControl, FALSE);
@@ -114,7 +114,7 @@ static void test_interfaces(void)
     check_interface(pin, &IID_IUnknown, TRUE);
 
     check_interface(pin, &IID_IMediaPosition, FALSE);
-    todo_wine check_interface(pin, &IID_IMediaSeeking, FALSE);
+    check_interface(pin, &IID_IMediaSeeking, FALSE);
 
     IPin_Release(pin);
 
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index df16b67cb3..fa9abb0fda 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -172,8 +172,7 @@ static HRESULT WINAPI TransformFilterImpl_QueryInterface(IBaseFilter * iface, RE
         IUnknown_AddRef((IUnknown*)*ppv);
         return S_OK;
     }
-    else if (IsEqualIID(riid, &IID_IMediaSeeking) ||
-             IsEqualIID(riid, &IID_IMediaPosition))
+    else if (IsEqualIID(riid, &IID_IMediaPosition))
     {
         return IUnknown_QueryInterface(This->seekthru_unk, riid, ppv);
     }
@@ -558,9 +557,29 @@ static const IPinVtbl TransformFilter_InputPin_Vtbl =
     TransformFilter_InputPin_NewSegment
 };
 
+static HRESULT WINAPI transform_source_QueryInterface(IPin *iface, REFIID iid, void **out)
+{
+    TransformFilter *filter = impl_from_IBaseFilter(impl_BaseOutputPin_from_IPin(iface)->pin.pinInfo.pFilter);
+    if (IsEqualGUID(iid, &IID_IUnknown) || IsEqualGUID(iid, &IID_IPin))
+        *out = iface;
+    else if (IsEqualGUID(iid, &IID_IQualityControl))
+        *out = &filter->qcimpl->IQualityControl_iface;
+    else if (IsEqualGUID(iid, &IID_IMediaSeeking))
+        return IUnknown_QueryInterface(filter->seekthru_unk, iid, out);
+    else
+    {
+        WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
+        *out = NULL;
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown *)*out);
+    return S_OK;
+}
+
 static const IPinVtbl TransformFilter_OutputPin_Vtbl =
 {
-    BaseOutputPinImpl_QueryInterface,
+    transform_source_QueryInterface,
     BasePinImpl_AddRef,
     BaseOutputPinImpl_Release,
     BaseOutputPinImpl_Connect,
-- 
2.21.0




More information about the wine-devel mailing list