Compartilhar via


ISampleGrabber::SetCallback

 
Microsoft DirectShow 9.0

ISampleGrabber::SetCallback

The SetCallback method specifies a callback method to call on incoming samples.

Syntax

  HRESULT SetCallback(
  ISampleGrabberCB *pCallback,
  long WhichMethodToCallback
);

Parameters

pCallback

Pointer to an ISampleGrabberCB interface containing the callback method, or NULL to cancel the callback.

WhichMethodToCallback

Index specifying the callback method. Must be one of the following values.

Value Description
0 The Sample Grabber filter calls the ISampleGrabberCB::SampleCB method, passing it a pointer to the original media sample.
1 The Sample Grabber filter calls the ISampleGrabberCB::BufferCB method, passing it a pointer to a copy of the data in the media sample.

Return Value

Returns one of the following values.

Return code Description
E_INVALIDARG Samples are not being buffered.
S_OK Success.

Remarks

If the sample is a Microsoft® DirectDraw® surface, the surface is locked during the callback. The Win16 lock (also called Win16Mutex) might be locked as well. Both of these locks create the potential for deadlock. If the callback thread waits for a thread that is trying to call a DirectDraw API, it can cause deadlock. In addition, if the Win16 lock is being held, deadlock can result if the callback holds a critical section or waits for another thread to complete any activity.

Therefore, the callback should not perform any actions with the potential to block, such as holding a critical section or waiting on another thread. Also, do not call any GDI or USER32.DLL APIs that might cause a window to move. For more information about the Win16 lock, see Knowledge Base article Q125867, Understanding Win16Mutex.

The data processing thread blocks until the callback method returns. If the callback does not return quickly, it can interfere with playback.

The filter does not invoke the callback function for preroll samples, or for samples in which the dwStreamId member of the AM_SAMPLE2_PROPERTIES structure is anything other than AM_STREAM_MEDIA.

Requirements

Header: Include Qedit.h. This header file is not compatible with Microsoft® Direct3D® headers later than version 7.

Library: Use strmiids.lib.

See Also