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, parâmetros de sessão, como parte da fase de inicialização da sessão de captura. Com esse recurso, as implementações de 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 de maneira mais eficiente.

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 da CameraHal. Essa HAL usa a API Hal legada. O binderizado CameraHal que implementa a API HIDL da câmera precisa usar a entrada HIDL sessionParams respectiva para acessar novos parâmetros de sessão recebidos durante a configuração de streaming.

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

Implementação

Sua 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 modificadas durante o ciclo de vida da sessão de captura.

Exemplos típicos incluem parâmetros que exigem uma reconfiguração demorada de hardware ou uma mudança interna no 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 reconfigura internamente a câmera. 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 de câmera de maneira mais eficiente.

Personalização

É possível definir tags na lista de parâmetros de sessão disponíveis, que é 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 fluxo na camada HAL.

Os parâmetros de sessão precisam ser selecionados com cuidado. Os valores não devem mudar com frequência, se é que mudam, entre as configurações de stream. Parâmetros que mudam com frequência, como a intenção de captura, não são adequados. Adicioná-los à lista de parâmetros de sessão pode causar falhas no CTS devido ao excesso de reconfiguração interna.

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 no valor do parâmetro de sessão podem reduzir o desempenho. Para resolver esse problema, o HIDL ICameraDeviceSession versão 3.5 e mais recentes oferecem suporte ao método isReconfigurationRequired, que fornece controle refinado sobre a lógica de reconfiguração de parâmetros da sessão interna. Com esse método, a reconfiguração do stream pode ocorrer exatamente quando necessário.

Os argumentos de isReconfigurationRequired fornecem as informações necessárias sobre cada modificação pendente de parâmetro de sessã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 de câmera. Não há APIs voltadas para o público. Se esse recurso for implementado, os clientes de câmera vão notar melhorias de performance 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 é necessária uma reconfiguração completa do fluxo para novos valores de parâmetro de sessão.

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

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 do envio. Portanto, a HAL não pode usar essa chamada de método para mudar o comportamento de forma alguma.

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

  • O framework precisa conseguir chamar o método isReconfigurationRequired a qualquer momento após a configuração da sessão ativa.
  • Não pode haver impacto na performance das solicitações de câmera pendentes. Em particular, não pode haver falhas ou atrasos durante o streaming normal da câmera.

O dispositivo e a implementação da HAL precisam 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 atuais.
  • newSessionParams: novos parâmetros de sessão definidos pelo cliente.

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

  • OK: consulta necessária para reconfiguração bem-sucedida.
  • METHOD_NOT_SUPPORTED: o dispositivo de câmera não é compatível com a consulta de reconfiguração.
  • INTERNAL_ERROR: a consulta de reconfiguração não pode ser concluída devido a um erro interno.

Os valores de retorno são:

  • true: é necessário reconfigurar o stream.
  • false: não é necessário reconfigurar a transmissão.

Para ignorar uma consulta de reconfiguração de sessão, a 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 a cada mudança de parâmetro da 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.