IStreamBuilder::Render
Microsoft DirectShow 9.0 |
IStreamBuilder::Render
The Render method completes rendering of the stream originating with this pin. This can involve adding filters to the filter graph and connecting them.
Syntax
HRESULT Render( IPin *ppinOut, IGraphBuilder *pGraph );
Parameters
ppinOut
[in] Pointer to the IPin interface of this pin.
pGraph
[in] Pointer to the IGraphBuilder interface of the Filter Graph Manager.
Return Value
Returns an HRESULT value. A return code of S_OK indicates that the stream was successfully rendered.
Remarks
The following code illustrates how to implement this method on an output pin. This example assumes that the filter requires a custom renderer downstream from it.
STDMETHODIMP CMyOutputPin::Render(IPin *pPin, IGraphBuilder *pGraph) { CheckPointer(pPin, E_POINTER); CheckPointer(pGraph, E_POINTER); // This filter needs a special renderer connected to it. IBaseFilter *pMyRenderer = NULL; // Create the renderer. HRESULT hr = CoCreateInstance(CLSID_MyRenderer, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&pMyRenderer); if (FAILED(hr)) { return hr; } // Add my renderer to the filter graph. 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)) { // Connect my renderer to my output pin. hr = pGraph->ConnectDirect(pPin, pMyRendererInputPin); pMyRendererInputPin->Release(); } if (FAILED(hr)) { // Could not connect to my renderer. Remove it from the graph. pGraph->RemoveFilter(pMyRenderer); } pMyRenderer->Release(); return hr; }
Requirements
Header: Declared in Strmif.h; include Dshow.h.
Library: Use Strmiids.lib.
See Also