DirectShow DirectShow 레퍼런스 인터페이스 IStreamBuilder Render [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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;
}
참조