IMemInputPin::Receive
Microsoft DirectShow 9.0 |
IMemInputPin::Receive
The Receive method receives the next media sample in the stream.
Syntax
HRESULT Receive( IMediaSample *pSample );
Parameters
pSample
[in] Pointer to the sample's IMediaSample interface.
Return Values
Returns an HRESULT value. Possible values include those shown in the following table.
Return code | Description |
S_OK | Success. |
S_FALSE | The sample was rejected. |
E_POINTER | NULL pointer argument. |
VFW_E_INVALIDMEDIATYPE | Invalid media type. |
VFW_E_RUNTIME_ERROR | A run-time error occurred. |
VFW_E_WRONG_STATE | The pin is stopped. |
Remarks
This method is synchronous and possibly blocking. The pin does one of the following:
- Rejects the sample.
- Returns immediately and processes the sample in a worker thread.
- Processes the sample before returning.
In the last case, the method might block indefinitely. If this might happen, the IMemInputPin::ReceiveCanBlock method returns S_OK.
If the pin uses a worker thread to process the sample, it holds a reference count on the sample. In any case, the output pin cannot directly re-use this sample. It must call the IMemAllocator::GetBuffer method to obtain a new sample.
If this method returns S_FALSE or an error code, the upstream filter should stop sending samples until the graph stops or completes a flush operation. Typical reasons for an S_FALSE return value include:
- The downstream pin is flushing; that is, it received a BeginFlush call and has not yet received an EndFlush call.
- The downstream filter detected the end of the stream. (See End-of-Stream Notifications.)
Requirements
Header: Declared in Strmif.h; include Dshow.h.
Library: Use Strmiids.lib.
See Also