A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Transporte do buffer da câmera de vários consumidores com produtor único
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Esse recurso apresenta um conjunto de métodos que permite que os clientes da câmera adicionem e
removam superfícies de saída dinamicamente enquanto a sessão de captura está ativa e
o streaming da câmera está em andamento. Uma nova saída pode ser mapeada para um fluxo de
câmera compartilhada
específico selecionado pelo usuário. Depois que uma superfície é adicionada, ela pode ser removida a qualquer momento.
A ideia geral é compartilhar os buffers associados a um fluxo de câmera
específico em várias superfícies de saída. Um contador de referência interno monitora
os buffers à medida que eles ficam prontos para processamento no lado do consumidor.
Quando todos os consumidores concluem as respectivas tarefas, o buffer é removido da fila e
fica disponível para a câmera.
Figura 1. Compartilhamento de buffer
A Figura 1 mostra um exemplo de cenário em que os buffers processados pelo stream
da câmera 2 são anexados e desconectados dinamicamente, contados por referência e gerenciados
pelo componente de divisão de stream em um stream de saída compartilhado dedicado no
serviço da câmera.
Exemplos e origem
A implementação principal desse recurso pode ser encontrada no
módulo
Camera3StreamSplitter
. A documentação sobre esse recurso pode ser encontrada na referência para desenvolvedores:
Implementação
Nenhuma implementação é necessária no HAL da câmera, porque esse recurso é
implementado no framework.
Validação
Sua implementação precisa passar nos casos de CTS que abrangem esse recurso do
módulo MultiViewTest
e da
biblioteca JNI nativa
para a API nativa.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-26 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-26 UTC."],[],[],null,["# Single producer, multiple consumer camera buffer transport\n\nThis feature introduces a set of methods that allows camera clients to add and\nremove output surfaces dynamically while the capture session is active and\ncamera streaming is ongoing. A new output can map to a specific, user-selected\n[shared camera](https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#enableSurfaceSharing())\nstream. After a surface is added, it can be removed at any time.\n\nThe general idea is to share the buffers associated with a particular camera\nstream within several output surfaces. An internal reference counter keeps track\nof the buffers as they become ready for further processing on the consumer side.\nWhen all consumers complete their respective tasks the buffer gets dequeued and\nis available for the camera.\n\n**Figure 1.** Buffer sharing\n\nFigure 1 depicts one example scenario where the buffers processed by camera\nstream 2 are dynamically attached and detached, reference counted, and managed\nby the stream splitter component inside a dedicated shared output stream within\nthe camera service.\n\nExamples and source\n-------------------\n\nThe core implementation of this feature can be found in the\n[`Camera3StreamSplitter`](https://android.googlesource.com/platform/frameworks/av/+/android16-release/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp)\nmodule. Documentation on this feature can be found in the developer reference:\n\n- [`updateOutputConfiguration()`](https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html#updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration))\n- [`addSurface()`](https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#addSurface(android.view.Surface))\n- [`removeSurface()`](https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#removeSurface(android.view.Surface))\n\nImplementation\n--------------\n\nNo implementation is required on the Camera HAL side as this feature is\nimplemented on the framework side.\n\nValidation\n----------\n\nYour implementation must pass CTS cases that cover this feature from the\n[MultiViewTest](https://android.googlesource.com/platform/cts/+/android16-release/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java)\nmodule and the\n[native JNI library](https://android.googlesource.com/platform/cts/+/android16-release/tests/camera/libctscamera2jni/native-camera-jni.cpp)\nfor the native API."]]