[PATCH 1/7] quartz/tests: Test that IMediaPosition is also checked when renderers are counted.
Anton Baskanov
baskanov at gmail.com
Mon May 24 02:27:31 CDT 2021
Signed-off-by: Anton Baskanov <baskanov at gmail.com>
---
dlls/quartz/tests/filtergraph.c | 165 +++++++++++++++++++++++++++++++-
1 file changed, 161 insertions(+), 4 deletions(-)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index c663b5d8a99..7f3372e2acf 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -848,6 +848,7 @@ struct testfilter
ULONG misc_flags;
IMediaSeeking IMediaSeeking_iface;
+ IMediaPosition IMediaPosition_iface;
LONG seeking_ref;
DWORD seek_caps;
BOOL support_testguid, support_media_time;
@@ -1315,6 +1316,10 @@ static HRESULT WINAPI testfilter_QueryInterface(IBaseFilter *iface, REFIID iid,
{
*out = &filter->IMediaSeeking_iface;
}
+ else if (IsEqualGUID(iid, &IID_IMediaPosition) && filter->IMediaPosition_iface.lpVtbl)
+ {
+ *out = &filter->IMediaPosition_iface;
+ }
else if (IsEqualGUID(iid, &IID_IReferenceClock) && filter->IReferenceClock_iface.lpVtbl)
{
*out = &filter->IReferenceClock_iface;
@@ -1610,7 +1615,7 @@ static HRESULT WINAPI testseek_QueryPreferredFormat(IMediaSeeking *iface, GUID *
static HRESULT WINAPI testseek_GetTimeFormat(IMediaSeeking *iface, GUID *format)
{
- ok(0, "Unexpected call.\n");
+ if (winetest_debug > 1) trace("%p->GetTimeFormat()\n", iface);
return E_NOTIMPL;
}
@@ -1733,6 +1738,141 @@ static const IMediaSeekingVtbl testseek_vtbl =
testseek_GetPreroll,
};
+static struct testfilter *impl_from_IMediaPosition(IMediaPosition *iface)
+{
+ return CONTAINING_RECORD(iface, struct testfilter, IMediaPosition_iface);
+}
+
+static HRESULT WINAPI testpos_QueryInterface(IMediaPosition *iface, REFIID iid, void **out)
+{
+ struct testfilter *filter = impl_from_IMediaPosition(iface);
+ return IBaseFilter_QueryInterface(&filter->IBaseFilter_iface, iid, out);
+}
+
+static ULONG WINAPI testpos_AddRef(IMediaPosition *iface)
+{
+ struct testfilter *filter = impl_from_IMediaPosition(iface);
+ return IBaseFilter_AddRef(&filter->IBaseFilter_iface);
+}
+
+static ULONG WINAPI testpos_Release(IMediaPosition *iface)
+{
+ struct testfilter *filter = impl_from_IMediaPosition(iface);
+ return IBaseFilter_Release(&filter->IBaseFilter_iface);
+}
+
+static HRESULT WINAPI testpos_GetTypeInfoCount(IMediaPosition *iface, UINT *count)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_GetTypeInfo(IMediaPosition *iface, UINT index, LCID lcid, ITypeInfo **typeinfo)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_GetIDsOfNames(IMediaPosition *iface, REFIID riid, LPOLESTR *names, UINT count, LCID lcid, DISPID *ids)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_Invoke(IMediaPosition *iface, DISPID id, REFIID iid, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *result, EXCEPINFO *excepinfo, UINT *error_arg)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_get_Duration(IMediaPosition *iface, REFTIME *length)
+{
+ if (winetest_debug > 1) trace("%p->get_Duration()\n", iface);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_put_CurrentPosition(IMediaPosition *iface, REFTIME time)
+{
+ if (winetest_debug > 1) trace("%p->put_CurrentPosition(%f)\n", iface, time);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_get_CurrentPosition(IMediaPosition *iface, REFTIME *time)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_get_StopTime(IMediaPosition *iface, REFTIME *time)
+{
+ if (winetest_debug > 1) trace("%p->get_StopTime()\n", iface);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_put_StopTime(IMediaPosition *iface, REFTIME time)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_get_PrerollTime(IMediaPosition *iface, REFTIME *time)
+{
+ if (winetest_debug > 1) trace("%p->get_PrerollTime()\n", iface);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_put_PrerollTime(IMediaPosition *iface, REFTIME time)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_put_Rate(IMediaPosition *iface, double rate)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_get_Rate(IMediaPosition *iface, double *rate)
+{
+ if (winetest_debug > 1) trace("%p->get_Rate()\n", iface);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_CanSeekForward(IMediaPosition *iface, LONG *can_seek_forward)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI testpos_CanSeekBackward(IMediaPosition *iface, LONG *can_seek_backward)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOTIMPL;
+}
+
+static const IMediaPositionVtbl testpos_vtbl =
+{
+ testpos_QueryInterface,
+ testpos_AddRef,
+ testpos_Release,
+ testpos_GetTypeInfoCount,
+ testpos_GetTypeInfo,
+ testpos_GetIDsOfNames,
+ testpos_Invoke,
+ testpos_get_Duration,
+ testpos_put_CurrentPosition,
+ testpos_get_CurrentPosition,
+ testpos_get_StopTime,
+ testpos_put_StopTime,
+ testpos_get_PrerollTime,
+ testpos_put_PrerollTime,
+ testpos_put_Rate,
+ testpos_get_Rate,
+ testpos_CanSeekForward,
+ testpos_CanSeekBackward,
+};
+
static struct testfilter *impl_from_IReferenceClock(IReferenceClock *iface)
{
return CONTAINING_RECORD(iface, struct testfilter, IReferenceClock_iface);
@@ -3964,9 +4104,9 @@ static void test_ec_complete(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
/* A filter counts as a renderer if it (1) exposes IAMFilterMiscFlags and
- * reports itself as a renderer, or (2) exposes IMediaSeeking and has no
- * output pins. Despite MSDN, QueryInternalConnections() does not seem to
- * be used. */
+ * reports itself as a renderer, or (2) exposes IMediaSeeking or
+ * IMediaPosition and has no output pins. Despite MSDN,
+ * QueryInternalConnections() does not seem to be used. */
IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface);
IFilterGraph2_RemoveFilter(graph, &filter2.IBaseFilter_iface);
@@ -4010,7 +4150,16 @@ static void test_ec_complete(void)
ok(filter1.seeking_ref == 0, "Unexpected seeking refcount %d.\n", filter1.seeking_ref);
IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface);
+ filter1.IMediaPosition_iface.lpVtbl = &testpos_vtbl;
+ IFilterGraph2_AddFilter(graph, &filter1.IBaseFilter_iface, NULL);
+
+ hr = check_ec_complete(graph, &filter1.IBaseFilter_iface);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface);
+
filter1.IMediaSeeking_iface.lpVtbl = NULL;
+ filter1.IMediaPosition_iface.lpVtbl = NULL;
filter1_pin.dir = PINDIR_INPUT;
filter1.pin_count = 1;
filter1_pin.QueryInternalConnections_hr = S_OK;
@@ -4019,6 +4168,14 @@ static void test_ec_complete(void)
hr = check_ec_complete(graph, &filter1.IBaseFilter_iface);
ok(hr == E_ABORT, "Got hr %#x.\n", hr);
+ IFilterGraph2_RemoveFilter(graph, &filter1.IBaseFilter_iface);
+
+ filter1.IMediaPosition_iface.lpVtbl = &testpos_vtbl;
+ IFilterGraph2_AddFilter(graph, &filter1.IBaseFilter_iface, NULL);
+
+ hr = check_ec_complete(graph, &filter1.IBaseFilter_iface);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
IMediaControl_Release(control);
IMediaEvent_Release(eventsrc);
IMediaEventSink_Release(eventsink);
--
2.25.1
More information about the wine-devel
mailing list