A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release
en lugar de aosp-main
para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Transporte de búfer de cámara de un solo productor y varios consumidores
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Esta función presenta un conjunto de métodos que permite que los clientes de la cámara agreguen y quiten superficies de salida de manera dinámica mientras la sesión de captura está activa y la transmisión de la cámara está en curso. Una salida nueva se puede asignar a una transmisión específica de cámara compartida que seleccione el usuario. Una vez que se agrega una plataforma, se puede quitar en cualquier momento.
La idea general es compartir los búferes asociados con una transmisión de cámara particular en varias plataformas de salida. Un contador de referencias interno realiza un seguimiento de los búferes a medida que se preparan para un procesamiento adicional del lado del consumidor.
Cuando todos los consumidores completan sus tareas respectivas, el búfer se quita de la cola y está disponible para la cámara.
Figura 1: Uso compartido de búfer
En la Figura 1, se muestra un ejemplo de situación en la que los búferes que procesa la transmisión de la cámara 2 se conectan y desconectan de forma dinámica, se cuenta la referencia y se administran por el componente divisor de transmisiones dentro de una transmisión de salida compartida dedicada dentro del servicio de la cámara.
Ejemplos y fuente
La implementación principal de esta función se puede encontrar en el módulo Camera3StreamSplitter
. Puedes encontrar documentación sobre esta función en la referencia para desarrolladores:
Implementación
No se requiere implementación en el lado de la HAL de la cámara, ya que esta función se implementa en el lado del framework.
Validación
Tu implementación debe aprobar los casos de CTS que cubren esta función desde el módulo MultiViewTest y la biblioteca JNI nativa de la API nativa.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-26 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]