ISampleGrabber::SetOneShot method

[The feature associated with this page, DirectShow, is a legacy feature. It has been superseded by MediaPlayer, IMFMediaEngine, and Audio/Video Capture in Media Foundation. Those features have been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use MediaPlayer, IMFMediaEngine and Audio/Video Capture in Media Foundation instead of DirectShow, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]


[Deprecated. This API may be removed from future releases of Windows.]


The SetOneShot method specifies whether the Sample Grabber filter halts after the filter receives a sample.


   BOOL OneShot



A Boolean value that specifies whether the Sample Grabber filter halts after receiving a sample.

Value Meaning
The Sample Grabber halts after the first sample.
After the first sample, the Sample Grabber continues to process samples. This is the default behavior.


Return value

If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.


Use this method to get a single sample from the stream, as follows:

  1. Call SetOneShot with the value TRUE.
  2. Optionally, use the IMediaSeeking interface to seek to a position in the stream.
  3. Call IMediaControl::Run to run the filter graph.
  4. Call IMediaEvent::WaitForCompletion to wait for the graph to halt. Alternatively, call IMediaEvent::GetEvent to get graph events, until you receive the EC_COMPLETE event.

After the Sample Grabber halts, the filter graph is still in a running state. You can seek or pause the graph to get another sample.


An earlier version of the documentation stated that the filter graph stops after the sample is received. That is not accurate. The stream ends, but the graph remains in the running state.


The Sample Grabber implements one-shot mode by calling IPin::EndOfStream on the downstream filter and returning S_FALSE from the IMemInputPin::Receive method of it.


The header file Qedit.h is not compatible with Direct3D headers later than version 7.



To obtain Qedit.h, download the Microsoft Windows SDK Update for Windows Vista and .NET Framework 3.0. Qedit.h is not available in the Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 Service Pack 1.



Requirement Value

See also

Using the Sample Grabber

ISampleGrabber Interface