Parâmetros de sessão

O recurso de parâmetros de sessão reduz 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, suas 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 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 obter mais controle sobre a lógica de reconfiguração de parâmetro 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 legada. 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 setSessionParameters() .

Implementação

Sua implementação CameraHal deve preencher o ANDROID_REQUEST_AVAILABLE_SESSION_KEYS nos respectivos metadados de 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 a vida útil da sessão de captura.

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

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 CameraHal inclui os valores de parâmetro de sessão atualizados, 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 que é preenchida no lado CameraHal. Este recurso não estará ativo se CameraHal deixar a lista de parâmetros de sessão disponível vazia.

Validação

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

Em geral, depois que um determinado parâmetro faz 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 de sessão devem ser cuidadosamente selecionados. Os valores não devem ser alterados com frequência, se houver, entre as configurações de fluxo. Parâmetros que mudam com frequência, como intenção de captura, são inadequados e adicioná-los à lista de parâmetros de sessão pode causar falhas de 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, pois as reconfigurações de fluxo interno resultantes de modificações de valor de parâmetro de sessão podem reduzir o desempenho. Para resolver esse problema, 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 de parâmetro de sessão interna. Usando 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 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 na câmera HAL. Não há APIs voltadas para o público. Se esse recurso for implementado, os clientes da 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, você deve implementar o método isReconfigurationRequired para verificar se a reconfiguração de fluxo completa é necessária para novos valores de parâmetro 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 uma reconfiguração completa do fluxo é necessária. Se o HAL retornar false , a estrutura da câmera ignorará a reconfiguração interna. Se o HAL retornar true , a estrutura reconfigurará os fluxos e transmitirá os novos valores de parâmetro de sessão de acordo.

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

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

  • A estrutura deve poder 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 de 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 impacto visível ao usuário no desempenho da câmera.

O método isReconfigurationRequired recebe 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 reconfiguração bem-sucedida.
  • METHOD_NOT_SUPPORTED : O dispositivo da câmera não suporta 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 : a reconfiguração do fluxo é necessária.
  • false : a reconfiguração de 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 de serviço de câmera padrão em que a reconfiguração de fluxo é acionada em cada alteração 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 VTS em CameraHidlTest#configureStreamsWithSessionParameters .