DirectShow DirectShow 레퍼런스 인터페이스 IStreamBuilder Render   [목차열람] [주소복사] [슬롯비우기]
IStreamBuilder::Render
 
Microsoft DirectX 9.0

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

참조

↑TOP