IStreamBuilder::Render
Render メソッドは、このピンから始まるストリームのレンダリングを完了する。このとき、必要に応じて、フィルタをフィルタ グラフに追加し、接続する。
構文
HRESULT Render(
IPin *ppinOut,
IGraphBuilder *pGraph
);
パラメータ
ppinOut
[in] このピンの IPin インターフェイスへのポインタ。
pGraph
[in] フィルタ グラフ マネージャの IGraphBuilder インターフェイスへのポインタ。
戻り値
HRESULT 値を返す。戻りコード S_OK はストリームのレンダリングが成功したことを示す。
注意
次のコードは、このメソッドを出力ピンに実装する方法を示している。この例では、フィルタにはフィルタのダウンストリームにカスタム レンダラが必要であることを前提としている。
STDMETHODIMP CMyOutputPin::Render(IPin *pPin, IGraphBuilder *pGraph)
{
CheckPointer(pPin, E_POINTER);
CheckPointer(pGraph, E_POINTER);
// このフィルタには、このフィルタに接続される特殊なレンダラが必要である。
IBaseFilter *pMyRenderer = NULL;
// レンダラを作成する。
HRESULT hr = CoCreateInstance(CLSID_MyRenderer, NULL, CLSCTX_INPROC,
IID_IBaseFilter, (void **)&pMyRenderer);
if (FAILED(hr))
{
return hr;
}
// 作成したレンダラをフィルタ グラフに追加する。
hr = pGraph->AddFilter(pMyRenderer, L"My Renderer");
if (FAILED(hr))
{
pMyRenderer->Release();
return hr;
}
IEnumPins *pEnumPins;
IPin *pMyRendererInputPin = NULL;
hr = pMyRenderer->EnumPins(&pEnumPins);
if (SUCCEEDED(hr))
{
if (S_OK != pEnumPins->Next(1, &pMyRendererInputPin, 0))
{
hr = E_UNEXPECTED;
}
}
if (SUCCEEDED(hr))
{
// レンダラを出力ピンに接続する。
hr = pGraph->ConnectDirect(pPin, pMyRendererInputPin);
pMyRendererInputPin->Release();
}
if (FAILED(hr))
{
// レンダラに接続できなかった。グラフからレンダラを削除する。
pGraph->RemoveFilter(pMyRenderer);
}
pMyRenderer->Release();
return hr;
}
参照