[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