O recurso de parâmetros de sessão reduz os atrasos ao permitir que os clientes da câmera configurar ativamente o subconjunto de parâmetros de solicitação caros, ou seja, parâmetros, como parte da fase de inicialização da sessão de captura. Com este as implementações de HAL receberão os parâmetros do cliente durante o fase de configuração de stream, em vez da primeira solicitação de captura, e pode, dependendo dos valores delas, preparar e criar o pipeline interno com eficiência.
No Android 10, é possível 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â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. A classe binderized O CameraHal que implementar a API HIDL da câmera precisa usar o respectivo HIDL sessionParams entrada 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 por meio
setSessionParameters()
Implementação
A implementação do CameraHal precisa preencher a
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
nos respectivos metadados de câmera estática e fornecem um subconjunto de
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
que contém uma lista de chaves que são difíceis de aplicar por frame e podem
resultam em atrasos inesperados quando modificados durante o ciclo de vida da sessão de captura.
Exemplos típicos incluem parâmetros que exigem um hardware demorado ou uma mudança no pipeline interno da câmera. Controle sobre a sessão parâmetros ainda podem ser exercidos em solicitações de captura, mas os clientes devem estar cientes e esperar atrasos no aplicativo.
O framework monitora todas as solicitações recebidas e detecta uma alteração no de um parâmetro de sessão, a câmera será reconfigurada internamente. A nova a configuração de stream transmitida para o CameraHal inclui a sessão atualizada. valores de parâmetros, que são usados para configurar melhor o pipeline da câmera com eficiência.
Personalização
Você pode definir tags na lista de parâmetros de sessão disponível preenchida no no lado do CameraHal. Este recurso não ficará ativo se o CameraHal sair da lista de parâmetros da sessão disponível vazia.
Validação
O CTS inclui os novos casos a seguir 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, seu o valor atual é incluído como parte dos parâmetros de sessão transmitidos durante a transmissão na camada HAL.
Os parâmetros de sessão precisam ser selecionados com cuidado. Os valores não devem mudar frequentemente entre as configurações de stream. Parâmetros que mudam frequentemente, como a intenção de captura, são inadequadas e adicionadas ao de parâmetros da sessão pode causar falhas no CTS devido ao excesso de dados internos ou de uma nova configuração.
Consulta de reconfiguração de sessão
O Android 10 apresenta uma sessão opcional
reconfiguração de consultas para
melhorar o desempenho, já que as reconfigurações internas do stream resultam da
as modificações no valor do parâmetro
podem reduzir o desempenho. Para lidar com essa preocupação,
HIDL
ICameraDeviceSession
a versão 3.5 ou superior suporta a
isReconfigurationRequired
, que oferece controle refinado sobre o parâmetro de sessão interna
lógica de reconfiguração. Com esse método, pode ocorrer reconfiguração de stream
com precisão quando necessário.
Os argumentos de isReconfigurationRequired
Fornecer as informações necessárias sobre cada parâmetro de sessão pendente.
modificaçã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 da câmera. não são APIs públicas. Se esse recurso for implementado, os clientes de câmera deverão melhorar o desempenho ao trabalhar com parâmetros de sessão.
Implementação
Para dar suporte às consultas de reconfiguração de sessão, você deve implementar o
isReconfigurationRequired
para verificar se a reconfiguração completa de stream é necessária para os novos
valores de parâmetro de sessão.
Se o cliente alterar o valor de qualquer parâmetro de sessão anunciado, a câmera
o framework chama a função isReconfigurationRequired
. Dependendo dos valores específicos, a HAL decide se um
é necessária uma reconfiguração de stream. Se a HAL retornar false
, a câmera
ignora a reconfiguração interna. Se a HAL retornar true
, a
o framework reconfigura os streams e transmite os novos valores de parâmetro da sessão.
de maneira adequada.
O método isReconfigurationRequired
pode ser chamado pelo framework em algum momento
antes que uma solicitação com novos parâmetros seja enviada à HAL, e a solicitação
pode ser cancelado antes do envio. Portanto, a HAL não deve usar
chamada de método para mudar seu comportamento de alguma forma.
A implementação da 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 da sessão ativa. - Não deve haver impacto no desempenho das solicitações de câmera pendentes. Em não deve haver falhas ou atrasos durante streaming.
O dispositivo e a implementação da HAL precisam atender ao seguinte desempenho requisitos:
- As configurações de hardware e software da câmera não podem ser alteradas.
- O desempenho da câmera não pode ser visível aos usuários.
O isReconfigurationRequired
tem 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 consulta obrigatória foi reconfigurada com êxito.METHOD_NOT_SUPPORTED
: a câmera não oferece suporte ao de reconfiguração de política.INTERNAL_ERROR
: não foi possível concluir a consulta de reconfiguração devido a um um erro interno.
Os valores de retorno são:
true
: a reconfiguração do stream é necessária.false
: a reconfiguração do stream não é necessária.
Para ignorar uma consulta de reconfiguração de sessão, a HAL retorna
METHOD_NOT_SUPPORTED
ou false
. Isso resulta no serviço de câmera padrão
comportamento em que a reconfiguração de stream é acionada em cada parâmetro de sessão
mudar.
Validação
O recurso de consulta de reconfiguração de sessão pode ser validado usando o teste VTS
caso em
CameraHidlTest#configureStreamsWithSessionParameters