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 caros, 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 fluxo 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 interna de reconfiguração do parâmetro de sessão. 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 da câmera podem consultar as chaves de todos os parâmetros de sessão com suporte chamando getAvailableSessionKeys() e, eventualmente, definir seus valores iniciais por meio de setSessionParameters() .

Implementação

Sua implementação CameraHal deve preencher o ANDROID_REQUEST_AVAILABLE_SESSION_KEYS dentro dos 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 modificados 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 mudança de canal de câmera interna. 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 seu aplicativo.

O framework monitora todas as requisições recebidas e caso detecte uma alteração no valor de um parâmetro da 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 de câmera com mais eficiência.

Costumização

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

Validação

O 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, 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 ser alterados com frequência, se for o caso, 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 lidar com 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 interna de reconfiguração do parâmetro da sessão. Usando esse 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 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 oferecer suporte a consultas de reconfiguração de sessão, você deve implementar 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 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 pula 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 pelo framework 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 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 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 o streaming 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 impacto visível pelo usuário no desempenho da câmera.

O método isReconfigurationRequired usa os seguintes argumentos:

  • oldSessionParams : Parâmetros da sessão anterior. Normalmente, os parâmetros de sessão existentes.
  • newSessionParams : Novos parâmetros de sessão que sã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 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 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 do serviço de câmera padrão em que 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 .