diff --git a/android/src/main/java/com/mrousavy/camera/CameraSession.kt b/android/src/main/java/com/mrousavy/camera/CameraSession.kt index 93b8275176..f6bea7d775 100644 --- a/android/src/main/java/com/mrousavy/camera/CameraSession.kt +++ b/android/src/main/java/com/mrousavy/camera/CameraSession.kt @@ -177,7 +177,7 @@ class CameraSession(private val cameraManager: CameraManager, val timestamp = result[CaptureResult.SENSOR_TIMESTAMP]!! Log.i(TAG, "Photo capture 1/2 complete - received metadata with timestamp $timestamp") try { - val image = photoOutputSynchronizer[timestamp].await() + val image = photoOutputSynchronizer.await(timestamp) // TODO: Correctly get rotationDegrees and isMirrored val rotation = ExifUtils.computeExifOrientation(0, false) diff --git a/android/src/main/java/com/mrousavy/camera/utils/PhotoOutputSynchronizer.kt b/android/src/main/java/com/mrousavy/camera/utils/PhotoOutputSynchronizer.kt index 84af571e8b..1dd105ee07 100644 --- a/android/src/main/java/com/mrousavy/camera/utils/PhotoOutputSynchronizer.kt +++ b/android/src/main/java/com/mrousavy/camera/utils/PhotoOutputSynchronizer.kt @@ -6,15 +6,21 @@ import kotlinx.coroutines.CompletableDeferred class PhotoOutputSynchronizer { private val photoOutputQueue = HashMap>() - operator fun get(key: Long): CompletableDeferred { + private operator fun get(key: Long): CompletableDeferred { if (!photoOutputQueue.containsKey(key)) { photoOutputQueue[key] = CompletableDeferred() } return photoOutputQueue[key]!! } - fun set(key: Long, image: Image) { - this[key].complete(image) + suspend fun await(timestamp: Long): Image { + val image = this[timestamp].await() + photoOutputQueue.remove(timestamp) + return image + } + + fun set(timestamp: Long, image: Image) { + this[timestamp].complete(image) } fun clear() {