HTC m8中的低fps`onPreviewFrame`

时间:2016-02-15 14:20:18

标签: android android-camera

我使用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。

我需要设置什么才能让它更快?

1 个答案:

答案 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]);
}