Zebediah Figura : quartz/tests: Test that sink pins are enumerated first.

Alexandre Julliard julliard at winehq.org
Thu Dec 23 16:01:32 CST 2021


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

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Thu Dec 23 00:35:14 2021 -0600

quartz/tests: Test that sink pins are enumerated first.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/quartz/tests/avidec.c    | 22 +++++++++++++---------
 dlls/quartz/tests/avisplit.c  | 16 +++++++---------
 dlls/quartz/tests/mpegsplit.c | 24 ++++++++++++++----------
 3 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c
index 71f974806ea..10aa9711982 100644
--- a/dlls/quartz/tests/avidec.c
+++ b/dlls/quartz/tests/avidec.c
@@ -854,14 +854,6 @@ static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid,
     return S_OK;
 }
 
-static HRESULT testsink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
-{
-    struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
-    if (filter->mt && !compare_media_types(mt, filter->mt))
-        return S_FALSE;
-    return S_OK;
-}
-
 static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
 {
     struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
@@ -873,6 +865,14 @@ static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int
     return VFW_S_NO_MORE_ITEMS;
 }
 
+static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
+{
+    struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter);
+    if (filter->mt && !IsEqualGUID(&mt->majortype, &filter->mt->majortype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
+    return S_OK;
+}
+
 static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample *sample)
 {
     struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter);
@@ -958,8 +958,8 @@ static HRESULT testsink_end_flush(struct strmbase_sink *iface)
 static const struct strmbase_sink_ops testsink_ops =
 {
     .base.pin_query_interface = testsink_query_interface,
-    .base.pin_query_accept = testsink_query_accept,
     .base.pin_get_media_type = testsink_get_media_type,
+    .sink_connect = testsink_connect,
     .pfnReceive = testsink_Receive,
     .sink_new_segment = testsink_new_segment,
     .sink_eos = testsink_eos,
@@ -1501,6 +1501,8 @@ static void test_connect_pin(void)
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
     ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
 
+    /* Test enumeration of sink media types. */
+
     /* Our sink's proposed media type is sort of broken, but Windows 8+ returns
      * VFW_E_INVALIDMEDIATYPE for even perfectly reasonable ones. */
     testsink.mt = &req_mt;
@@ -1511,8 +1513,10 @@ static void test_connect_pin(void)
     req_mt.majortype = MEDIATYPE_Video;
     req_mt.subtype = MEDIASUBTYPE_I420;
     req_mt.formattype = FORMAT_VideoInfo;
+    req_mt.lSampleSize = 444;
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
+    todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n");
 
     hr = IFilterGraph2_Disconnect(graph, sink);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
diff --git a/dlls/quartz/tests/avisplit.c b/dlls/quartz/tests/avisplit.c
index 80ee6607279..47f20b70d61 100644
--- a/dlls/quartz/tests/avisplit.c
+++ b/dlls/quartz/tests/avisplit.c
@@ -894,14 +894,6 @@ static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid,
     return S_OK;
 }
 
-static HRESULT testsink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
-{
-    struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
-    if (filter->mt && !compare_media_types(mt, filter->mt))
-        return S_FALSE;
-    return S_OK;
-}
-
 static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
 {
     struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
@@ -915,6 +907,7 @@ static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int
 
 static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
 {
+    struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter);
     AM_MEDIA_TYPE mt2;
     IPin *peer2;
     HRESULT hr;
@@ -929,6 +922,8 @@ static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const A
     ok(compare_media_types(mt, &mt2), "Media types didn't match.\n");
     FreeMediaType(&mt2);
 
+    if (filter->mt && !IsEqualGUID(&mt->majortype, &filter->mt->majortype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
     return S_OK;
 }
 
@@ -993,7 +988,6 @@ static HRESULT testsink_new_segment(struct strmbase_sink *iface,
 static const struct strmbase_sink_ops testsink_ops =
 {
     .base.pin_query_interface = testsink_query_interface,
-    .base.pin_query_accept = testsink_query_accept,
     .base.pin_get_media_type = testsink_get_media_type,
     .sink_connect = testsink_connect,
     .pfnReceive = testsink_Receive,
@@ -1359,6 +1353,8 @@ static void test_connect_pin(void)
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
     ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
 
+    /* Test enumeration of sink media types. */
+
     testsink.mt = &req_mt;
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
     ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
@@ -1366,8 +1362,10 @@ static void test_connect_pin(void)
     req_mt.majortype = MEDIATYPE_Video;
     req_mt.subtype = MEDIASUBTYPE_I420;
     req_mt.formattype = FORMAT_VideoInfo;
+    req_mt.lSampleSize = 444;
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
+    todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n");
 
     IPin_Release(source);
     hr = IFilterGraph2_Disconnect(graph, sink);
diff --git a/dlls/quartz/tests/mpegsplit.c b/dlls/quartz/tests/mpegsplit.c
index 9c0c34d6c9c..0809c5f861f 100644
--- a/dlls/quartz/tests/mpegsplit.c
+++ b/dlls/quartz/tests/mpegsplit.c
@@ -1183,14 +1183,6 @@ static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid,
     return S_OK;
 }
 
-static HRESULT testsink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
-{
-    struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
-    if (filter->mt && !compare_media_types(mt, filter->mt))
-        return S_FALSE;
-    return S_OK;
-}
-
 static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
 {
     struct testfilter *filter = impl_from_strmbase_filter(iface->filter);
@@ -1202,6 +1194,14 @@ static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int
     return VFW_S_NO_MORE_ITEMS;
 }
 
+static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
+{
+    struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter);
+    if (filter->mt && !IsEqualGUID(&mt->majortype, &filter->mt->majortype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
+    return S_OK;
+}
+
 static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample *sample)
 {
     struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter);
@@ -1263,8 +1263,8 @@ static HRESULT testsink_new_segment(struct strmbase_sink *iface,
 static const struct strmbase_sink_ops testsink_ops =
 {
     .base.pin_query_interface = testsink_query_interface,
-    .base.pin_query_accept = testsink_query_accept,
     .base.pin_get_media_type = testsink_get_media_type,
+    .sink_connect = testsink_connect,
     .pfnReceive = testsink_Receive,
     .sink_eos = testsink_eos,
     .sink_new_segment = testsink_new_segment,
@@ -1576,6 +1576,8 @@ static void test_connect_pin(void)
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
     ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
 
+    /* Test enumeration of sink media types. */
+
     testsink.mt = &req_mt;
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
     ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
@@ -1583,8 +1585,10 @@ static void test_connect_pin(void)
     req_mt.majortype = MEDIATYPE_Audio;
     req_mt.subtype = MEDIASUBTYPE_MPEG1AudioPayload;
     req_mt.formattype = FORMAT_WaveFormatEx;
+    req_mt.lSampleSize = 444;
     hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
-    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n");
 
     IPin_Release(source);
     hr = IFilterGraph2_Disconnect(graph, sink);




More information about the wine-cvs mailing list