Parâmetros de sessão

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

No Android 10, é possível melhorar o desempenho usando o recurso opcional de consulta de reconfiguração de sessão para ter 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 do CameraHal. Esse HAL usa a API legada do HAL. O CameraHal vinculado que implementa a API HIDL da câmera precisa usar a entrada sessionParams do HIDL 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 com setSessionParameters().

Implementação

A implementação do CameraHal precisa preencher o ANDROID_REQUEST_AVAILABLE_SESSION_KEYS nos respectivos metadados estáticos da câmera e fornecer um subconjunto de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, que contém uma lista de chaves difíceis de aplicar por frame e pode resultar em atrasos inesperados quando modificada durante a vida útil da sessão de captura.

Exemplos típicos incluem parâmetros que exigem uma reconfiguração de hardware demorada ou uma alteração interna do pipeline da câmera. O controle sobre os parâmetros de sessão ainda pode ser exercido em solicitações de captura, mas os clientes precisam estar cientes e esperar atrasos no app.

O framework monitora todas as solicitações recebidas e, se detectar uma mudança no valor de um parâmetro de sessão, ele reconfigurará a câmera internamente. A nova configuração de stream transmitida para o CameraHal inclui os valores de parâmetro de sessão atualizados, que são usados para configurar o pipeline da câmera de maneira mais eficiente.

Personalização

É possível definir tags na lista de parâmetros de sessão disponível preenchida no lado do CameraHal. Esse recurso não fica ativo se o CameraHal deixar a lista de parâmetros de sessão disponíveis vazia.

Validação

A CTS inclui os seguintes novos casos para testar parâmetros de sessão:

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

Os parâmetros de sessão precisam ser selecionados com cuidado. Os valores não devem mudar com frequência entre as configurações do stream. Parâmetros que mudam com frequência, como a intent de captura, são inadequados, e adicioná-los à lista de parâmetros de sessão pode causar falhas na CTS devido à reconfiguração interna excessiva.

Consulta de reconfiguração de sessão

O Android 10 apresenta um recurso opcional de consulta de reconfiguração de sessão para melhorar o desempenho, já que as reconfigurações de stream internas resultantes de modificações de valores de parâmetros de sessão podem reduzir o desempenho. Para resolver esse problema, a HIDL ICameraDeviceSession versão 3.5 e mais recentes oferece suporte ao método isReconfigurationRequired, que oferece controle detalhado sobre a lógica de reconfiguração do parâmetro da sessão interna. Com esse método, a reconfiguração de fluxo pode ocorrer precisamente quando necessário.

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

Esse recurso é implementado apenas no serviço de câmera e no HAL de câmera. Não há APIs públicas. Se esse recurso for implementado, os clientes da câmera vão notar melhorias de desempenho ao trabalhar com parâmetros de sessão.

Implementação

Para oferecer suporte a consultas de reconfiguração de sessão, implemente o método isReconfigurationRequired para verificar se a reconfiguração completa do fluxo é necessária para novos valores de parâmetro de sessão.

Se o cliente mudar o valor de qualquer parâmetro de sessão anunciado, o framework da câmera vai chamar o método isReconfigurationRequired. Dependendo dos valores específicos, a HAL decide se uma reconfiguração completa do stream é necessária. Se o HAL retornar false, o framework da câmera vai pular a reconfiguração interna. Se a HAL retornar true, o framework vai reconfigurar os streams e transmitir os novos valores de parâmetro da sessão adequadamente.

O método isReconfigurationRequired pode ser chamado pelo framework algum tempo antes que uma solicitação com novos parâmetros seja enviada ao HAL, e a solicitação pode ser cancelada antes de ser enviada. Portanto, o HAL não pode usar essa chamada de método para mudar o comportamento de nenhuma forma.

A implementação do 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 de sessão ativa.
  • Não deve haver impacto no desempenho das solicitações de câmera pendentes. Em particular, não pode haver falhas ou atrasos durante o streaming normal da câmera.

A implementação do dispositivo e do HAL precisa atender aos seguintes requisitos de desempenho:

  • As configurações de hardware e software da câmera não podem ser alteradas.
  • Não pode haver impacto visível para o usuário no desempenho da câmera.

O método isReconfigurationRequired usa 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 reconfiguração foi bem-sucedida e a consulta foi necessária.
  • METHOD_NOT_SUPPORTED: o dispositivo de câmera não oferece suporte à consulta de reconfiguração.
  • INTERNAL_ERROR: não é possível concluir a consulta de reconfiguração devido a um erro interno.

Os valores de retorno são:

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

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

Validação

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