Parâmetros de sessão

O recurso de parâmetros de sessão reduz atrasos, permitindo que os clientes de 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, suas implementações 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 de seus valores, preparar e construir o pipeline interno com mais eficiência.

No Android 10, você pode 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 de sessão interna. Para obter mais informações, consulte Consulta de reconfiguração de sessão .

Exemplos e fonte

Uma implementação de parâmetro de sessão de referência já faz parte do CameraHal . Este HAL usa a API Hal herdada. O CameraHal vinculado que implementa a API HIDL da câmera deve usar a respectiva entrada HIDL sessionParams para acessar quaisquer novos parâmetros de sessão de entrada durante a configuração do fluxo.

Os clientes de câmera podem consultar as chaves de todos os parâmetros de sessão suportados chamando getAvailableSessionKeys() e, eventualmente, definir seus valores iniciais por meio de setSessionParameters() .

Implementação

Sua implementação CameraHal deve preencher ANDROID_REQUEST_AVAILABLE_SESSION_KEYS nos respectivos metadados da câmera estática e fornecer um subconjunto de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS , que contém uma lista de chaves que são difíceis de aplicar por quadro e podem resultar em atrasos inesperados quando modificadas durante o tempo de vida da sessão de captura.

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

A estrutura monitora todas as solicitações recebidas e, se detectar uma alteração no valor de um parâmetro de sessão, reconfigura internamente a câmera. A nova configuração de fluxo passada para o CameraHal inclui os valores atualizados dos parâmetros da sessão, que são usados ​​para configurar o pipeline da câmera com mais eficiência.

Costumização

Você pode definir tags na lista de parâmetros de sessão disponíveis preenchida no lado do CameraHal. Este recurso não estará ativo se o CameraHal deixar a lista de parâmetros de sessão disponíveis vazia.

Validação

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

Em geral, após um determinado parâmetro fazer parte da lista de chaves de sessão, seu valor atual é incluído como parte dos parâmetros de sessão passados ​​durante a configuração do fluxo na camada HAL.

Os parâmetros da sessão devem ser cuidadosamente selecionados. Os valores não devem mudar frequentemente, se é que devem mudar, entre configurações de fluxo. Os parâmetros que mudam frequentemente, como a intenção de captura, são inadequados e adicioná-los à lista de parâmetros da sessão pode causar falhas no CTS devido à reconfiguração interna excessiva.

Consulta de reconfiguração de sessão

O Android 10 introduz um recurso opcional de consulta de reconfiguração de sessão para melhorar o desempenho, pois as reconfigurações de fluxo interno resultantes de modificações no valor dos parâmetros da sessão podem reduzir o desempenho. Para resolver essa preocupação, o HIDL ICameraDeviceSession versão 3.5 e superior oferece suporte ao método isReconfigurationRequired , que fornece controle refinado sobre a lógica de reconfiguração dos parâmetros da sessão interna. Usando este método, a reconfiguração do fluxo pode ocorrer precisamente quando necessário.

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

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

Implementação

Para suportar consultas de reconfiguração de sessão, deve-se implementar o método isReconfigurationRequired para verificar se a reconfiguração completa do fluxo é necessária para novos valores de parâmetros de sessão.

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

O método isReconfigurationRequired pode ser chamado pela estrutura algum tempo antes de uma solicitação com novos parâmetros ser enviada ao HAL, e a solicitação pode ser cancelada antes de ser enviada. Portanto, o HAL não deve utilizar esta chamada de método para alterar seu comportamento de forma alguma.

A implementação do HAL deve atender aos seguintes requisitos:

  • A estrutura deve 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 de solicitações de câmera pendentes. Em particular, não deve haver falhas ou atrasos durante a transmissão normal da câmera.

O dispositivo e a implementação HAL devem atender aos seguintes requisitos de desempenho:

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

O método isReconfigurationRequired aceita os seguintes argumentos:

  • oldSessionParams : Parâmetros de sessão 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 : consulta necessária para reconfiguração bem-sucedida.
  • METHOD_NOT_SUPPORTED : O dispositivo da câmera não oferece suporte à 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 : a reconfiguração do fluxo é 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, onde a reconfiguração do fluxo é acionada em cada alteração 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 VTS em CameraHidlTest#configureStreamsWithSessionParameters .