Commit 950d3443 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Alexandre Julliard

qcap: Implement a stubby CaptureGraphBuilder2::RenderStream.

This just uses enumeratepins to find 2 non-connected pins and connects them using the filtergraph.
parent 7e32b11a
...@@ -270,12 +270,38 @@ fnCaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2 * iface, ...@@ -270,12 +270,38 @@ fnCaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2 * iface,
IBaseFilter *pfRenderer) IBaseFilter *pfRenderer)
{ {
CaptureGraphImpl *This = impl_from_ICaptureGraphBuilder2(iface); CaptureGraphImpl *This = impl_from_ICaptureGraphBuilder2(iface);
IPin *pin_in = NULL;
IPin *pin_out = NULL;
HRESULT hr;
FIXME("(%p/%p)->(%s, %s, %p, %p, %p) Stub!\n", This, iface, FIXME("(%p/%p)->(%s, %s, %p, %p, %p) Stub!\n", This, iface,
debugstr_guid(pCategory), debugstr_guid(pType), debugstr_guid(pCategory), debugstr_guid(pType),
pSource, pfCompressor, pfRenderer); pSource, pfCompressor, pfRenderer);
return E_NOTIMPL; if (pfCompressor)
FIXME("Intermediate streams not supported yet\n");
if (!This->mygraph)
{
FIXME("Need a capture graph\n");
return E_UNEXPECTED;
}
ICaptureGraphBuilder2_FindPin(iface, pSource, PINDIR_OUTPUT, pCategory, pType, TRUE, 0, &pin_in);
if (!pin_in)
return E_FAIL;
ICaptureGraphBuilder2_FindPin(iface, (IUnknown*)pfRenderer, PINDIR_INPUT, pCategory, pType, TRUE, 0, &pin_out);
if (!pin_out)
{
IPin_Release(pin_in);
return E_FAIL;
}
/* Uses 'Intelligent Connect', so Connect, not ConnectDirect here */
hr = IFilterGraph2_Connect(This->mygraph, pin_in, pin_out);
IPin_Release(pin_in);
IPin_Release(pin_out);
return hr;
} }
static HRESULT WINAPI static HRESULT WINAPI
...@@ -333,17 +359,23 @@ static BOOL pin_matches(IPin *pin, PIN_DIRECTION direction, const GUID *cat, con ...@@ -333,17 +359,23 @@ static BOOL pin_matches(IPin *pin, PIN_DIRECTION direction, const GUID *cat, con
IPin_QueryDirection(pin, &pindir); IPin_QueryDirection(pin, &pindir);
if (pindir != direction) if (pindir != direction)
{
TRACE("No match, wrong direction\n");
return FALSE; return FALSE;
}
if (unconnected && IPin_ConnectedTo(pin, &partner) == S_OK) if (unconnected && IPin_ConnectedTo(pin, &partner) == S_OK)
{ {
IPin_Release(partner); IPin_Release(partner);
TRACE("No match, %p already connected to %p\n", pin, partner);
return FALSE; return FALSE;
} }
if (cat || type) if (cat || type)
FIXME("Ignoring category/type\n"); FIXME("Ignoring category/type\n");
TRACE("Match made in heaven\n");
return TRUE; return TRUE;
} }
...@@ -403,6 +435,7 @@ fnCaptureGraphBuilder2_FindPin(ICaptureGraphBuilder2 * iface, ...@@ -403,6 +435,7 @@ fnCaptureGraphBuilder2_FindPin(ICaptureGraphBuilder2 * iface,
if (hr != S_OK) if (hr != S_OK)
break; break;
TRACE("Testing match\n");
if (pin_matches(pin, pindir, pCategory, pType, fUnconnected) && numcurrent++ == num) if (pin_matches(pin, pindir, pCategory, pType, fUnconnected) && numcurrent++ == num)
break; break;
IPin_Release(pin); IPin_Release(pin);
...@@ -412,7 +445,7 @@ fnCaptureGraphBuilder2_FindPin(ICaptureGraphBuilder2 * iface, ...@@ -412,7 +445,7 @@ fnCaptureGraphBuilder2_FindPin(ICaptureGraphBuilder2 * iface,
if (hr != S_OK) if (hr != S_OK)
{ {
WARN("Could not find pin # %d\n", numcurrent); WARN("Could not find %s pin # %d\n", (pindir == PINDIR_OUTPUT ? "output" : "input"), numcurrent);
return E_FAIL; return E_FAIL;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment