CameraCaptureSession.Prepare(Surface) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Pré-alocar todos os buffers para um Surface de saída.
[Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)]
public abstract void Prepare(Android.Views.Surface surface);
[<Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)>]
abstract member Prepare : Android.Views.Surface -> unit
Parâmetros
- surface
- Surface
o Surface de saída para o qual os buffers devem ser pré-alocados. Deve ser um dos Surfaces de saída usados para criar esta sessão.
- Atributos
Comentários
Pré-alocar todos os buffers para um Surface de saída.
Normalmente, os buffers de imagem para um determinado Surface de saída são alocados sob demanda, para minimizar a latência de inicialização e a sobrecarga de memória.
No entanto, em alguns casos, pode ser desejável que os buffers sejam alocados antes que quaisquer solicitações direcionadas ao Surface sejam realmente enviadas ao dispositivo. Buffers grandes podem levar algum tempo para serem alocados, o que pode resultar em atrasos no envio de solicitações até que buffers suficientes sejam alocados para alcançar o comportamento de estado estável. Esses atrasos podem fazer com que as intermitências levem mais tempo do que o desejado ou causem saltos ou gaguejamentos na saída de visualização.
O método prepare() pode ser usado para executar essa pré-alocação. Ele só pode ser chamado para um determinado Surface de saída antes que esse Surface seja usado como um destino para uma solicitação. O número de buffers alocados é a soma da contagem necessária pelo consumidor que fornece o Surface de saída e o número máximo necessário para que o dispositivo de câmera preencha seu pipeline. Como esse pode ser um número maior do que o necessário para a operação de estado estável, o uso da preparação pode resultar em um consumo de memória maior do que o comportamento normal sob demanda. Prepare() também atrasará o tempo para a primeira saída para um determinado Surface, em troca de uma taxa de quadros mais suave depois que a alocação for concluída.
Por exemplo, um aplicativo que cria um android.media.ImageReader#newInstance ImageReader argumento com maxImages de 10, mas usa apenas 3 imagens simultâneas de uma só vez, normalmente só faria com que essas 3 imagens fossem alocadas (mais o que é necessário para o dispositivo de câmera para operação suave). Mas o uso de prepare() no Surface ImageReader resultará na alocação de todas as 10 imagens. Portanto, os aplicativos que usam esse método devem ter cuidado para solicitar apenas o número de buffers realmente necessários para seu aplicativo.
Se o mesmo Surface de saída for usado em sessões consecutivas (sem fechar a primeira sessão explicitamente), seus buffers já alocados serão carregados e, se ele tiver sido usado como destino de uma solicitação de captura na primeira sessão, a preparação não poderá ser chamada na segunda sessão.
Depois que a alocação for concluída, StateCallback#onSurfacePrepared será invocada com o Surface fornecido para esse método. Entre a chamada de preparação e a chamada onSurfacePrepared, o Surface fornecido para preparar não deve ser usado como um destino de um CaptureRequest enviado para esta sessão.
Observe que se 2 superfícies compartilharem o mesmo fluxo por meio OutputConfiguration#enableSurfaceSharing de e OutputConfiguration#addSurface, prepare() só precisa ser chamado em uma superfície e StateCallback#onSurfacePrepared será disparado para ambas as superfícies.
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY os dispositivos não podem pré-alocar buffers de saída; para esses dispositivos, StateCallback#onSurfacePrepared será imediatamente chamado e nenhuma pré-alocação é feita.
Java documentação para android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface).
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.