Search code examples
android-cameraface-detection

How to fix setParameters Failed in Android.harware.Camera?


Hi

I am getting this error on multiple devices,

setParameters Failed

...while creating a camera app in Android.

What causes this problem?

Here's what I have done so far on opening camera setting the Parameters:

   public void surfaceCreated(SurfaceHolder surfaceHolder ) {



        try {

                camera = camera.open();

        } catch (Exception e) {
            Log.e(getString(R.string.app_name), "failed to open Camera");
            e.printStackTrace();
        }


        try {

            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();


        }catch (Exception e){



        }

    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        refreshCamera();
        setDisplayOrientation();

        Camera.Parameters parameters = camera.getParameters();

        camera.setFaceDetectionListener(faceDetectionListener);
        camera.startFaceDetection();
        parameters.setPreviewFrameRate(20);
        List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
        Camera.Size customSize = customSizes.get(0); //Added size
        parameters.setPreviewSize(customSize.width, customSize.height);
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        camera.setParameters(parameters);
        camera.setDisplayOrientation(90);

        camera.setParameters(parameters);
        camera.startPreview();





    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        if (camera != null) {
            camera.stopPreview();
        }

    }




    public void frontCamera(View view) {

        camera.stopPreview();
        camera.release();
        camera=null;

        if (cameraId == 0){



            try {

                camera = camera.open(1);

            } catch (Exception e) {
                Log.e(getString(R.string.app_name), "failed to open Camera");
                e.printStackTrace();
            }
            android.hardware.Camera.Parameters parameters;
            camera.setFaceDetectionListener(faceDetectionListener);
            camera.startFaceDetection();
            parameters = camera.getParameters();
            parameters.setPreviewFrameRate(20);
            List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();


            Camera.Size customSize = customSizes.get(0); //Added size
            parameters.setPreviewSize(customSize.width, customSize.height);
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
            camera.setParameters(parameters);
            camera.setDisplayOrientation(90);

            cameraId = 1;


            try {

                camera.setPreviewDisplay(surfaceHolder);
                camera.startPreview();


            }catch (Exception e){



            }
        }

+ I've tried to do research on the internet and I found this:

  List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();


            Camera.Size customSize = customSizes.get(0); //Added size
            parameters.setPreviewSize(customSize.width, customSize.height);

But still causing the setParameters error...


Solution

    • Do you know the cameras in question support FOCUS_MODE_CONTINUOUS_PICTURE? That's not guaranteed. Check getSupportedFocusModes(). A camera can fail setParameters if you use a non-supported mode of any type.
    • Do you know the camera supports a frame rate of 20? That's not guaranteed. Check getSupportedPreviewFpsRange. Again, a camera can fail setParameters if you a non-supported frame rate value.
    • And, as Jan says, startFaceDetection() should be called only after preview is started. Though it's a bit surprising that doing that out of order will result in a setParameters error, in all honesty.