本文整理汇总了C++中IGraphBuilder::Connect方法的典型用法代码示例。如果您正苦于以下问题:C++ IGraphBuilder::Connect方法的具体用法?C++ IGraphBuilder::Connect怎么用?C++ IGraphBuilder::Connect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IGraphBuilder
的用法示例。
在下文中一共展示了IGraphBuilder::Connect方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ConnectTwoFilter
HRESULT ConnectTwoFilter(IFilterGraph* filterGraph, IBaseFilter* fromFilter, IBaseFilter* toFilter)
{
HRESULT hr = S_OK;
IGraphBuilder* graphBuilder; //得到Graph builder 接口
hr = filterGraph->QueryInterface(IID_IGraphBuilder, (void**)&graphBuilder);
if(FAILED(hr))
{
ErrorPrint("Get graph builder interface error", hr);
return hr;
}
ComReleaser graphBuilderReleaser(graphBuilder);
IEnumPins *fromEnumPins;
hr = fromFilter->EnumPins(&fromEnumPins);
if(FAILED(hr))
{
ErrorPrint("Enum from filter pins error", hr);
return hr;
}
ComReleaser fromEnumPinsReleaser(fromEnumPins);
IPin* fromOutputPin;
while (S_OK == fromEnumPins->Next(1, &fromOutputPin, NULL))
{
ComReleaser fromOutputPinReleaser(fromOutputPin);
PIN_INFO pinInfo;
hr = fromOutputPin->QueryPinInfo(&pinInfo);
if(FAILED(hr))
{
ErrorPrint("Query pin direction error", hr);
fromOutputPin->Release();
continue;
}
IPin* tmp;
fromOutputPin->ConnectedTo(&tmp);
if (tmp != NULL)
{
tmp->Release();
}
if(pinInfo.dir == PINDIR_OUTPUT && tmp == NULL)
{
IEnumPins *toEnumPins;
hr = toFilter->EnumPins(&toEnumPins);
if(FAILED(hr))
{
ErrorPrint("Enum to filter pins error", hr);
return hr;
}
ComReleaser toEnumPinsReleaser(toEnumPins);
IPin *toInputPin;
while (S_OK == toEnumPins->Next(1, &toInputPin, NULL))
{
ComReleaser toInputPinReleaser(toInputPin);
PIN_INFO pinInfo;
hr = toInputPin->QueryPinInfo(&pinInfo);
if(FAILED(hr))
{
ErrorPrint("Query pin direction error", hr);
toInputPin->Release();
continue;
}
IPin* tmp;
fromOutputPin->ConnectedTo(&tmp);
if (tmp != NULL)
{
tmp->Release();
}
if(pinInfo.dir == PINDIR_INPUT && tmp == NULL)
{
hr = graphBuilder->Connect(fromOutputPin, toInputPin);
if(SUCCEEDED(hr))
return hr;
}
}
}
}
return E_FAIL;
}
示例2: initialCaptureAndSend
bool CaptureAndSend::initialCaptureAndSend()
{
HRESULT hr;
IGraphBuilder* graphBuilder;
hr = m_FilterGraph->QueryInterface(IID_IGraphBuilder, (void**)&graphBuilder);
if (FAILED(hr))
{
ErrorPrint("Get graph builder interface error", hr);
return false;
}
ComReleaser graphBuilderReleaser(graphBuilder);
m_NetSenderFilter = new NetSenderFilter(&hr);
if (FAILED(hr))
{
ErrorPrint("Create net sender filter error", hr);
return false;
}
hr = m_FilterGraph->AddFilter(m_NetSenderFilter, L"Net sender filter");
if(FAILED(hr))
{
ErrorPrint("Add net receive filter error", hr);
return false;
}
hr = GetTeeNextFreeOutputPin(m_CapturePin);
if (FAILED(hr))
{
ErrorPrint("Get tee next free output pin error",hr);
return false;
}
//必须先stop才能连接
IMediaControl* mediaControl;
hr = m_FilterGraph->QueryInterface(IID_IMediaControl, (void**)&mediaControl);
if(FAILED(hr))
{
ErrorPrint("Get media control error", hr);
return false;
}
ComReleaser mediaControlReleaser(mediaControl);
hr = mediaControl->Stop();
if(FAILED(hr))
{
ErrorPrint("Stop filter graph error",hr);
}
hr = graphBuilder->Connect(m_CapturePin, m_NetSenderFilter->GetPin(0));
if (FAILED(hr))
{
ErrorPrint("Connect capture pin and net sender filter error", hr);
return false;
}
hr = mediaControl->Run();
if(FAILED(hr))
{
ErrorPrint("Start filter graph error",hr);
}
PrintFilters(g_CaptureSourceFilter);
PrintAllFilters(m_FilterGraph);
return true;
}