Piotr Caban : qcap: Add ICaptureGraphBuilder2:: RenderStream test with intermediate filter.

Alexandre Julliard julliard at winehq.org
Wed Nov 20 13:38:56 CST 2013


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Nov 20 12:02:42 2013 +0100

qcap: Add ICaptureGraphBuilder2::RenderStream test with intermediate filter.

---

 dlls/qcap/tests/qcap.c |   74 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/dlls/qcap/tests/qcap.c b/dlls/qcap/tests/qcap.c
index d8788de..a710c03 100644
--- a/dlls/qcap/tests/qcap.c
+++ b/dlls/qcap/tests/qcap.c
@@ -199,6 +199,65 @@ static const struct {
     {GRAPHBUILDER_CONNECT, NOT_FILTER},
     {BASEFILTER_GETSTATE, SOURCE_FILTER, TRUE},
     {END, NOT_FILTER}
+}, renderstream_intermediate[] = {
+    {BASEFILTER_QUERYINTERFACE, SOURCE_FILTER},
+    {BASEFILTER_ENUMPINS, SOURCE_FILTER},
+    {ENUMPINS_NEXT, SOURCE_FILTER},
+    {PIN_QUERYDIRECTION, SOURCE_FILTER},
+    {PIN_CONNECTEDTO, SOURCE_FILTER},
+    {PIN_QUERYPININFO, SOURCE_FILTER, TRUE},
+    {KSPROPERTYSET_GET, SOURCE_FILTER},
+    {PIN_ENUMMEDIATYPES, SOURCE_FILTER},
+    {ENUMMEDIATYPES_RESET, SOURCE_FILTER},
+    {ENUMMEDIATYPES_NEXT, SOURCE_FILTER},
+    {BASEFILTER_QUERYINTERFACE, SOURCE_FILTER},
+    {BASEFILTER_ENUMPINS, SOURCE_FILTER},
+    {ENUMPINS_NEXT, SOURCE_FILTER},
+    {PIN_QUERYDIRECTION, SOURCE_FILTER},
+    {PIN_CONNECTEDTO, SOURCE_FILTER},
+    {PIN_QUERYPININFO, SOURCE_FILTER, TRUE},
+    {KSPROPERTYSET_GET, SOURCE_FILTER},
+    {ENUMPINS_NEXT, SOURCE_FILTER},
+    {BASEFILTER_QUERYINTERFACE, SOURCE_FILTER, TRUE},
+    {BASEFILTER_ENUMPINS, SOURCE_FILTER, TRUE},
+    {ENUMPINS_NEXT, SOURCE_FILTER, TRUE},
+    {PIN_QUERYDIRECTION, SOURCE_FILTER, TRUE},
+    {PIN_CONNECTEDTO, SOURCE_FILTER, TRUE},
+    {PIN_QUERYPININFO, SOURCE_FILTER, TRUE},
+    {KSPROPERTYSET_GET, SOURCE_FILTER, TRUE},
+    {ENUMPINS_NEXT, SOURCE_FILTER, TRUE},
+    {BASEFILTER_QUERYINTERFACE, SOURCE_FILTER, TRUE},
+    {BASEFILTER_ENUMPINS, SOURCE_FILTER, TRUE},
+    {ENUMPINS_NEXT, SOURCE_FILTER, TRUE},
+    {PIN_QUERYDIRECTION, SOURCE_FILTER, TRUE},
+    {PIN_CONNECTEDTO, SOURCE_FILTER, TRUE},
+    {PIN_QUERYPININFO, SOURCE_FILTER, TRUE},
+    {KSPROPERTYSET_GET, SOURCE_FILTER, TRUE},
+    {ENUMPINS_NEXT, SOURCE_FILTER, TRUE},
+    {PIN_ENUMMEDIATYPES, SOURCE_FILTER, TRUE},
+    {ENUMMEDIATYPES_NEXT, SOURCE_FILTER, TRUE},
+    {BASEFILTER_QUERYINTERFACE, SINK_FILTER, FALSE, TRUE},
+    {BASEFILTER_ENUMPINS, SINK_FILTER},
+    {ENUMPINS_NEXT, SINK_FILTER},
+    {PIN_QUERYDIRECTION, SINK_FILTER},
+    {PIN_CONNECTEDTO, SINK_FILTER},
+    {BASEFILTER_QUERYINTERFACE, INTERMEDIATE_FILTER, FALSE, TRUE},
+    {BASEFILTER_ENUMPINS, INTERMEDIATE_FILTER},
+    {ENUMPINS_NEXT, INTERMEDIATE_FILTER},
+    {PIN_QUERYDIRECTION, INTERMEDIATE_FILTER},
+    {PIN_CONNECTEDTO, INTERMEDIATE_FILTER},
+    {ENUMPINS_NEXT, INTERMEDIATE_FILTER},
+    {PIN_QUERYDIRECTION, INTERMEDIATE_FILTER},
+    {PIN_CONNECTEDTO, INTERMEDIATE_FILTER},
+    {GRAPHBUILDER_CONNECT, NOT_FILTER},
+    {BASEFILTER_QUERYINTERFACE, INTERMEDIATE_FILTER, FALSE, TRUE},
+    {BASEFILTER_ENUMPINS, INTERMEDIATE_FILTER},
+    {ENUMPINS_NEXT, INTERMEDIATE_FILTER},
+    {PIN_QUERYDIRECTION, INTERMEDIATE_FILTER},
+    {PIN_CONNECTEDTO, INTERMEDIATE_FILTER},
+    {GRAPHBUILDER_CONNECT, NOT_FILTER},
+    {BASEFILTER_GETSTATE, SOURCE_FILTER, TRUE},
+    {END, NOT_FILTER}
 }, *current_calls_list;
 int call_no;
 
@@ -559,7 +618,7 @@ static HRESULT WINAPI EnumPins_Next(IEnumPins *iface,
     ok(ppPins != NULL, "ppPins == NULL\n");
     ok(pcFetched != NULL, "pcFetched == NULL\n");
 
-    if(!This->enum_pins_pos++) {
+    if(This->enum_pins_pos++ < (This->filter_type == INTERMEDIATE_FILTER ? 2 : 1)) {
         *ppPins = &This->IPin_iface;
         *pcFetched = 1;
         return S_OK;
@@ -677,6 +736,8 @@ static HRESULT WINAPI Pin_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
     check_calls_list("Pin_QueryDirection", PIN_QUERYDIRECTION, This->filter_type);
 
     *pPinDir = This->dir;
+    if(This->filter_type==INTERMEDIATE_FILTER && This->enum_pins_pos==2)
+        *pPinDir = PINDIR_INPUT;
     return S_OK;
 }
 
@@ -894,6 +955,8 @@ static void test_CaptureGraphBuilder_RenderStream(void)
         {&KsPropertySetVtbl}, {&EnumMediaTypesVtbl}, PINDIR_OUTPUT, SOURCE_FILTER};
     test_filter sink_filter = {{&BaseFilterVtbl}, {&EnumPinsVtbl}, {&PinVtbl},
         {&KsPropertySetVtbl}, {&EnumMediaTypesVtbl}, PINDIR_INPUT, SINK_FILTER};
+    test_filter intermediate_filter = {{&BaseFilterVtbl}, {&EnumPinsVtbl}, {&PinVtbl},
+        {&KsPropertySetVtbl}, {&EnumMediaTypesVtbl}, PINDIR_OUTPUT, INTERMEDIATE_FILTER};
     ICaptureGraphBuilder2 *cgb;
     HRESULT hr;
 
@@ -918,6 +981,15 @@ static void test_CaptureGraphBuilder_RenderStream(void)
     ok(hr == S_OK, "RenderStream failed: %08x\n", hr);
     check_calls_list("test_CaptureGraphBuilder_RenderStream", END, NOT_FILTER);
 
+    trace("RenderStream with intermediate filter\n");
+    current_calls_list = renderstream_intermediate;
+    call_no = 0;
+    hr = ICaptureGraphBuilder2_RenderStream(cgb, &PIN_CATEGORY_EDS,
+            &MEDIATYPE_Video, (IUnknown*)&source_filter.IBaseFilter_iface,
+            &intermediate_filter.IBaseFilter_iface, &sink_filter.IBaseFilter_iface);
+    ok(hr == S_OK, "RenderStream failed: %08x\n", hr);
+    check_calls_list("test_CaptureGraphBuilder_RenderStream", END, NOT_FILTER);
+
     ICaptureGraphBuilder2_Release(cgb);
 }
 




More information about the wine-cvs mailing list