我使用camera.setPreviewCallbackWithBuffer(...)
来获取我的帧 - 在单独的帧中执行此操作。 (我知道新的camera2
api - 但我现在想坚持这个api
我的手机预览帧的fps有问题。
我已经使用onPreviewFrame(...)
方法检查了fps,并且在许多设备中我获得了大约25 fps,包括使用GenyMotion模拟器。但在我的 HTC M8 中,我获得最大11 fps。
在我的onPreviewFrame(...)
中,我删除了所有的帧处理代码,只留下了fps计算(3条简单的行),因此没有代码可以减慢速度。 (它在其他设备上运行良好 - 所以它必须是相机设置 - 我认为)
我已经尝试了
setPreviewSize(320,240)
setRecordHint(true)
setPreviewFpsRange(30000,30000)
(所有内容都经过相机支持的值仔细检查)
对我的HTC M8没什么帮助 - 安卓6。
我需要设置什么才能让它更快?
答案 0 :(得分:0)
HTC的问题由于某种原因我们需要在使用camera.setPreviewCallbackWithBuffer(..)
时提供多个缓冲区
例如
camera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// Do what ever here
camera.addCallbackBuffer(data);
}
});
int bitsPetPixel = ImageFormat.getBitsPerPixel(cameraPreviewFormat);
double bytesPerPixel = bitsPetPixel / 8.0;
int frameSize = (int) (cameraPreviewSize.getWidth() * cameraPreviewSize.getHeight() * bytesPerPixel);
byte[][] framesData = new byte[10][];
for (int i = 0; i < framesData.length; i++) {
framesData[i] = new byte[frameSize];
}
// Providing more than one buffer did the trick
// For the demo it is 10
for (int i = 0; i < framesData.length; i++) {
camera.addCallbackBuffer(framesData[i]);
}