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:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
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
.