Camera2 obtém acesso contínuo às imagens de visualização da câmera

Quero estender um aplicativo da Camera1 para a Camera2, dependendo da API. Um mecanismo principal do aplicativo consiste em tirar fotos de pré-visualização a uma taxa de cerca de 20 fotos por segundo. Com o Camera1, percebi que, criando um SurfaceView, adicionando um retorno de chamada ao titular e após a criação da superfície, acessando as fotos de visualização por meio de setOneShotPreviewCallbacks periódicos. Isso foi muito fácil e confiável.

Agora, ao estudar o Camera2, vim "do fim" e consegui converter o YUV420_888 em Bitmap (consulteConversão de YUV420_888 para Bitmap ) No entanto, estou lutando agora com a "técnica de captura". No exemplo do Google, vejo que você precisa criar um CaptureRequest "setRepeating" com CameraDevice.TEMPLATE_PREVIEW para exibir a visualização, por exemplo. em uma vista de superfície. Está bem. No entanto, para tirar uma foto real, preciso fazer outra solicitação de captura com (desta vez) builder.addTarget (imageReader.getSurface ()). I.e. os dados estarão disponíveis no método onImageAvailable do imageReader.

O problema: a criação do captureRequest é uma operação bastante pesada, demorando cerca de 200ms no meu dispositivo. Portanto, o uso de uma solicitação de captura (seja com Template STILL_CAPTUR nem PREVIEW) pode ser impossivelmente uma abordagem viável para capturar 20 imagens por segundo, conforme necessário. As propostas que encontrei aqui no SO se baseiam principalmente no exemplo do Google (educacionalmente moderadamente eficiente), que eu realmente não entendo ...

Sinto que a solução deve ser alimentar o ImageReader com um fluxo contínuo de fotos de visualização, que podem ser selecionadas a partir daí em uma determinada frequência. Alguém pode dar alguma orientação sobre como implementar isso? Muito Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion