当确实调用Camera.PreviewCallback#onPreviewFrame
时,摄像机不会填充所传递的byte[]
缓冲区:它始终充满零。
我使用不推荐使用的API的原因是,使用较新的API时帧率非常低。由于我的相机被视为LEGACY
,因此建议尝试不推荐使用的API。
我的代码,确实调用了回调,但是缓冲区为空:
camera = Camera.open();
camera.setParameters(configurator.getParameters());
Size size = configurator.getOutputSize();
camera.addCallbackBuffer(new byte[size.getWidth() * size.getHeight() * ImageFormat.getBitsPerPixel(ImageFormat.YV12) / 8]);
camera.setPreviewCallbackWithBuffer(this);
camera.startPreview();
我在日志中看到的一件奇怪的事情是:当我调用
camera.setPreviewCallbackWithBuffer(this);
时,会出现以下调试消息:D/Camera-JNI: (tid:3466)[release camera] - X context=0x0
。同样,将清除对缓冲区的所有修改:在每次调用回调之前,缓冲区实际上都填充了零。
最佳答案
问题是与曝光时间相比,光线不足:我已将预览FPS范围设置为最大,但与房间内的照明相比,这导致曝光时间太短。结果是黑色的图像,除非我将相机直接对准光源。将FPS范围更改为较低的值可以解决我的问题。
关于java - Android相机预览回调缓冲区未填充:始终为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54480857/