簡體   English   中英

onPreviewFrame沒有被調用

[英]onPreviewFrame not being called

我可以通過以下方法打開面向用戶的相機:

    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應該與幀的顯示一起調用...我已經閱讀了文檔,但是我對如何使用有一些誤解這行得通,如果有人能讓我清楚地理解這一點,我將非常感激! (我試過的例子)

(...)
           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;}
(...)

要使用的調用命令的語法

cam.setPreviewCallback(this);

CameraOperations類內部。

要使用預覽回調,您必須致電

cam.startPreview();

如果要使用參數(例如,更改預覽格式后),則需要

cam.setParameters(parameters);

通常,您要 startPreview() 之前設置參數。

我通過以下方式解決問題:

將.setPreviewCallback移到.startPreview之后。

        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
        mCamera.setPreviewCallback(previewCallback);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM