Compare commits
	
		
			1 Commits
		
	
	
		
			ivan/ensur
			...
			031aa9d43a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 031aa9d43a | 
| @@ -133,8 +133,8 @@ android { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   compileOptions { |   compileOptions { | ||||||
|     sourceCompatibility JavaVersion.VERSION_1_8 |     sourceCompatibility JavaVersion.VERSION_17 | ||||||
|     targetCompatibility JavaVersion.VERSION_1_8 |     targetCompatibility JavaVersion.VERSION_17 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   externalNativeBuild { |   externalNativeBuild { | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|           package="com.mrousavy.camera"> |  | ||||||
|  |  | ||||||
| </manifest> | </manifest> | ||||||
|   | |||||||
| @@ -50,12 +50,4 @@ extension CameraView: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAud | |||||||
|   func resumeRecording(promise: Promise) { |   func resumeRecording(promise: Promise) { | ||||||
|     cameraSession.resumeRecording(promise: promise) |     cameraSession.resumeRecording(promise: promise) | ||||||
|   } |   } | ||||||
|    |  | ||||||
|   func lockExposure(promise: Promise) { |  | ||||||
|     cameraSession.lockCurrentExposure(promise: promise) |  | ||||||
|   } |  | ||||||
|    |  | ||||||
|   func unlockExposure(promise: Promise) { |  | ||||||
|     cameraSession.unlockCurrentExposure(promise: promise) |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -86,13 +86,5 @@ RCT_EXTERN_METHOD(focus | |||||||
|                   : (NSDictionary*)point resolve |                   : (NSDictionary*)point resolve | ||||||
|                   : (RCTPromiseResolveBlock)resolve reject |                   : (RCTPromiseResolveBlock)resolve reject | ||||||
|                   : (RCTPromiseRejectBlock)reject); |                   : (RCTPromiseRejectBlock)reject); | ||||||
| RCT_EXTERN_METHOD(lockCurrentExposure |  | ||||||
|                   : (nonnull NSNumber*)node resolve |  | ||||||
|                   : (RCTPromiseResolveBlock)resolve reject |  | ||||||
|                   : (RCTPromiseRejectBlock)reject); |  | ||||||
| RCT_EXTERN_METHOD(unlockCurrentExposure |  | ||||||
|                   : (nonnull NSNumber*)node resolve |  | ||||||
|                   : (RCTPromiseResolveBlock)resolve reject |  | ||||||
|                   : (RCTPromiseRejectBlock)reject); |  | ||||||
|  |  | ||||||
| @end | @end | ||||||
|   | |||||||
| @@ -111,18 +111,6 @@ final class CameraViewManager: RCTViewManager { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @objc |  | ||||||
|   final func lockCurrentExposure(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { |  | ||||||
|     let component = getCameraView(withTag: node) |  | ||||||
|     component.lockExposure(promise: Promise(resolver: resolve, rejecter: reject)) |  | ||||||
|   } |  | ||||||
|    |  | ||||||
|   @objc |  | ||||||
|   final func unlockCurrentExposure(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { |  | ||||||
|     let component = getCameraView(withTag: node) |  | ||||||
|     component.unlockExposure(promise: Promise(resolver: resolve, rejecter: reject)) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // MARK: Private |   // MARK: Private | ||||||
|  |  | ||||||
|   private func getCameraView(withTag tag: NSNumber) -> CameraView { |   private func getCameraView(withTag tag: NSNumber) -> CameraView { | ||||||
|   | |||||||
| @@ -191,68 +191,4 @@ extension CameraSession { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   func lockCurrentExposure(promise: Promise) { |  | ||||||
|     CameraQueues.cameraQueue.async { |  | ||||||
|       withPromise(promise) { |  | ||||||
|         guard let captureDevice = AVCaptureDevice.default(for: .video) else { |  | ||||||
|           print("No capture device available") |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         guard captureDevice.isExposureModeSupported(.custom) else { |  | ||||||
|           ReactLogger.log(level: .info, message: "Custom exposure mode not supported") |  | ||||||
|           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)") |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return nil |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   func unlockCurrentExposure(promise: Promise) { |  | ||||||
|     CameraQueues.cameraQueue.async { |  | ||||||
|       withPromise(promise) { |  | ||||||
|         guard let captureDevice = AVCaptureDevice.default(for: .video) else { |  | ||||||
|           print("No capture device available") |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         do { |  | ||||||
|           if captureDevice.isExposureModeSupported(.autoExpose) { |  | ||||||
|             try captureDevice.lockForConfiguration() |  | ||||||
|             captureDevice.exposureMode = .continuousAutoExposure |  | ||||||
|             captureDevice.unlockForConfiguration() |  | ||||||
|           } |  | ||||||
|         } catch { |  | ||||||
|           ReactLogger.log(level: .warning, message:"Error unlocking exposure: \(error)") |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return nil |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -319,22 +319,6 @@ export class Camera extends React.PureComponent<CameraProps, CameraState> { | |||||||
|       throw tryParseNativeCameraError(e) |       throw tryParseNativeCameraError(e) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async lockCurrentExposure(): Promise<void> { |  | ||||||
|     try { |  | ||||||
|       return await CameraModule.lockCurrentExposure(this.handle) |  | ||||||
|     } catch (e) { |  | ||||||
|       throw tryParseNativeCameraError(e) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public async unlockCurrentExposure(): Promise<void> { |  | ||||||
|     try { |  | ||||||
|       return await CameraModule.unlockCurrentExposure(this.handle) |  | ||||||
|     } catch (e) { |  | ||||||
|       throw tryParseNativeCameraError(e) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   //#endregion |   //#endregion | ||||||
|  |  | ||||||
|   //#region Static Functions (NativeModule) |   //#region Static Functions (NativeModule) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user