From 66f840eecb36bf72643c871cc2ff0612aed353a9 Mon Sep 17 00:00:00 2001 From: Volodymyr Smolianinov Date: Fri, 27 Sep 2024 10:35:29 +0200 Subject: [PATCH] Lock exposure on start recording --- package/ios/Core/CameraSession+Video.swift | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/package/ios/Core/CameraSession+Video.swift b/package/ios/Core/CameraSession+Video.swift index d35b3c9..5489997 100644 --- a/package/ios/Core/CameraSession+Video.swift +++ b/package/ios/Core/CameraSession+Video.swift @@ -18,6 +18,8 @@ extension CameraSession { filePath: String, onVideoRecorded: @escaping (_ video: Video) -> Void, onError: @escaping (_ error: CameraError) -> Void) { + + lockCurrentExposure(for: captureSession) // Run on Camera Queue CameraQueues.cameraQueue.async { let start = DispatchTime.now() @@ -191,4 +193,35 @@ extension CameraSession { } } } + + func lockCurrentExposure(for session: AVCaptureSession) { + guard let captureDevice = AVCaptureDevice.default(for: .video) else { + print("No capture device available") + return + } + + do { + // Lock the device for configuration + try captureDevice.lockForConfiguration() + + // Get the current exposure duration and ISO + let currentExposureDuration = captureDevice.exposureDuration + let currentISO = captureDevice.iso + + // Check if the device supports custom exposure settings + if captureDevice.isExposureModeSupported(.custom) { + // Lock the current exposure and ISO by setting custom exposure mode + captureDevice.setExposureModeCustom(duration: currentExposureDuration, iso: currentISO, completionHandler: nil) + ReactLogger.log(level: .info, message: "Exposure and ISO locked at current values") + } else { + ReactLogger.log(level: .info, message:"Custom exposure mode not supported") + } + + // Unlock the device after configuration + captureDevice.unlockForConfiguration() + + } catch { + ReactLogger.log(level: .warning, message:"Error locking exposure: \(error)") + } + } }