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);
}
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);
}
}
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) {
}
}
}
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);
}
});
}
Aggregations