Module: wine Branch: master Commit: cdbf03df83939bac664cb9103eddf5e51d3825e4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cdbf03df83939bac664cb9103e...
Author: Piotr Caban piotr@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); }