Referência de estrutura camera_info
#include < camera_common.h >
Campos de dados | |
interno | voltado para |
interno | orientação |
uint32_t | versão_do_dispositivo |
const camera_metadata_t * | características_de_câmera_estática |
interno | custo_recurso |
Caracteres ** | dispositivos_conflitantes |
tamanho_t | comprimento_de_dispositivos_conflitantes |
Descrição detalhada
Definição na linha 161 do arquivo camera_common.h .
Documentação de campo
char** dispositivos_conflitantes |
Uma matriz de IDs de dispositivos de câmera representados como strings terminadas em NULL indicando outros dispositivos que não podem ser abertos simultaneamente enquanto este dispositivo de câmera estiver em uso.
Este campo destina-se a ser usado para indicar que este dispositivo de câmera é uma composição de vários outros dispositivos de câmera ou possui dependências de hardware que proíbem o uso simultâneo. Se não houver dependências, um NULL poderá ser retornado neste campo para indicar isso.
O serviço de câmera nunca abrirá simultaneamente nenhum dos dispositivos desta lista enquanto este dispositivo de câmera estiver aberto.
As strings apontadas neste campo não serão limpas pelo serviço de câmera e deverão permanecer enquanto este dispositivo estiver conectado.
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 ou inferior:
Inválido. Pode ser assumido como NULL. Não leia este campo.
CAMERA_MODULE_API_VERSION_2_4 ou superior:
Sempre válido.
Definição na linha 404 do arquivo camera_common.h .
tamanho_t dispositivos_conflitantes_comprimento |
O comprimento da matriz fornecida no campo conflitantes_devices.
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 ou inferior:
Inválido. Pode ser assumido como 0. Não leia este campo.
CAMERA_MODULE_API_VERSION_2_4 ou superior:
Sempre válido.
Definição na linha 419 do arquivo camera_common.h .
uint32_t dispositivo_versão |
O valor de camera_device_t.common.version.
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
Inválido. Pode ser considerado CAMERA_DEVICE_API_VERSION_1_0. Não leia este campo.
CAMERA_MODULE_API_VERSION_2_0 ou superior:
Sempre válido
Definição na linha 219 do arquivo camera_common.h .
face interna |
A direção para a qual a câmera está voltada. Consulte system/core/include/system/camera.h para obter definições voltadas para a câmera.
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 ou inferior:
Deve ser CAMERA_FACING_BACK ou CAMERA_FACING_FRONT.
CAMERA_MODULE_API_VERSION_2_4 ou superior:
Deve ser CAMERA_FACING_BACK, CAMERA_FACING_FRONT ou CAMERA_FACING_EXTERNAL.
Definição na linha 177 do arquivo camera_common.h .
orientação interna |
A orientação da imagem da câmera. O valor é o ângulo que a imagem da câmera precisa ser girada no sentido horário para que seja exibida corretamente na tela em sua orientação natural. Deve ser 0, 90, 180 ou 270.
Por exemplo, suponha que um dispositivo tenha uma tela naturalmente alta. O sensor da câmera traseira é montado na paisagem. Você está olhando para a tela. Se a parte superior do sensor da câmera estiver alinhada com a borda direita da tela na orientação natural, o valor deverá ser 90. Se a parte superior do sensor da câmera frontal estiver alinhada com a direita da tela, o valor deverá ser ser 270.
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 ou inferior:
Válido em todas as versões do camera_module .
CAMERA_MODULE_API_VERSION_2_4 ou superior:
Válido se a orientação da câmera for CAMERA_FACING_BACK ou CAMERA_FACING_FRONT, não é válido se a orientação da câmera for CAMERA_FACING_EXTERNAL.
Definição na linha 202 do arquivo camera_common.h .
custo_de_recurso interno |
O "custo" total do recurso de utilização desta câmera, representado como um valor inteiro no intervalo [0, 100], onde 100 representa o uso total do recurso compartilhado que é o gargalo limitante do subsistema de câmera. Esta pode ser uma estimativa muito aproximada e é usada como uma dica para o serviço de câmera determinar quando impedir que vários aplicativos abram simultaneamente diferentes câmeras anunciadas pelo serviço de câmera.
O serviço de câmera deve ser capaz de abrir e usar simultaneamente qualquer combinação de dispositivos de câmera expostos pelo HAL onde a soma dos custos de recursos dessas câmeras for <= 100. Para determinar o custo, cada dispositivo de câmera deve ser considerado configurado e operando nas configurações de taxa de quadros e tamanho de fluxo que consomem recursos máximos, disponíveis nas definições de configuração expostas para esse dispositivo por meio dos metadados da câmera.
O serviço de câmera ainda pode tentar abrir simultaneamente combinações de dispositivos de câmera com um custo total de recursos > 100. Isso pode ter êxito ou falhar. Se isso for bem-sucedido, as combinações de configurações que não são suportadas devido a restrições de recursos decorrentes de vários dispositivos abertos deverão falhar durante as chamadas de configuração. Se o custo total do recurso for <= 100, a abertura e a configuração nunca deverão falhar para quaisquer definições de configuração de fluxo ou outros recursos do dispositivo que normalmente seriam bem-sucedidos para um dispositivo quando ele é o único dispositivo de câmera aberto.
Este campo será usado para determinar se aplicativos em segundo plano têm permissão para usar este dispositivo de câmera enquanto outros aplicativos usam outros dispositivos de câmera. Observação: o serviço de câmera nunca permitirá que vários aplicativos abram simultaneamente o mesmo dispositivo de câmera.
Exemplos de casos de uso:
Ex. 1: Dispositivo de câmera 0 = Câmera traseira Dispositivo de câmera 1 = Câmera frontal
- O uso de ambos os dispositivos de câmera causa uma grande lentidão na taxa de quadros devido à largura de banda limitada do ISP.
Configuração:
Dispositivo de câmera 0 - cost_recurso = 51 dispositivos_conflitantes = nulo Dispositivo de câmera 1 - cost_recurso = 51 dispositivos_conflitantes = nulo
Resultado:
Como a soma dos custos de recursos é > 100, se um aplicativo de prioridade mais alta tiver um dos dispositivos aberto, o serviço de câmera não permitirá que aplicativos de prioridade mais baixa abram nenhum dos dispositivos. Se um aplicativo de prioridade mais baixa estiver usando um dispositivo que um aplicativo de prioridade mais alta tentará abrir posteriormente, o aplicativo de prioridade mais baixa será forçado a desconectar o dispositivo.
Se o aplicativo de maior prioridade escolher, ele ainda poderá tentar abrir ambos os dispositivos (uma vez que esses dispositivos não estão listados como conflitantes nos campos conflitantes_devices), mas o uso desses dispositivos poderá falhar nas chamadas abertas ou configuradas.
Ex. 2: Dispositivo de câmera 0 = Câmera traseira esquerda Dispositivo de câmera 1 = Câmera traseira direita Dispositivo de câmera 2 = Câmera estéreo combinada usando sensores de câmera traseira direita e esquerda usados pelos dispositivos 0 e 1 Dispositivo de câmera 3 = Câmera frontal
- Devido a restrições de hardware, até duas câmeras podem ser abertas ao mesmo tempo. A câmera estéreo combinada nunca pode ser usada ao mesmo tempo que qualquer um dos dois dispositivos de câmera traseira (dispositivo 0, 1) e normalmente requer muita largura de banda para ser usada ao mesmo tempo que a câmera frontal (dispositivo 3).
Configuração:
Dispositivo de câmera 0 - resource_cost = 50 conflitantes_devices = { 2 } Dispositivo de câmera 1 - resource_cost = 50 conflitantes_devices = { 2 } Dispositivo de câmera 2 - resource_cost = 100 conflitantes_devices = { 0, 1 } Dispositivo de câmera 3 - resource_cost = 50 conflitantes_devices = nulo
Resultado:
Com base nos campos conflitantes_devices, o serviço de câmera garante que os seguintes conjuntos de dispositivos abertos nunca serão permitidos: { 1, 2 }, { 0, 2 }.
Com base nos campos resource_cost, se um aplicativo em primeiro plano de alta prioridade estiver usando o dispositivo de câmera 0, um aplicativo em segundo plano teria permissão para abrir o dispositivo de câmera 1 ou 3 (mas seria forçado a desconectá-lo novamente se o aplicativo em primeiro plano abrisse outro dispositivo).
A aplicação de prioridade mais alta ainda pode tentar abrir simultaneamente os dispositivos 0, 2 e 3, mas o HAL pode falhar ao abrir ou configurar chamadas para esta combinação.
Ex. 3: Dispositivo de câmera 0 = Câmera traseira Dispositivo de câmera 1 = Câmera frontal Dispositivo de câmera 2 = Câmera frontal de baixo consumo de energia que usa o mesmo sensor do dispositivo 1, mas expõe apenas resoluções de fluxo de imagem que podem ser usadas no modo de baixo consumo de energia
Usar as duas câmeras frontais (dispositivo 1, 2) ao mesmo tempo é impossível devido a um sensor físico compartilhado. Usar a câmera traseira e frontal de "alta potência" (dispositivo 1) pode ser impossível para algumas configurações de stream devido a limitações de hardware, mas a opção de câmera frontal de "baixa potência" sempre pode ser usada, pois possui hardware especial dedicado.
Configuração:
Dispositivo de câmera 0 - cost_recurso = 100 dispositivos_conflitantes = nulo Dispositivo de câmera 1 - cost_recurso = 100 dispositivos_conflitantes = { 2 } Dispositivo de câmera 2 - custo_de_recurso = 0 dispositivos_conflitantes = { 1 } Resultado:
Com base nos campos conflitantes_devices, o serviço de câmera garante que os seguintes conjuntos de dispositivos abertos nunca serão permitidos: { 1, 2 }.
Com base nos campos resource_cost, apenas o aplicativo de prioridade mais alta pode tentar abrir os dispositivos 0 e 1 ao mesmo tempo. Se um aplicativo de prioridade mais alta não estiver usando o dispositivo 1 ou 2, um aplicativo em segundo plano de baixa prioridade poderá abrir o dispositivo 2 (mas será forçado a desconectá-lo se um aplicativo de prioridade mais alta abrir posteriormente o dispositivo 1 ou 2).
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 ou inferior:
Inválido. Pode ser assumido como 100. Não leia este campo.
CAMERA_MODULE_API_VERSION_2_4 ou superior:
Sempre válido.
Definição na linha 376 do arquivo camera_common.h .
const camera_metadata_t * static_camera_characteristics |
As características fixas da câmera, que incluem todos os metadados estáticos da câmera especificados em system/media/camera/docs/docs.html. Este deve ser um buffer de metadados classificado e não pode ser modificado ou liberado pelo chamador. O ponteiro deve permanecer válido durante a vida útil do módulo da câmera e os valores nele contidos não podem mudar após ser retornado por get_camera_info().
Informações de versão (com base em camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
Inválido. Características extras não estão disponíveis. Não leia este campo.
CAMERA_MODULE_API_VERSION_2_0 ou superior:
Válido se device_version >= CAMERA_DEVICE_API_VERSION_2_0. Não leia de outra forma.
Definição na linha 241 do arquivo camera_common.h .
A documentação desta estrutura foi gerada a partir do seguinte arquivo:
- hardware/libhardware/include/hardware/ camera_common.h