Referencia de la estructura camera_info
#include <
camera_common.h
>
Campos de datos |
|
int | hacia |
int | orientación |
uint32_t | device_version |
const camera_metadata_t * | static_camera_characteristics |
int | resource_cost |
char ** | conflicting_devices |
size_t | conflicting_devices_length |
Descripción detallada
Definición en la línea 161 del archivo camera_common.h .
Documentación de campos
char** conflicting_devices |
Es un array de IDs de dispositivos de cámara representados como cadenas terminadas en NULL que indican otros dispositivos que no se pueden abrir de forma simultánea mientras se usa este dispositivo de cámara.
El propósito de este campo es indicar que este dispositivo de cámara es un compuesto de varios otros dispositivos de cámara o que tiene dependencias de hardware que prohíben el uso simultáneo. Si no hay dependencias, se puede mostrar un valor NULL en este campo para indicarlo.
El servicio de la cámara nunca abrirá simultáneamente ninguno de los dispositivos de esta lista mientras esté abierto este dispositivo.
El servicio de la cámara no limpiará las cadenas a las que se hace referencia en este campo, y deben permanecer mientras el dispositivo esté conectado.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 o versiones anteriores:
No es válido. Se puede suponer que es NULO. No leas este campo.
CAMERA_MODULE_API_VERSION_2_4 o una versión posterior:
Siempre es válido.
Definición en la línea 404 del archivo camera_common.h .
size_t conflicting_devices_length |
Es la longitud del array que se proporciona en el campo conflicting_devices.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 o versiones anteriores:
No es válido. Se puede suponer que es 0. No leas este campo.
CAMERA_MODULE_API_VERSION_2_4 o una versión posterior:
Siempre es válido.
Definición en la línea 419 del archivo camera_common.h .
uint32_t device_version |
Es el valor de camera_device_t.common.version.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
No es válido. Se puede suponer que es CAMERA_DEVICE_API_VERSION_1_0. No leas este campo.
CAMERA_MODULE_API_VERSION_2_0 o una versión posterior:
Siempre válida
Definición en la línea 219 del archivo camera_common.h .
Orientación de int |
Es la dirección hacia la que se orienta la cámara. Consulta system/core/include/system/camera.h para obtener definiciones de orientación de la cámara.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 o versiones anteriores:
Debe ser CAMERA_FACING_BACK o CAMERA_FACING_FRONT.
CAMERA_MODULE_API_VERSION_2_4 o una versión posterior:
Debe ser CAMERA_FACING_BACK, CAMERA_FACING_FRONT o CAMERA_FACING_EXTERNAL.
Definición en la línea 177 del archivo camera_common.h .
orientación de int |
Es la orientación de la imagen de la cámara. El valor es el ángulo en el que se debe rotar la imagen de la cámara en el sentido de las manecillas del reloj para que se muestre correctamente en la pantalla en su orientación natural. Debe ser 0, 90, 180 o 270.
Por ejemplo, supongamos que un dispositivo tiene una pantalla alta de forma natural. El sensor de la cámara posterior está montado en orientación horizontal. Estás mirando la pantalla. Si el lado superior del sensor de la cámara está alineado con el borde derecho de la pantalla en orientación natural, el valor debe ser 90. Si el lado superior de un sensor de cámara frontal está alineado con la derecha de la pantalla, el valor debe ser 270.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 o versiones anteriores:
Es válido en todas las versiones de camera_module .
CAMERA_MODULE_API_VERSION_2_4 o una versión posterior:
Es válido si la cámara está orientada hacia atrás (CAMERA_FACING_BACK) o hacia delante (CAMERA_FACING_FRONT), pero no si está orientada hacia afuera (CAMERA_FACING_EXTERNAL).
Definición en la línea 202 del archivo camera_common.h .
int resource_cost |
Es el "costo" total de recursos de usar esta cámara, representado como un valor entero en el rango [0, 100], donde 100 representa el uso total del recurso compartido que es el cuello de botella limitante del subsistema de la cámara. Esta puede ser una estimación muy aproximada y se usa como una sugerencia para el servicio de la cámara para determinar cuándo no permitir que varias aplicaciones abran simultáneamente diferentes cámaras que anuncia el servicio de la cámara.
El servicio de la cámara debe poder abrir y usar de forma simultánea cualquier combinación de dispositivos de cámara que exponga el HAL, en la que la suma de los costos de recursos de estas cámaras sea inferior o igual a 100. Para determinar el costo, se debe suponer que cada dispositivo de la cámara está configurado y funciona con la configuración de velocidad de fotogramas y tamaño de transmisión que consume más recursos disponibles en la configuración expuesta para ese dispositivo a través de los metadatos de la cámara.
Es posible que el servicio de la cámara intente abrir de forma simultánea combinaciones de dispositivos de cámara con un costo total de recursos superior a 100. Esto puede tener éxito o fallar. Si se realiza correctamente, las combinaciones de parámetros de configuración que no se admiten debido a las restricciones de recursos de tener varios dispositivos abiertos deberían fallar durante las llamadas de configuración. Si el costo total de recursos es inferior o igual a 100, la apertura y configuración nunca deben fallar para ningún parámetro de configuración de transmisión ni para otras funciones del dispositivo que normalmente se realizan correctamente cuando es el único dispositivo de cámara abierto.
Este campo se usará para determinar si las aplicaciones en segundo plano pueden usar este dispositivo de cámara mientras otras aplicaciones usan otros dispositivos de cámara. Nota: El servicio de la cámara nunca permitirá que varias aplicaciones abran simultáneamente el mismo dispositivo de cámara.
Ejemplos de casos de uso:
P. ej.: 1: Dispositivo de cámara 0 = Cámara posterior Dispositivo de cámara 1 = Cámara frontal
- El uso de ambos dispositivos de cámara causa una gran ralentización de la velocidad de fotogramas debido al ancho de banda limitado del ISP.
Configuración:
Dispositivo de cámara 0: resource_cost = 51 conflicting_devices = nulo Dispositivo de cámara 1: resource_cost = 51 conflicting_devices = nulo
Resultado:
Dado que la suma de los costos de recursos es superior a 100, si una aplicación de prioridad más alta tiene abierto cualquiera de los dispositivos, el servicio de la cámara no permitirá que ninguna aplicación de prioridad más baja abra ninguno de los dispositivos. Si una aplicación de prioridad inferior usa un dispositivo que una aplicación de prioridad superior intenta abrir posteriormente, la aplicación de prioridad inferior se verá obligada a desconectar el dispositivo.
Si la aplicación de mayor prioridad lo elige, es posible que intente abrir ambos dispositivos (ya que estos no aparecen como dispositivos en conflicto en los campos conflicting_devices), pero el uso de estos dispositivos puede fallar en las llamadas de apertura o configuración.
P. ej.: 2: Dispositivo de cámara 0 = Cámara posterior izquierda Dispositivo de cámara 1 = Cámara posterior derecha Dispositivo de cámara 2 = Cámara estéreo combinada que usa los sensores de cámara posterior derecha e izquierda que usan los dispositivos 0 y 1 Dispositivo de cámara 3 = Cámara frontal
- Debido a limitaciones de hardware, se pueden abrir hasta dos cámaras a la vez. Es posible que la cámara estéreo combinada nunca se use al mismo tiempo que cualquiera de los dos dispositivos de cámara trasera (dispositivos 0 y 1) y, por lo general, requiere demasiado ancho de banda para usarse al mismo tiempo que la cámara frontal (dispositivo 3).
Configuración:
Dispositivo de cámara 0: resource_cost = 50 conflicting_devices = { 2 } Dispositivo de cámara 1: resource_cost = 50 conflicting_devices = { 2 } Dispositivo de cámara 2: resource_cost = 100 conflicting_devices = { 0, 1 } Dispositivo de cámara 3: resource_cost = 50 conflicting_devices = null
Resultado:
En función de los campos conflicting_devices, el servicio de la cámara garantiza que nunca se permitirán los siguientes conjuntos de dispositivos abiertos: { 1, 2 }, { 0, 2 }.
Según los campos resource_cost, si una aplicación en primer plano de alta prioridad usa el dispositivo de cámara 0, una aplicación en segundo plano podría abrir el dispositivo de cámara 1 o 3 (pero se vería obligada a desconectarlo nuevamente si la aplicación en primer plano abriera otro dispositivo).
Es posible que la aplicación de prioridad más alta intente abrir los dispositivos 0, 2 y 3 de forma simultánea, pero es posible que el sistema HAL falle en las llamadas de apertura o configuración para esta combinación.
P. ej.: 3: Dispositivo de cámara 0 = Cámara posterior Dispositivo de cámara 1 = Cámara frontal Dispositivo de cámara 2 = Cámara frontal de bajo consumo que usa el mismo sensor que el dispositivo 1, pero solo expone las resoluciones de flujo de imágenes que se pueden usar en el modo de bajo consumo
-
Es imposible usar ambas cámaras frontales (dispositivos 1 y 2) al mismo tiempo debido a un sensor físico compartido. Es posible que el uso de la cámara posterior y la cámara frontal "de alta potencia" (dispositivo 1) sea imposible para algunas configuraciones de transmisión debido a limitaciones de hardware, pero la opción de cámara frontal "de baja potencia" siempre se puede usar, ya que tiene hardware dedicado especial.
Configuración:
Dispositivo de cámara 0: resource_cost = 100 conflicting_devices = nulo Dispositivo de cámara 1: resource_cost = 100 conflicting_devices = { 2 } Dispositivo de cámara 2: resource_cost = 0 conflicting_devices = { 1 } Resultado:
En función de los campos conflicting_devices, el servicio de la cámara garantiza que nunca se permitirán los siguientes conjuntos de dispositivos abiertos: { 1, 2 }.
Según los campos resource_cost, solo la aplicación con la prioridad más alta puede intentar abrir los dispositivos 0 y 1 al mismo tiempo. Si una aplicación de prioridad más alta no usa el dispositivo 1 o 2, es posible que una aplicación en segundo plano de prioridad baja abra el dispositivo 2 (pero se verá obligada a desconectarlo si una aplicación de prioridad más alta abre el dispositivo 1 o 2 posteriormente).
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 o versiones anteriores:
No es válido. Se puede suponer que es 100. No leas este campo.
CAMERA_MODULE_API_VERSION_2_4 o una versión posterior:
Siempre es válido.
Definición en la línea 376 del archivo camera_common.h .
const camera_metadata_t * static_camera_characteristics |
Las características fijas de la cámara, que incluyen todos los metadatos estáticos de la cámara especificados en system/media/camera/docs/docs.html Debe ser un búfer de metadatos ordenado y el llamador no puede modificarlo ni liberarlo. El puntero debe permanecer válido durante el ciclo de vida del módulo de la cámara, y los valores que contiene no pueden cambiar después de que get_camera_info() lo devuelva.
Información de la versión (según camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
No es válido. Las características adicionales no están disponibles. No leas este campo.
CAMERA_MODULE_API_VERSION_2_0 o una versión posterior:
Es válido si device_version >= CAMERA_DEVICE_API_VERSION_2_0. De lo contrario, no lo leas.
Definición en la línea 241 del archivo camera_common.h .
La documentación de esta struct se generó a partir del siguiente archivo:
- hardware/libhardware/include/hardware/ camera_common.h