Parâmetros de sessão

O recurso de parâmetros de sessão reduz os atrasos ao permitir que os clientes da câmera configurar ativamente o subconjunto de parâmetros de solicitação caros, ou seja, parâmetros, como parte da fase de inicialização da sessão de captura. Com este as implementações de HAL receberão os parâmetros do cliente durante o fase de configuração de stream, em vez da primeira solicitação de captura, e pode, dependendo dos valores delas, preparar e criar o pipeline interno com eficiência.

No Android 10, é possível melhorar o desempenho usando o recurso opcional de consulta de reconfiguração de sessão para obter mais controle sobre a lógica de reconfiguração de parâmetros da sessão interna. Para mais informações, consulte Consulta de reconfiguração de sessão.

Exemplos e origem

Uma implementação de parâmetro de sessão de referência já faz parte da CameraHal. Essa HAL usa a API Hal legada. A classe binderized O CameraHal que implementar a API HIDL da câmera precisa usar o respectivo HIDL sessionParams entrada para acessar novos parâmetros de sessão recebidos durante a configuração do stream.

Os clientes da câmera podem consultar as chaves de todos os parâmetros de sessão compatíveis chamando getAvailableSessionKeys() e, por fim, definir os valores iniciais por meio setSessionParameters()

Implementação

A implementação do CameraHal precisa preencher a ANDROID_REQUEST_AVAILABLE_SESSION_KEYS nos respectivos metadados de câmera estática e fornecem um subconjunto de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, que contém uma lista de chaves que são difíceis de aplicar por frame e podem resultam em atrasos inesperados quando modificados durante o ciclo de vida da sessão de captura.

Exemplos típicos incluem parâmetros que exigem um hardware demorado ou uma mudança no pipeline interno da câmera. Controle sobre a sessão parâmetros ainda podem ser exercidos em solicitações de captura, mas os clientes devem estar cientes e esperar atrasos no aplicativo.

O framework monitora todas as solicitações recebidas e detecta uma alteração no de um parâmetro de sessão, a câmera será reconfigurada internamente. A nova a configuração de stream transmitida para o CameraHal inclui a sessão atualizada. valores de parâmetros, que são usados para configurar melhor o pipeline da câmera com eficiência.

Personalização

Você pode definir tags na lista de parâmetros de sessão disponível preenchida no no lado do CameraHal. Este recurso não ficará ativo se o CameraHal sair da lista de parâmetros da sessão disponível vazia.

Validação

O CTS inclui os novos casos a seguir para testar parâmetros de sessão:

Em geral, depois que um determinado parâmetro faz parte da lista de chaves de sessão, seu o valor atual é incluído como parte dos parâmetros de sessão transmitidos durante a transmissão na camada HAL.

Os parâmetros de sessão precisam ser selecionados com cuidado. Os valores não devem mudar frequentemente entre as configurações de stream. Parâmetros que mudam frequentemente, como a intenção de captura, são inadequadas e adicionadas ao de parâmetros da sessão pode causar falhas no CTS devido ao excesso de dados internos ou de uma nova configuração.

Consulta de reconfiguração de sessão

O Android 10 apresenta uma sessão opcional reconfiguração de consultas para melhorar o desempenho, já que as reconfigurações internas do stream resultam da as modificações no valor do parâmetro podem reduzir o desempenho. Para lidar com essa preocupação, HIDL ICameraDeviceSession a versão 3.5 ou superior suporta a isReconfigurationRequired , que oferece controle refinado sobre o parâmetro de sessão interna lógica de reconfiguração. Com esse método, pode ocorrer reconfiguração de stream com precisão quando necessário.

Os argumentos de isReconfigurationRequired Fornecer as informações necessárias sobre cada parâmetro de sessão pendente. modificação, permitindo vários tipos de personalizações específicas do dispositivo.

Esse recurso é implementado apenas no serviço de câmera e na HAL da câmera. não são APIs públicas. Se esse recurso for implementado, os clientes de câmera deverão melhorar o desempenho ao trabalhar com parâmetros de sessão.

Implementação

Para dar suporte às consultas de reconfiguração de sessão, você deve implementar o isReconfigurationRequired para verificar se a reconfiguração completa de stream é necessária para os novos valores de parâmetro de sessão.

Se o cliente alterar o valor de qualquer parâmetro de sessão anunciado, a câmera o framework chama a função isReconfigurationRequired . Dependendo dos valores específicos, a HAL decide se um é necessária uma reconfiguração de stream. Se a HAL retornar false, a câmera ignora a reconfiguração interna. Se a HAL retornar true, a o framework reconfigura os streams e transmite os novos valores de parâmetro da sessão. de maneira adequada.

O método isReconfigurationRequired pode ser chamado pelo framework em algum momento antes que uma solicitação com novos parâmetros seja enviada à HAL, e a solicitação pode ser cancelado antes do envio. Portanto, a HAL não deve usar chamada de método para mudar seu comportamento de alguma forma.

A implementação da HAL precisa atender aos seguintes requisitos:

  • O framework precisa ser capaz de chamar o método isReconfigurationRequired. a qualquer momento após a configuração da sessão ativa.
  • Não deve haver impacto no desempenho das solicitações de câmera pendentes. Em não deve haver falhas ou atrasos durante streaming.

O dispositivo e a implementação da HAL precisam atender ao seguinte desempenho requisitos:

  • As configurações de hardware e software da câmera não podem ser alteradas.
  • O desempenho da câmera não pode ser visível aos usuários.

O isReconfigurationRequired tem os seguintes argumentos:

  • oldSessionParams: parâmetros da sessão anterior. Geralmente, os parâmetros de sessão existentes.
  • newSessionParams: novos parâmetros de sessão definidos pelo cliente.

Os códigos de status de retorno esperados são:

  • OK: a consulta obrigatória foi reconfigurada com êxito.
  • METHOD_NOT_SUPPORTED: a câmera não oferece suporte ao de reconfiguração de política.
  • INTERNAL_ERROR: não foi possível concluir a consulta de reconfiguração devido a um um erro interno.

Os valores de retorno são:

  • true: a reconfiguração do stream é necessária.
  • false: a reconfiguração do stream não é necessária.

Para ignorar uma consulta de reconfiguração de sessão, a HAL retorna METHOD_NOT_SUPPORTED ou false. Isso resulta no serviço de câmera padrão comportamento em que a reconfiguração de stream é acionada em cada parâmetro de sessão mudar.

Validação

O recurso de consulta de reconfiguração de sessão pode ser validado usando o teste VTS caso em CameraHidlTest#configureStreamsWithSessionParameters