2016-02-15 105 views
1

我使用camera.setPreviewCallbackWithBuffer(...)来获取我的相框 - 在不同的框架中进行。 (我知道新的camera2 API - 但我想坚持现在与这一个)在HTC m8上低fps`onPreviewFrame`

我有我的手机预览帧的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

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