2016-02-15 48 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]); 
}