繁体   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