diff --git a/encoder/src/main/java/com/pedro/encoder/input/sources/video/Camera2Source.kt b/encoder/src/main/java/com/pedro/encoder/input/sources/video/Camera2Source.kt index bb1baf755..3c71c9ec2 100644 --- a/encoder/src/main/java/com/pedro/encoder/input/sources/video/Camera2Source.kt +++ b/encoder/src/main/java/com/pedro/encoder/input/sources/video/Camera2Source.kt @@ -269,4 +269,8 @@ class Camera2Source(context: Context): VideoSource() { size?.let { checkResolutionSupported(it.width, it.height) } camera.setRequiredResolution(size) } + + fun lockExposure(enabled: Boolean) = camera.lockExposure(enabled) + + fun isLockExposureEnabled() = camera.isLockExposureEnabled() } \ No newline at end of file diff --git a/encoder/src/main/java/com/pedro/encoder/input/video/Camera2ApiManager.kt b/encoder/src/main/java/com/pedro/encoder/input/video/Camera2ApiManager.kt index 03c5f9374..bc454f6da 100644 --- a/encoder/src/main/java/com/pedro/encoder/input/video/Camera2ApiManager.kt +++ b/encoder/src/main/java/com/pedro/encoder/input/video/Camera2ApiManager.kt @@ -95,6 +95,8 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() { private set var isAutoWhiteBalanceEnabled: Boolean = true private set + var lockExposureEnabled: Boolean = false + private set var isRunning: Boolean = false private set private var fps = 30 @@ -315,6 +317,17 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() { } } + fun lockExposure(enabled: Boolean): Boolean { + val builderInputSurface = this.builderInputSurface ?: return false + builderInputSurface.set(CaptureRequest.CONTROL_AE_LOCK, enabled) + if (applyRequest(builderInputSurface)) { + lockExposureEnabled = enabled + return true + } else return false + } + + fun isLockExposureEnabled() = lockExposureEnabled + /** * @param mode value from CameraCharacteristics.CONTROL_AWB_MODE_* */