sil*_*ren 10 android android-camera android-camera2
在原始(现已弃用)的相机API中,我们曾经能够在Camera.PreviewCallback中获取预览帧并能够处理它(可能需要很长时间)并释放缓冲区以便能够接收另一帧,而不会滞后屏幕预览,包含以下代码:
public void onPreviewFrame(final byte[] data, Camera camera) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
(... do some slow processing ...)
}
@Override
protected void onPostExecute(Void aVoid) {
mCamera.addCallbackBuffer(data); // free the buffer to be able
// to process another frame
}
}.execute();
}
Run Code Online (Sandbox Code Playgroud)
如果有另一个可用于接收它的缓冲区,API将仅使用新帧进行回调,而不会滞后屏幕预览.
我试图在新的Camera2 API上复制相同的行为,但我找不到一种方法来做到这一点而不会滞后于屏幕预览.如果我向预览请求添加第二个目标(与屏幕1相同的分辨率,YUV_420_888):
mPreviewRequestBuilder.addTarget(surface);
mPreviewRequestBuilder.addTarget(previewImageReader.getSurface());
mCameraDevice.createCaptureSession(
Arrays.asList(surface, previewImageReader.getSurface()), ...
Run Code Online (Sandbox Code Playgroud)
屏幕预览会滞后,即使我只是在我得到它时立即关闭图像:
@Override
public void onImageAvailable(ImageReader reader) {
reader.acquireNextImage().close();
}
Run Code Online (Sandbox Code Playgroud)
使用Camera2模拟原始相机API行为的正确方法是什么(即,只要有一个空闲且没有减慢屏幕预览,就会有一个新的缓冲区)?
更新:如果有人想知道代码的其余部分是什么样的,它只是标准android-camera2Basic示例的修改版本,这就是我改变的内容.
如果有人还有兴趣的话。
创建一个SurfaceTextureListener并从该方法调用您的异步函数onSurfaceTextureUpdated。我在使用 BarcodeDetection API 和 Camera 2 API 检查帧中的条形码时成功地使用了此功能。
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |