Compare commits
	
		
			1 Commits
		
	
	
		
			695e317a77
			...
			volodymyr/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 66f840eecb | 
| @@ -16,7 +16,7 @@ buildscript { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   dependencies { |   dependencies { | ||||||
|     classpath "com.android.tools.build:gradle:8.5.2" |     classpath "com.android.tools.build:gradle:7.4.2" | ||||||
|     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -133,8 +133,8 @@ android { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   compileOptions { |   compileOptions { | ||||||
|     sourceCompatibility JavaVersion.VERSION_17 |     sourceCompatibility JavaVersion.VERSION_1_8 | ||||||
|     targetCompatibility JavaVersion.VERSION_17 |     targetCompatibility JavaVersion.VERSION_1_8 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   externalNativeBuild { |   externalNativeBuild { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
| <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> | ||||||
|   | |||||||
| @@ -7,14 +7,12 @@ import com.facebook.jni.HybridData | |||||||
| import com.facebook.proguard.annotations.DoNotStrip | import com.facebook.proguard.annotations.DoNotStrip | ||||||
| import com.facebook.react.bridge.ReactApplicationContext | import com.facebook.react.bridge.ReactApplicationContext | ||||||
| import com.facebook.react.bridge.UiThreadUtil | import com.facebook.react.bridge.UiThreadUtil | ||||||
| import com.facebook.react.common.annotations.FrameworkAPI |  | ||||||
| import com.facebook.react.turbomodule.core.CallInvokerHolderImpl | import com.facebook.react.turbomodule.core.CallInvokerHolderImpl | ||||||
| import com.facebook.react.uimanager.UIManagerHelper | import com.facebook.react.uimanager.UIManagerHelper | ||||||
| import com.mrousavy.camera.CameraView | import com.mrousavy.camera.CameraView | ||||||
| import com.mrousavy.camera.core.ViewNotFoundError | import com.mrousavy.camera.core.ViewNotFoundError | ||||||
| import java.lang.ref.WeakReference | import java.lang.ref.WeakReference | ||||||
|  |  | ||||||
| @OptIn(FrameworkAPI::class) |  | ||||||
| @Suppress("KotlinJniMissingFunction") // we use fbjni. | @Suppress("KotlinJniMissingFunction") // we use fbjni. | ||||||
| class VisionCameraProxy(private val reactContext: ReactApplicationContext) { | class VisionCameraProxy(private val reactContext: ReactApplicationContext) { | ||||||
|   companion object { |   companion object { | ||||||
|   | |||||||
| @@ -18,6 +18,8 @@ extension CameraSession { | |||||||
|                       filePath: String, |                       filePath: String, | ||||||
|                       onVideoRecorded: @escaping (_ video: Video) -> Void, |                       onVideoRecorded: @escaping (_ video: Video) -> Void, | ||||||
|                       onError: @escaping (_ error: CameraError) -> Void) { |                       onError: @escaping (_ error: CameraError) -> Void) { | ||||||
|  |      | ||||||
|  |     lockCurrentExposure(for: captureSession) | ||||||
|     // Run on Camera Queue |     // Run on Camera Queue | ||||||
|     CameraQueues.cameraQueue.async { |     CameraQueues.cameraQueue.async { | ||||||
|       let start = DispatchTime.now() |       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)") | ||||||
|  |       } | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user