Skip to content

Commit daaeae0

Browse files
committed
add minimal fix and refactor get rect
1 parent 06ff113 commit daaeae0

1 file changed

Lines changed: 26 additions & 36 deletions

File tree

encoder/src/main/java/com/pedro/encoder/input/video/Camera2ApiManager.kt

Lines changed: 26 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -512,8 +512,10 @@ class Camera2ApiManager(context: Context) {
512512
fun enableWhiteBalanceLock(): Boolean {
513513
val characteristics = cameraCharacteristics ?: return false
514514
val builderInputSurface = this.builderInputSurface ?: return false
515-
val available = characteristics.secureGet(CameraCharacteristics.CONTROL_AWB_LOCK_AVAILABLE) ?: return false
516-
if (!available) return false
515+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
516+
val available = characteristics.secureGet(CameraCharacteristics.CONTROL_AWB_LOCK_AVAILABLE) ?: return false
517+
if (!available) return false
518+
}
517519
builderInputSurface.set(CaptureRequest.CONTROL_AWB_LOCK, true)
518520
isWhiteBalanceLockEnabled = applyRequest(builderInputSurface)
519521
return isWhiteBalanceLockEnabled
@@ -603,24 +605,30 @@ class Camera2ApiManager(context: Context) {
603605
return supportedExposure
604606
}
605607

606-
fun tapToFocus(view: View, event: MotionEvent): Boolean {
607-
val builderInputSurface = this.builderInputSurface ?: return false
608-
val characteristics = cameraCharacteristics ?: return false
609-
val session = cameraCaptureSession ?: return false
610-
if (characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF) == 0) return false
611-
val focusTag = "focus"
612-
val sensorArraySize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE) ?: return false
608+
private fun getTapRect(view: View, event: MotionEvent): MeteringRectangle? {
609+
val characteristics = cameraCharacteristics ?: return null
610+
val sensorArraySize = characteristics.secureGet(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE) ?: return null
611+
613612
val x = event.x
614613
val y = event.y
615614
val focusX = (x / view.width.toFloat()) * sensorArraySize.width()
616615
val focusY = (y / view.height.toFloat()) * sensorArraySize.height()
617-
val focusRect = MeteringRectangle(
616+
return MeteringRectangle(
618617
(focusX - 100).toInt().coerceIn(0, sensorArraySize.width()),
619618
(focusY - 100).toInt().coerceIn(0, sensorArraySize.height()),
620619
(100 * 2).coerceIn(0, sensorArraySize.width()),
621620
(100 * 2).coerceIn(0, sensorArraySize.height()),
622621
MeteringRectangle.METERING_WEIGHT_MAX
623622
)
623+
}
624+
625+
fun tapToFocus(view: View, event: MotionEvent): Boolean {
626+
val builderInputSurface = this.builderInputSurface ?: return false
627+
val session = cameraCaptureSession ?: return false
628+
val characteristics = cameraCharacteristics ?: return false
629+
if ((characteristics.secureGet(CameraCharacteristics.CONTROL_MAX_REGIONS_AF) ?: 0) == 0) return false
630+
val focusRect = getTapRect(view, event) ?: return false
631+
val focusTag = "focus"
624632

625633
val captureCallbackHandler: CameraCaptureSession.CaptureCallback =
626634
object : CameraCaptureSession.CaptureCallback() {
@@ -663,21 +671,11 @@ class Camera2ApiManager(context: Context) {
663671
* @return true if successful, false otherwise
664672
*/
665673
fun tapToMeterExposure(view: View, event: MotionEvent): Boolean {
674+
if (isExposureLockEnabled) return false
666675
val builderInputSurface = this.builderInputSurface ?: return false
667676
val characteristics = cameraCharacteristics ?: return false
668-
if (characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AE) == 0) return false
669-
670-
val sensorArraySize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE) ?: return false
671-
val regionX = (event.x / view.width.toFloat()) * sensorArraySize.width()
672-
val regionY = (event.y / view.height.toFloat()) * sensorArraySize.height()
673-
674-
val aeRect = MeteringRectangle(
675-
(regionX - 100).toInt().coerceIn(0, sensorArraySize.width()),
676-
(regionY - 100).toInt().coerceIn(0, sensorArraySize.height()),
677-
(100 * 2).coerceIn(0, sensorArraySize.width()),
678-
(100 * 2).coerceIn(0, sensorArraySize.height()),
679-
MeteringRectangle.METERING_WEIGHT_MAX
680-
)
677+
if ((characteristics.secureGet(CameraCharacteristics.CONTROL_MAX_REGIONS_AE) ?: 0) == 0) return false
678+
val aeRect = getTapRect(view, event) ?: return false
681679

682680
return try {
683681
builderInputSurface.set(CaptureRequest.CONTROL_AE_REGIONS, arrayOf(aeRect))
@@ -698,21 +696,11 @@ class Camera2ApiManager(context: Context) {
698696
* @return true if successful, false otherwise
699697
*/
700698
fun tapToMeterWhiteBalance(view: View, event: MotionEvent): Boolean {
699+
if (isWhiteBalanceLockEnabled) return false
701700
val builderInputSurface = this.builderInputSurface ?: return false
702701
val characteristics = cameraCharacteristics ?: return false
703-
if (characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AWB) == 0) return false
704-
705-
val sensorArraySize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE) ?: return false
706-
val regionX = (event.x / view.width.toFloat()) * sensorArraySize.width()
707-
val regionY = (event.y / view.height.toFloat()) * sensorArraySize.height()
708-
709-
val awbRect = MeteringRectangle(
710-
(regionX - 100).toInt().coerceIn(0, sensorArraySize.width()),
711-
(regionY - 100).toInt().coerceIn(0, sensorArraySize.height()),
712-
(100 * 2).coerceIn(0, sensorArraySize.width()),
713-
(100 * 2).coerceIn(0, sensorArraySize.height()),
714-
MeteringRectangle.METERING_WEIGHT_MAX
715-
)
702+
if ((characteristics.secureGet(CameraCharacteristics.CONTROL_MAX_REGIONS_AWB) ?: 0) == 0) return false
703+
val awbRect = getTapRect(view, event) ?: return false
716704

717705
return try {
718706
builderInputSurface.set(CaptureRequest.CONTROL_AWB_REGIONS, arrayOf(awbRect))
@@ -1065,6 +1053,8 @@ class Camera2ApiManager(context: Context) {
10651053

10661054
@JvmOverloads
10671055
fun closeCamera(resetSurface: Boolean = true) {
1056+
isExposureLockEnabled = false
1057+
isWhiteBalanceLockEnabled = false
10681058
isLanternEnabled = false
10691059
zoomLevel = 1.0f
10701060
cameraCaptureSession?.close()

0 commit comments

Comments
 (0)