A ring acquisition is similar to a grab, but with two major differences:
- multiple buffers are used to store the images acquired by the frame grabber, and
- no copying of buffers is required; the acquisition continues into other buffers while processing is done directly in the acquisition buffer
Of course, you may still want to copy a buffer for use in later processing, but the problem of overwriting the buffer during the copy will be avoided. The choice of how many buffers to use depends on the following factors:
- available system memory
- maximum delay expected to be introduced by operating system interrupts
- maximum length of time your processing will take for a single frame
- how critical it is to capture every single frame of the acquisition
- how much delay your application can tolerate before responding to an image event*
In practice, you can monitor the number of frames acquired versus the number of buffers processed, and increase the buffer count until no frames are lost. The ring acquisition is recommended for most high-speed applications where real-time processing is to be performed on the image. A typical application might involve monitoring a dynamic experiment and saving all the resulting images to files.
Be aware that there is a trade-off when increasing the number of buffers used. As you use more buffers, the chances of missing a frame will drop, but the maximum delay between acquisition and response will rise. For example, if you allocate 30 buffers for a 30 frames/sec acquisition, you could see up to a one second response time between an action and its appearance on the display.