Search in sources :

Example 6 with CaptureFailure

use of android.hardware.camera2.CaptureFailure in project android_packages_apps_Snap by LineageOS.

the class ClearSightImageProcessor method capture.

public void capture(boolean bayer, CameraCaptureSession session, CaptureRequest.Builder requestBuilder, Handler captureCallbackHandler) throws CameraAccessException {
    Log.d(TAG, "capture: " + bayer);
    final int cam = bayer ? CAM_TYPE_BAYER : CAM_TYPE_MONO;
    CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {

        @Override
        public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
            Log.d(TAG, "capture - onCaptureCompleted: " + cam);
            if (isClosing())
                Log.d(TAG, "capture - onCaptureCompleted - closing");
            else {
                mImageProcessHandler.obtainMessage(MSG_NEW_CAPTURE_RESULT, cam, 0, result).sendToTarget();
                if (cam == CAM_TYPE_BAYER) {
                    float lensFocusDistance = result.get(CaptureResult.LENS_FOCUS_DISTANCE);
                    Log.d(TAG, "lensFocusDistance=" + lensFocusDistance);
                    mDepthProcessHandler.obtainMessage(MSG_NEW_LENS_FOCUS_DISTANCE_BAYER, 0, 0, lensFocusDistance).sendToTarget();
                }
            }
        }

        @Override
        public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure result) {
            Log.d(TAG, "capture - onCaptureFailed: " + cam);
            if (isClosing())
                Log.d(TAG, "capture - onCaptureFailed - closing");
            else
                mImageProcessHandler.obtainMessage(MSG_NEW_CAPTURE_FAIL, cam, 0, result).sendToTarget();
        }

        @Override
        public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) {
            Log.d(TAG, "capture - onCaptureSequenceCompleted: " + cam);
        }
    };
    List<CaptureRequest> burstList = new ArrayList<CaptureRequest>();
    requestBuilder.addTarget(mImageReader[cam].getSurface());
    for (int i = 0; i < mNumBurstCount; i++) {
        requestBuilder.setTag(new Object());
        CaptureRequest request = requestBuilder.build();
        burstList.add(request);
    }
    mImageProcessHandler.obtainMessage(MSG_START_CAPTURE, cam, burstList.size(), 0).sendToTarget();
    session.captureBurst(burstList, captureCallback, captureCallbackHandler);
}
Also used : CaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback) CaptureFailure(android.hardware.camera2.CaptureFailure) ArrayList(java.util.ArrayList) TotalCaptureResult(android.hardware.camera2.TotalCaptureResult) CaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback) CaptureRequest(android.hardware.camera2.CaptureRequest) CameraCaptureSession(android.hardware.camera2.CameraCaptureSession)

Example 7 with CaptureFailure

use of android.hardware.camera2.CaptureFailure in project react-native-camera by lwansbrough.

the class Camera2 method setFocusArea.

/**
 * Auto focus on input coordinates
 */
// Much credit - https://gist.github.com/royshil/8c760c2485257c85a11cafd958548482
void setFocusArea(float x, float y) {
    if (mCaptureSession == null) {
        return;
    }
    CameraCaptureSession.CaptureCallback captureCallbackHandler = new CameraCaptureSession.CaptureCallback() {

        @Override
        public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
            super.onCaptureCompleted(session, request, result);
            if (request.getTag() == "FOCUS_TAG") {
                mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, null);
                try {
                    mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, null);
                } catch (CameraAccessException e) {
                    Log.e(TAG, "Failed to manual focus.", e);
                }
            }
        }

        @Override
        public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure failure) {
            super.onCaptureFailed(session, request, failure);
            Log.e(TAG, "Manual AF failure: " + failure);
        }
    };
    try {
        mCaptureSession.stopRepeating();
    } catch (CameraAccessException e) {
        Log.e(TAG, "Failed to manual focus.", e);
    }
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
    try {
        mCaptureSession.capture(mPreviewRequestBuilder.build(), captureCallbackHandler, null);
    } catch (CameraAccessException e) {
        Log.e(TAG, "Failed to manual focus.", e);
    }
    if (isMeteringAreaAFSupported()) {
        MeteringRectangle focusAreaTouch = calculateFocusArea(x, y);
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, new MeteringRectangle[] { focusAreaTouch });
    }
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
    mPreviewRequestBuilder.setTag("FOCUS_TAG");
    try {
        mCaptureSession.capture(mPreviewRequestBuilder.build(), captureCallbackHandler, null);
    } catch (CameraAccessException e) {
        Log.e(TAG, "Failed to manual focus.", e);
    }
}
Also used : CameraAccessException(android.hardware.camera2.CameraAccessException) CaptureFailure(android.hardware.camera2.CaptureFailure) TotalCaptureResult(android.hardware.camera2.TotalCaptureResult) MeteringRectangle(android.hardware.camera2.params.MeteringRectangle) CaptureRequest(android.hardware.camera2.CaptureRequest) CameraCaptureSession(android.hardware.camera2.CameraCaptureSession)

Example 8 with CaptureFailure

use of android.hardware.camera2.CaptureFailure in project android_packages_apps_Snap by LineageOS.

the class PostProcessor method reprocessImage.

private void reprocessImage(Image image, TotalCaptureResult metadata) {
    if (mController.isLongShotActive()) {
        mController.checkAndPlayShutterSound(mController.getMainCameraId());
    }
    synchronized (lock) {
        if (mCameraDevice == null || mCaptureSession == null || mImageReader == null) {
            Log.e(TAG, "Reprocess request is called even before taking picture");
            image.close();
            return;
        }
        if (mZSLReprocessImageReader == null) {
            image.close();
            return;
        }
        if (DEBUG_ZSL)
            Log.d(TAG, "reprocess Image request " + image.getTimestamp());
        CaptureRequest.Builder builder = null;
        try {
            builder = mCameraDevice.createReprocessCaptureRequest(metadata);
            builder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(mController.getMainCameraId(), mController.getDisplayOrientation()));
            builder.set(CaptureRequest.JPEG_THUMBNAIL_SIZE, mController.getThumbSize());
            builder.set(CaptureRequest.JPEG_THUMBNAIL_QUALITY, (byte) 80);
            builder.set(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE, CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY);
            builder.set(CaptureRequest.EDGE_MODE, CaptureRequest.EDGE_MODE_HIGH_QUALITY);
            builder.set(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_HIGH_QUALITY);
            // CDS 0-OFF, 1-ON, 2-AUTO
            VendorTagUtil.setCdsMode(builder, 2);
            VendorTagUtil.setJpegCropEnable(builder, (byte) 1);
            Rect cropRect = image.getCropRect();
            if (cropRect == null || cropRect.isEmpty()) {
                cropRect = new Rect(0, 0, image.getWidth(), image.getHeight());
            }
            int targetWidth = mZSLReprocessImageReader.getWidth();
            int targetHeight = mZSLReprocessImageReader.getHeight();
            float targetRatio = (float) targetWidth / (float) targetHeight;
            cropRect = CameraUtil.getFinalCropRect(cropRect, targetRatio);
            // has crop rect. apply to jpeg request
            VendorTagUtil.setJpegCropRect(builder, new int[] { cropRect.left, cropRect.top, cropRect.width(), cropRect.height() });
            VendorTagUtil.setJpegRoiRect(builder, new int[] { 0, 0, targetWidth, targetHeight });
            Location location = mController.getLocationManager().getCurrentLocation();
            if (location != null) {
                location = new Location(location);
                Log.d(TAG, "sendReprocessRequest gps: " + location.toString());
                // workaround for Google bug. Need to convert timestamp from ms -> sec
                location.setTime(location.getTime() / 1000);
                builder.set(CaptureRequest.JPEG_GPS_LOCATION, location);
            }
            builder.addTarget(mZSLReprocessImageReader.getSurface());
            try {
                mImageWriter.queueInputImage(image);
            } catch (IllegalStateException e) {
                Log.e(TAG, "Queueing more than it can have");
            }
            mCaptureSession.capture(builder.build(), new CameraCaptureSession.CaptureCallback() {

                @Override
                public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
                    Log.d(TAG, "reprocessImage onCaptureCompleted");
                }

                @Override
                public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure result) {
                    Log.d(TAG, "reprocessImage onCaptureFailed");
                }

                @Override
                public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) {
                    Log.d(TAG, "reprocessImage onCaptureSequenceCompleted");
                }
            }, mHandler);
        } catch (CameraAccessException e) {
        }
    }
}
Also used : Rect(android.graphics.Rect) CaptureFailure(android.hardware.camera2.CaptureFailure) TotalCaptureResult(android.hardware.camera2.TotalCaptureResult) CameraCaptureSession(android.hardware.camera2.CameraCaptureSession) CameraAccessException(android.hardware.camera2.CameraAccessException) CaptureRequest(android.hardware.camera2.CaptureRequest) Location(android.location.Location)

Example 9 with CaptureFailure

use of android.hardware.camera2.CaptureFailure in project android_packages_apps_Snap by LineageOS.

the class Camera2GraphView method captureStillPictureForLongshot.

private void captureStillPictureForLongshot(CaptureRequest.Builder captureBuilder, int id) throws CameraAccessException {
    Log.d(TAG, "captureStillPictureForLongshot " + id);
    List<CaptureRequest> burstList = new ArrayList<>();
    for (int i = 0; i < PersistUtil.getLongshotShotLimit(); i++) {
        burstList.add(captureBuilder.build());
    }
    mCaptureSession[id].captureBurst(burstList, new CameraCaptureSession.CaptureCallback() {

        @Override
        public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
            Log.d(TAG, "captureStillPictureForLongshot onCaptureCompleted: " + id);
            if (mLongshotActive) {
                checkAndPlayShutterSound(id);
            }
        }

        @Override
        public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure result) {
            Log.d(TAG, "captureStillPictureForLongshot onCaptureFailed: " + id);
        }

        @Override
        public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) {
            Log.d(TAG, "captureStillPictureForLongshot onCaptureSequenceCompleted: " + id);
            mLongshotActive = false;
            unlockFocus(id);
        }
    }, mCaptureCallbackHandler);
    mActivity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            mUI.enableVideo(false);
        }
    });
}
Also used : CaptureFailure(android.hardware.camera2.CaptureFailure) ArrayList(java.util.ArrayList) TotalCaptureResult(android.hardware.camera2.TotalCaptureResult) CaptureRequest(android.hardware.camera2.CaptureRequest) CameraCaptureSession(android.hardware.camera2.CameraCaptureSession) Paint(android.graphics.Paint) Point(android.graphics.Point)

Aggregations

CaptureFailure (android.hardware.camera2.CaptureFailure)9 CaptureRequest (android.hardware.camera2.CaptureRequest)9 TotalCaptureResult (android.hardware.camera2.TotalCaptureResult)9 ArrayList (java.util.ArrayList)7 SimpleCaptureCallback (com.android.mediaframeworktest.helpers.CameraTestUtils.SimpleCaptureCallback)5 CameraCaptureSession (android.hardware.camera2.CameraCaptureSession)4 CameraAccessException (android.hardware.camera2.CameraAccessException)2 Paint (android.graphics.Paint)1 Point (android.graphics.Point)1 Rect (android.graphics.Rect)1 CaptureCallback (android.hardware.camera2.CameraCaptureSession.CaptureCallback)1 MeteringRectangle (android.hardware.camera2.params.MeteringRectangle)1 Location (android.location.Location)1