Пример конфигурации камеры устройства
Код: Выделить всё
CameraManager.getCameraIdList()Код: Выделить всё
["0", "1"]
Код: Выделить всё
CameraCharacteristics.getPhysicalCameraIds()
Код: Выделить всё
["2", "3"]
Поскольку идентификаторы физических камер «2» и «3» не возвращаются функцией CameraManager.getCameraIdList(), их следует использовать только как часть логической камеры «0».
Правильное использование должно быть:
Код: Выделить всё
cameraManager.openCamera("0", stateCallback, handler)
Код: Выделить всё
val outputs = mutableListOf()
outputs.add(
OutputConfiguration(previewSurface).apply {
setPhysicalCameraId("2")
}
)
val config = SessionConfiguration(
SessionConfiguration.SESSION_REGULAR,
outputs,
executor,
stateCallback
)
cameraDevice.createCaptureSession(config)
Сеанс создается успешно и вызывается CameraCaptureSession.StateCallback.onConfigured().
Однако сразу после этого вызывается CameraDevice.StateCallback.onError() с помощью:
Код: Выделить всё
ERROR_CAMERA_DEVICE
Неожиданное поведение
Если физический идентификатор камеры «2» открывается напрямую:
Код: Выделить всё
cameraManager.openCamera("2", stateCallback, handler)
Сводка проблемы
Это противоречит документации Android Camera2.
Если идентификатор физической камеры не указан в getCameraIdList(), он обычно должен быть доступен только через логическую камеру с использованием setPhysicalCameraId().
На POCO X8 Pro:
- Официальный логический поток + setPhysicalCameraId() завершается сбоем с ERROR_CAMERA_DEVICE
- Direct openCamera("2") работает
Проверьте, является ли это проблемой метаданных камеры HAL/Camera2 на POCO X8 Pro, и должны ли идентификаторы физических камер либо:
- быть включены в getCameraIdList(), если они открываются напрямую, либо
- работать правильно через документированную логическую камеру + setPhysicalCameraId().
Мобильная версия