addCallbackBuffer
void addCallbackBuffer (byte[] callbackBuffer)
Adds a pre-allocated buffer to the preview callback buffer queue. Applications can add one or more buffers to the queue. When a preview frame arrives and there is still at least one available buffer, the buffer will be used and removed from the queue. Then preview callback is invoked with the buffer. If a frame arrives and there is no buffer left, the frame is discarded. Applications should add buffers back when they finish processing the data in them.
For formats besides YV12, the size of the buffer is determined by multiplying the preview image width, height, and bytes per pixel. The width and height can be read from getPreviewSize()
. Bytes per pixel can be computed from getBitsPerPixel(int)
/ 8, using the image format fromgetPreviewFormat()
.
If using the YV12
format, the size can be calculated using the equations listed in setPreviewFormat(int)
.
This method is only necessary when setPreviewCallbackWithBuffer(PreviewCallback)
is used. When setPreviewCallback(PreviewCallback)
orsetOneShotPreviewCallback(PreviewCallback)
are used, buffers are automatically allocated. When a supplied buffer is too small to hold the preview frame data, preview callback will return null and the buffer will be removed from the buffer queue.
use setPreviewCallbackWithBuffer and addCallbackBuffer together.
At first, you should call addCallbackBuffer before calling setPreviewCallbackWithBuffer. You can add buffer by calling addCallbackBuffer for 4-5 frames. It depends on your project. How many bytes a frame requires expains here..
Everytime onPreviewFrame is called, buffer added by addCallbackBuffer is used. As long as there is enough buffer added by addCallbackBuffer, onPreviewFrame is called. If there is no buffer left for onPreviewFrame, frames are started to drop and onPreviewFrame is not called.
So you should keep calling addCallbackBuffer during the execution. You can call addCallbackBuffer with the byte array parameter on onPreviewFrame after you process the data. In this way, you always reuse the same buffers.