Zebediah Figura : qcap: Search downstream pins regardless of whether the category and major type match.
Alexandre Julliard
julliard at winehq.org
Thu Apr 9 16:04:44 CDT 2020
Module: wine
Branch: master
Commit: d9003a04646087f1ca92391ef705f0598974dc9b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d9003a04646087f1ca92391ef705f0598974dc9b
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Wed Apr 8 15:58:56 2020 -0500
qcap: Search downstream pins regardless of whether the category and major type match.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48766
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/qcap/capturegraph.c | 30 ++++++++++++++++++++----------
dlls/qcap/tests/capturegraph.c | 6 +++---
2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/dlls/qcap/capturegraph.c b/dlls/qcap/capturegraph.c
index a5b00df90b..822f68754e 100644
--- a/dlls/qcap/capturegraph.c
+++ b/dlls/qcap/capturegraph.c
@@ -505,28 +505,38 @@ static HRESULT find_unconnected_source_from_filter(CaptureGraphImpl *capture_gra
static HRESULT find_unconnected_source_from_pin(CaptureGraphImpl *capture_graph,
const GUID *category, const GUID *majortype, IPin *pin, IPin **ret)
{
+ PIN_DIRECTION dir;
PIN_INFO info;
HRESULT hr;
IPin *peer;
+ IPin_QueryDirection(pin, &dir);
+ if (dir != PINDIR_OUTPUT)
+ return VFW_E_INVALID_DIRECTION;
+
if (category && (IsEqualGUID(category, &PIN_CATEGORY_CAPTURE)
|| IsEqualGUID(category, &PIN_CATEGORY_PREVIEW)))
{
if (FAILED(hr = match_smart_tee_pin(capture_graph, category, majortype, (IUnknown *)pin, &pin)))
return hr;
- }
- else if (pin_matches(pin, PINDIR_OUTPUT, category, majortype, FALSE))
- {
- IPin_AddRef(pin);
- hr = S_OK;
+
+ if (FAILED(IPin_ConnectedTo(pin, &peer)))
+ {
+ *ret = pin;
+ return S_OK;
+ }
}
else
- return E_FAIL;
-
- if (FAILED(IPin_ConnectedTo(pin, &peer)))
{
- *ret = pin;
- return hr;
+ if (FAILED(IPin_ConnectedTo(pin, &peer)))
+ {
+ if (!pin_matches(pin, PINDIR_OUTPUT, category, majortype, FALSE))
+ return E_FAIL;
+
+ IPin_AddRef(*ret = pin);
+ return S_OK;
+ }
+ IPin_AddRef(pin);
}
IPin_QueryPinInfo(peer, &info);
diff --git a/dlls/qcap/tests/capturegraph.c b/dlls/qcap/tests/capturegraph.c
index 629bc92d89..49b4f8c6b9 100644
--- a/dlls/qcap/tests/capturegraph.c
+++ b/dlls/qcap/tests/capturegraph.c
@@ -874,15 +874,15 @@ static void test_render_stream(void)
hr = ICaptureGraphBuilder2_RenderStream(capture_graph, NULL, &sink1_type,
(IUnknown *)&source.filter.IBaseFilter_iface, NULL, &sink.filter.IBaseFilter_iface);
- todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(source.source1.pin.pin.peer == &transform.sink1.pin.pin.IPin_iface, "Got wrong connection.\n");
ok(transform.source1.pin.pin.peer == &sink.sink1.pin.pin.IPin_iface, "Got wrong connection.\n");
- todo_wine ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n");
+ ok(transform.source2.pin.pin.peer == &sink.sink2.pin.pin.IPin_iface, "Got wrong connection.\n");
ok(!source.source2.pin.pin.peer, "Pin should not be connected.\n");
disconnect_pins(graph, &source.source1);
disconnect_pins(graph, &transform.source1);
- todo_wine disconnect_pins(graph, &transform.source2);
+ disconnect_pins(graph, &transform.source2);
/* Test categories. */
More information about the wine-cvs
mailing list