The FrameSnapSink is a sink type used to grab a number frames from the video stream on demand.
This sink is useful in situations where the application only needs access to the image data of some of the images, for example as part of a snapshot operation or at regular intervals. Live video can still be displayed as it is received by the device. If the application needs to process all images, the FrameQueueSink is the preferred option.
A simple example is shown here:
// Create a FrameSnapSink, specify buffer type as RGB32, pre-allocate one buffer on connect auto pSink = FrameSnapSink::create( MEDIASUBTYPE_RGB32, 1 ); // Use the sink and start grabber grabber.setSinkType( pSink ); grabber.startLive(); // Snap 1 image with 3 second timeout auto pBuffer = pSink->snapSingle( 3000 ); // Save image saveToFileBMP( *pBuffer, "test.bmp" );
The sink is created by calling FrameSnapSink::create, and is passed MEDIASUBTYPE_RGB32 to specify that the sink wants to capture RGB32 color images. The second parameter instructs the sink to pre-allocate image buffers, instead having to create them on demand when snapSingle or snapSequence is called without a destination buffer.
The call to snapSingle blocks until a new image is received from the video capture device, and returns that image in a FrameQueueBuffer.
Header File: tisudshl.h
Namespace: DShowLib
Introduced in version 3.5
GrabberSinkType
FrameSnapSink
Method | Description | ||
allocAndQueueBufferCache | This function is used to pre-allocate a number of buffers so that subsequent calls to snapSingle or snapSequence do not have to allocate memory. |
||
create | Creates a new FrameSnapSink. |
||
getOutputFrameType | Retrieves the FrameTypeInfo of the current connection. |
||
snapSequence | This method lets the FrameSnapSink copy the next images to be recevied from the device into a collection of FrameQueueBuffers. |
||
snapSingle | This method lets the FrameSnapSink copy the next image to be recevied from the device into a FrameQueueBuffer. |
||