Камера X отменена другим запуском FocusAndMeteringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Камера X отменена другим запуском FocusAndMetering

Сообщение Anonymous »

Я реализую собственную камеру, используя библиотеку cameraX. Я работаю над фокусировкой и делаю следующие вещи

Код: Выделить всё

viewFinder.setOnTouchListener { v, event ->
return@setOnTouchListener when (event.action) {
MotionEvent.ACTION_DOWN -> {
true
}
MotionEvent.ACTION_UP -> {
// The below code is for focusing

val factory = SurfaceOrientedMeteringPointFactory(
viewFinder.width.toFloat(),
viewFinder.height.toFloat()
)
val point = factory.createPoint(event.x, event.y)
try {
val action = FocusMeteringAction.Builder(point, FocusMeteringAction.FLAG_AF)
.apply {
disableAutoCancel() //focus only when the user tap the preview
}.build()

val future = cameraControl?.startFocusAndMetering(action)
future?.addListener(Runnable {
--->line 66                 val result = future?.get()
println("log result ---> $result")
}, cameraExecutor)

} catch (e: CameraInfoUnavailableException) {
println("log error ---> $e")
}
true
}
else -> false // Unhandled event.
}
}
Теперь это кое-что, что сфокусировало точку, к которой я прикоснулся, и это не слишком точно, но это нормально. И при фокусировке после 5-6 раз приложение вылетало и закрывалось.

Код: Выделить всё

FATAL EXCEPTION: pool-2-thread-1
...
...
java.lang.Error: java.util.concurrent.ExecutionException: androidx.camera.core.CameraControl$OperationCanceledException: Cancelled by another startFocusAndMetering()
...
...
...MainActivity$onCreate$2$1.run(MainActivity.kt:66)
Я не понимаю, почему происходит сбой, и сбой происходит нечасто. Иногда происходит сбой, а иногда нет.
Редактировать 1: -
Я узнал, что когда я нажимаю фокус несколько раз, это происходит. Итак, перед началом фокусировки мне нужно очистить предыдущий фокус, если он выполняется. Но как очистить предыдущий фокус, я не понимаю.
Редактировать 2: -
Я попробовал этот cameraControl?.cancelFocusAndMetering(), я просто поместил его в первую строку блока try. но проблема все равно существует.

Подробнее здесь: https://stackoverflow.com/questions/647 ... ndmetering
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»