onPreviewFrame没有被调用

时间:2014-07-03 15:43:11

标签: java android camera

我有以下方法打开面向用户的相机:

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

2 个答案:

答案 0 :(得分:0)

要使用的调用命令的语法

cam.setPreviewCallback(this);

来自 CameraOperations 类。

要进行预览回调,您必须致电

cam.startPreview();

如果您希望使用参数(例如,在更改预览格式后),则需要

cam.setParameters(parameters);

通常,您希望在 startPreview()之前设置参数

答案 1 :(得分:0)

我通过以下方式解决问题:

将.setPreviewCallback移到.startPreview后面。

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