次の方法で共有


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;
}

参照