1

i have a camera app, where i focus on touch, but the problem it is that after i set AF and AE Regions and after i trigger the focus, i set the setRepeatingRequest() so i can see the preview, but it works only for the first time i touch the screen and after that it has no changes (no focus or flash is working on touch), please help, i don't know what's going wrong !

Here is my code :

    private void autofoc() {
    mTextureView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:

                Rect rect = cameraCharacteristics
                        .get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
                Size size = cameraCharacteristics
                        .get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE);
                int areaSize = 200;
                int right = rect.right;
                int bottom = rect.bottom;
                int viewWidth = mTextureView.getWidth();
                int viewHeight = mTextureView.getHeight();
                int ll,
                rr;
                Rect newRect;
                int centerX = (int) event.getX();
                int centerY = (int) event.getY();
                ll = ((centerX * right) - areaSize) / viewWidth;
                rr = ((centerY * bottom) - areaSize) / viewHeight;

                int focusLeft = clamp(ll, 0, right);
                int focusBottom = clamp(rr, 0, bottom);

                newRect = new Rect(focusLeft, focusBottom, focusLeft
                        + areaSize, focusBottom + areaSize);
                MeteringRectangle meteringRectangle = new MeteringRectangle(
                        newRect, 500);
                MeteringRectangle[] meteringRectangleArr = { meteringRectangle };

                System.out.println("metering rectARR"
                        + meteringRectangleArr);

                mPreviewCaptureRequestBuilder.set(CaptureRequest.CONTROL_MODE,
                        CameraMetadata.CONTROL_MODE_AUTO);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_REGIONS,
                        meteringRectangleArr);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AE_REGIONS,
                        meteringRectangleArr);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_TRIGGER,
                        CameraMetadata.CONTROL_AF_TRIGGER_START);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_MODE,
                        CameraMetadata.CONTROL_AF_MODE_AUTO);




                if(flash_value == 1){
                    mPreviewCaptureRequestBuilder.set(
                            CaptureRequest.CONTROL_AE_MODE,
                            CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
                    mPreviewCaptureRequestBuilder.set(
                            CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
                            CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);
                }


                try {
                    mCameraCaptureSession.setRepeatingRequest(
                        mPreviewCaptureRequestBuilder.build(),
                        mSessionCaptureCallback, mBackgroundHandler);

                } catch (CameraAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                break;
            }

            return true;

        }
    });
Homombi
  • 133
  • 7
  • Possible duplicate of [Camera Preview Session setRepeatingRequest focus issue, focuses only first time ontouch](http://stackoverflow.com/questions/33355977/camera-preview-session-setrepeatingrequest-focus-issue-focuses-only-first-time) – Asaf Pinhassi Sep 12 '16 at 07:58

1 Answers1

0

you should call CONTROL_AF_TRIGGER_START only once, using mCameraCaptureSession.capture.

See my answer here

Community
  • 1
  • 1
Asaf Pinhassi
  • 15,177
  • 12
  • 106
  • 130