Referência da estrutura camera_info

Referência da estrutura camera_info

#include < camera_common.h >

Campos de dados

int  enfrentando
 
int  orientação
 
uint32_t  device_version
 
const camera_metadata_t static_camera_characteristics
 
int  resource_cost
 
char **  conflicting_devices
 
size_t  conflicting_devices_length
 

Descrição detalhada

Definição na linha 161 do arquivo camera_common.h .

Documentação do campo

char** conflicting_devices

Uma matriz de IDs de dispositivos de câmera representados como strings terminadas em NULL que indicam outros dispositivos que não podem ser abertos simultaneamente enquanto esse dispositivo de câmera está em uso.

Esse campo é usado para indicar que o dispositivo da câmera é uma combinação de vários outros dispositivos ou tem dependências de hardware que proíbem o uso simultâneo. Se não houver dependências, um valor NULL poderá ser retornado neste campo para indicar isso.

O serviço de câmera nunca vai abrir simultaneamente qualquer um dos dispositivos da lista enquanto esse dispositivo de câmera estiver aberto.

As strings apontadas neste campo não serão limpas pelo serviço da câmera e precisam permanecer enquanto o dispositivo estiver conectado.

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ou anterior:

Inválido. Pode ser considerado NULL. Não leia este campo.

CAMERA_MODULE_API_VERSION_2_4 ou mais recente:

Sempre válido.

Definição na linha 404 do arquivo camera_common.h .

size_t conflicting_devices_length

O comprimento da matriz informada no campo conflicting_devices.

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ou anterior:

Inválido. Pode ser considerado 0. Não leia este campo.

CAMERA_MODULE_API_VERSION_2_4 ou mais recente:

Sempre válido.

Definição na linha 419 do arquivo camera_common.h .

uint32_t device_version

O valor de camera_device_t.common.version.

Informações da 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 mais recente:

Sempre válido

Definição na linha 219 do arquivo camera_common.h .

int facing

A direção para onde a câmera está apontada. Consulte system/core/include/system/camera.h para ver as definições de câmera frontal.

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ou anterior:

Ele precisa ser CAMERA_FACING_BACK ou CAMERA_FACING_FRONT.

CAMERA_MODULE_API_VERSION_2_4 ou mais recente:

Ele precisa ser CAMERA_FACING_BACK, CAMERA_FACING_FRONT ou CAMERA_FACING_EXTERNAL.

Definição na linha 177 do arquivo camera_common.h .

int orientation

A orientação da imagem da câmera. O valor é o ângulo em que a imagem da câmera precisa ser girada no sentido horário para aparecer corretamente na tela na orientação natural. Ele precisa ser 0, 90, 180 ou 270.

Por exemplo, suponha que um dispositivo tenha uma tela naturalmente alta. O sensor da câmera traseira está montado na orientação paisagem. Você está olhando para a tela. Se o lado de cima do sensor da câmera estiver alinhado com a borda direita da tela na orientação natural, o valor será 90. Se o lado de cima de um sensor de câmera frontal estiver alinhado com a direita da tela, o valor será 270.

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ou anterior:

Válido em todas as camera_module versões.

CAMERA_MODULE_API_VERSION_2_4 ou mais recente:

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 .

int resource_cost

O "custo" total de recursos do uso dessa câmera, representado como um valor inteiro no intervalo [0, 100], em que 100 representa o uso total do recurso compartilhado que é o gargalo limitante do subsistema da câmera. Essa 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 câmeras diferentes anunciadas pelo serviço.

O serviço de câmera precisa abrir e usar simultaneamente qualquer combinação de dispositivos de câmera expostos pelo HAL em que a soma dos custos de recursos dessas câmeras seja <= 100. Para determinar o custo, cada dispositivo de câmera precisa ser configurado e operar com a taxa de quadros e o tamanho de stream que consomem recursos ao máximo disponíveis nas configurações de configuração expostas para esse dispositivo nos metadados da câmera.

O serviço de câmera ainda pode tentar abrir combinações de dispositivos de câmera simultaneamente com um custo de recurso total de > 100. Isso pode ser bem-sucedido ou não. Se isso for bem-sucedido, as combinações de configurações que não têm suporte devido a restrições de recursos de vários dispositivos abertos vão falhar durante as chamadas de configuração. Se o custo total de recursos for <= 100, o recurso "abrir e configurar" nunca vai falhar em nenhuma configuração de streaming ou outros recursos que normalmente seriam bem-sucedidos quando o dispositivo de câmera é o único aberto.

Esse campo será usado para determinar se os aplicativos em segundo plano têm permissão para usar esse dispositivo de câmera enquanto outros aplicativos estão usando outros dispositivos de câmera. Observação: o serviço de câmera nunca permitirá que vários aplicativos abram o mesmo dispositivo de câmera simultaneamente.

Exemplos de casos de uso:

Exemplo: 1: Camera Device 0 = Back Camera Camera Device 1 = Front Camera

  • O uso de ambos os dispositivos de câmera causa uma grande redução na taxa de quadros devido à largura de banda limitada do ISP.

Configuração:

Dispositivo da câmera 0: resource_cost = 51 conflicting_devices = null Dispositivo da câmera 1: resource_cost = 51 conflicting_devices = null

Resultado:

Como a soma dos custos de recursos é maior que 100, se um aplicativo de prioridade mais alta tiver um dos dispositivos abertos, nenhum aplicativo de prioridade mais baixa poderá ser aberto pelo serviço de câmera. Se um aplicativo de prioridade mais baixa estiver usando um dispositivo que um aplicativo de prioridade mais alta tentar abrir, 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 os dois dispositivos (já que eles não estão listados como conflitantes nos campos conflicting_devices), mas o uso desses dispositivos pode falhar nas chamadas de abertura ou configuração.

Exemplo: 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 os sensores da 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 conflicting_devices = { 2 } Dispositivo de câmera 1: resource_cost = 50 conflicting_devices = { 2 } Dispositivo de câmera 2: resource_cost = 100 conflicting_devices = { 0, 1 } Dispositivo de câmera 3: resource_cost = 50 conflicting_devices = null

Resultado:

Com base nos campos conflicting_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 app em primeiro plano de alta prioridade estiver usando o dispositivo de câmera 0, um app em segundo plano poderá abrir o dispositivo de câmera 1 ou 3, mas será forçado a desconectá-lo novamente se o app em primeiro plano abrir outro dispositivo.

O aplicativo de maior prioridade ainda pode tentar abrir os dispositivos 0, 2 e 3 simultaneamente, mas o HAL pode falhar na abertura ou configuração de chamadas para essa combinação.

Exemplo: 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 só expõe resoluções de fluxo de imagens que podem ser usadas no modo de baixo consumo de energia

  • É impossível usar as duas câmeras frontais (dispositivo 1, 2) ao mesmo tempo devido a um sensor físico compartilhado. O uso da câmera traseira e da câmera frontal "de alta potência" (dispositivo 1) pode ser impossível para algumas configurações de transmissão devido a limitações de hardware, mas a opção de câmera frontal "de baixa potência" pode ser usada sempre, já que tem hardware dedicado especial.

    Configuração:

    Dispositivo de câmera 0: resource_cost = 100 conflicting_devices = null Dispositivo de câmera 1: resource_cost = 100 conflicting_devices = { 2 } Dispositivo de câmera 2: resource_cost = 0 conflicting_devices = { 1 } Resultado:

    Com base nos campos conflicting_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 maior prioridade pode tentar abrir os dispositivos 0 e 1 ao mesmo tempo. Se um aplicativo de maior prioridade não estiver usando o dispositivo 1 ou 2, um app em segundo plano de baixa prioridade poderá abrir o dispositivo 2, mas será forçado a se desconectar se um aplicativo de maior prioridade abrir o dispositivo 1 ou 2 em seguida.

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ou anterior:

Inválido. Pode ser considerado 100. Não leia este campo.

CAMERA_MODULE_API_VERSION_2_4 ou mais recente:

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 especificados em system/media/camera/docs/docs.html. Ele precisa ser um buffer de metadados classificado e não pode ser modificado ou liberado pelo autor da chamada. O ponteiro precisa permanecer válido durante a vida útil do módulo da câmera, e os valores nele não podem mudar depois de ser retornado por get_camera_info().

Informações da versão (com base em camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_1_0:

Inválido. As características extras não estão disponíveis. Não leia este campo.

CAMERA_MODULE_API_VERSION_2_0 ou mais recente:

Válido se device_version for maior ou igual a CAMERA_DEVICE_API_VERSION_2_0. Caso contrário, não leia.

Definição na linha 241 do arquivo camera_common.h .


A documentação desse struct foi gerada com base no seguinte arquivo: