Проблема API камеры 2: физическая камера не работает через логический поток камеры, но открывается непосредственно на POAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема API камеры 2: физическая камера не работает через логический поток камеры, но открывается непосредственно на PO

Сообщение Anonymous »

Я обнаружил проблему API Camera2 в POCO X8 Pro (Android 16/HyperOS), связанную с открытием физических камер с логического многокамерного устройства.
Пример конфигурации камеры устройства

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

CameraManager.getCameraIdList()
возвращает:

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

["0", "1"]
Для логической камеры «0»:

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

CameraCharacteristics.getPhysicalCameraIds()
возвращает:

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

["2", "3"]
Ожидаемое поведение (согласно документации Android Camera2)
Поскольку идентификаторы физических камер «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)
Фактическое поведение на POCO X8 Pro
Сеанс создается успешно и вызывается CameraCaptureSession.StateCallback.onConfigured().
Однако сразу после этого вызывается CameraDevice.StateCallback.onError() с помощью:

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

ERROR_CAMERA_DEVICE
Камера закрывается.
Неожиданное поведение
Если физический идентификатор камеры «2» открывается напрямую:

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

cameraManager.openCamera("2", stateCallback, handler)
он работает правильно, даже несмотря на то, что «2» не возвращается функцией CameraManager.getCameraIdList().
Сводка проблемы
Это противоречит документации Android Camera2.
Если идентификатор физической камеры не указан в getCameraIdList(), он обычно должен быть доступен только через логическую камеру с использованием setPhysicalCameraId().
На POCO X8 Pro:
  • Официальный логический поток + setPhysicalCameraId() завершается сбоем с ERROR_CAMERA_DEVICE
  • Direct openCamera("2") работает
Запрос для сотрудников Xiaomi (если вы это видите)
Проверьте, является ли это проблемой метаданных камеры HAL/Camera2 на POCO X8 Pro, и должны ли идентификаторы физических камер либо:
  • быть включены в getCameraIdList(), если они открываются напрямую, либо
  • работать правильно через документированную логическую камеру + setPhysicalCameraId().
Ответить

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

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

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

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

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