我尝试通过添加一个名为JView的新类来覆盖JavaCV的initializeCamera来实现this解决方案。我正在尝试使用此替代功能进行相机参数设置。但是,我发现这个覆盖函数似乎没有被调用?我的类(class)如下,面部检测示例代码(MainActivity)来自Space150

package com.space150.android.glass.opencvfacedetection;

import org.opencv.android.JavaCameraView;

import android.content.Context;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.util.Log;

public class JView extends JavaCameraView {

    public JView(Context context, int cameraId) {
        super(context, cameraId);
    }

    public JView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    protected boolean initializeCamera(int width, int height)
    {
        Log.i("JVIEW", "initialize Camera");
        super.initializeCamera(width, height);

        Camera.Parameters params = mCamera.getParameters();

        // Post XE10 Hotfix
        params.setPreviewFpsRange(60000,60000);
        params.setPreviewSize(320,240);
        mCamera.setParameters(params);

        return true;
    }

}

另外,有人在Glass XE16.11上遇到并解决了故障摄像头预览问题吗?

谢谢!

最佳答案

在setPreviewFPSRange调用中,帧速率太高。您的速度为60FPS。我已经以5和30 FPS测试了以下代码,并且可以正常工作。

当您看到故障时,它看起来像这样:

这是我在XE16.11上可以使用的整个surfaceChanged方法。使用此代码,上面没有毛刺,我看到了正常的预览。

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mCamera == null) return;

        Camera.Parameters camParameters = mCamera.getParameters();
        //start glass fix - use 5000 instead of 30000 for better battery performance
        camParameters.setPreviewFpsRange(30000, 30000);
        //end glass fix
        camParameters.setPreviewSize(1920, 1080);
        camParameters.setPictureSize(2592, 1944);
        mCamera.setParameters(camParameters);
        try {
            mCamera.startPreview();
        } catch (Exception e) {
            mCamera.release();
            mCamera = null;
        }
    }

07-28 02:34