From ac5dac127fb7256b1127998df3ac91d790308193 Mon Sep 17 00:00:00 2001 From: Loewy Date: Wed, 21 Jan 2026 12:01:56 -0800 Subject: [PATCH 1/2] catch focus timeout error on android --- .../camera/core/PersistentCameraCaptureSession.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/PersistentCameraCaptureSession.kt b/package/android/src/main/java/com/mrousavy/camera/core/PersistentCameraCaptureSession.kt index 3bb1c15..7c78c06 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/PersistentCameraCaptureSession.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/PersistentCameraCaptureSession.kt @@ -235,10 +235,15 @@ class PersistentCameraCaptureSession(private val cameraManager: CameraManager, p // 1. Run a precapture sequence for AF, AE and AWB. focusJob = coroutineScope.launch { - val request = repeatingRequest.createCaptureRequest(device, deviceDetails, outputs) - val options = - PrecaptureOptions(listOf(PrecaptureTrigger.AF, PrecaptureTrigger.AE), Flash.OFF, listOf(point), false, FOCUS_RESET_TIMEOUT) - session.precapture(request, deviceDetails, options) + try { + val request = repeatingRequest.createCaptureRequest(device, deviceDetails, outputs) + val options = + PrecaptureOptions(listOf(PrecaptureTrigger.AF, PrecaptureTrigger.AE), Flash.OFF, listOf(point), false, FOCUS_RESET_TIMEOUT) + session.precapture(request, deviceDetails, options) + } catch (e: CaptureTimedOutError) { + // Focus timed out - this is non-fatal, just log and continue + Log.w(TAG, "Focus timed out at point $point, continuing without focus lock") + } } focusJob?.join() -- 2.49.1 From 3bb72d5d94b6fffdca5bfe42be5fd1c5a3d794a2 Mon Sep 17 00:00:00 2001 From: Loewy Date: Wed, 21 Jan 2026 12:57:46 -0800 Subject: [PATCH 2/2] catch negative values set by out of preview bound press --- .../src/main/java/com/mrousavy/camera/core/PreviewView.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt b/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt index baa95cd..a46a94b 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt @@ -198,8 +198,10 @@ class PreviewView(context: Context, callback: SurfaceHolder.Callback) : val viewOrientation = Orientation.PORTRAIT val rotated = point.rotatedBy(viewSize, cameraSize, viewOrientation, sensorOrientation) - Log.i(TAG, "Converted layer point $point to camera point $rotated! ($sensorOrientation, $cameraSize -> $viewSize)") - return rotated + // Clamp to valid camera coordinates (must be non-negative for MeteringRectangle) + val clamped = Point(maxOf(0, rotated.x), maxOf(0, rotated.y)) + Log.i(TAG, "Converted layer point $point to camera point $clamped! ($sensorOrientation, $cameraSize -> $viewSize)") + return clamped } private fun updateLayout() { -- 2.49.1