2014-07-03 30 views
1

我有以下方法打開相機面向用戶:onPreviewFrame不會被調用

CameraOperations.java 

    private Parameters parameters = null; 
    private Camera cam = null; 
    private Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
    private static int camNumber = Camera.getNumberOfCameras(); 

    public Camera toggleFaceCamera(){ 

     if(cam == null){ 
      for(int counter = 0; counter < camNumber; counter++){ 
       Camera.getCameraInfo(counter, cameraInfo); 
       if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){ 
        try{ 
         cam = Camera.open(counter); 
         parameters = cam.getParameters(); 
         parameters.setPreviewFormat(16); 
         return cam; 
        }catch(RuntimeException e){return null;} 
       } 
      } 
     }else{cam.release();} 

     return null; 

    } 

    public void onPreviewFrame(byte[] data, Camera cam){ 
      Debug.out("teste"); 
     } 

這同樣是叫:

MainActivity.java 

surface = (SurfaceView)findViewById(R.id.cameraView); 
      holder = surface.getHolder(); 

      Camera cam = CameraOperations.toggleFaceCamera(); 

      try{ 
       cam.setPreviewDisplay(holder); 
       //cam.setPreviewCallback(CameraOperations.()); 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 

      cam.startPreview(); 

而這一切工作得很好,在相機顯示正確

不幸的是onPreviewFrame沒有被調用。我已經嘗試了幾個使用setPreviewCallback和setPreviewCallbackWithBuffer的東西,但老實說,我不明白爲什麼這不起作用,因爲onPreviewFrame應該用框架的顯示來調用......我已經閱讀了文檔,但我覺得有點誤導這是有效的,如果有人能讓我明白,我會非常感謝! (實例I試過)

(...) 
      try{ 
         cam = Camera.open(counter); 
         parameters = cam.getParameters(); 
         parameters.setPreviewFormat(16); 
         cam.setPreviewCallback(onPreviewFrame); <---- doens't recognize argument 
         return cam; 
        }catch(RuntimeException e){return null;} 
(...) 

回答

0

呼叫命令的語法使用

cam.setPreviewCallback(this); 

CameraOperations類的內部。

要讓預覽回調,則必須調用

cam.startPreview(); 

如果你想使用你的參數(例如把預覽格式後),您需要

cam.setParameters(parameters); 

通常情況下,你想在之前設置參數startPreview()

+0

我在mainactivity.java中調用了'cam.startPreview();',它可以正常顯示幀......當我調用cam.setPreviewCallback(this);'在裏面togglefacecamera中, 'Camera類型中的方法setPreviewCallback(Camera.PreviewCallback)不適用於參數(CameraOperations)'。如果我調用'setPreviewCallback(onPreviewFrame)'而不是「onPreviewFrame無法解析爲變量」。你能告訴我我應該叫什麼名字嗎? – 0LLiena