À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Transport de tampon d'appareil photo à producteur unique et plusieurs consommateurs
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Cette fonctionnalité introduit un ensemble de méthodes qui permet aux clients de caméra d'ajouter et de supprimer des surfaces de sortie de manière dynamique lorsque la session de capture est active et que le streaming de la caméra est en cours. Une nouvelle sortie peut être mappée sur un flux de caméra partagée spécifique sélectionné par l'utilisateur. Une fois une surface ajoutée, vous pouvez la supprimer à tout moment.
L'idée générale est de partager les tampons associés à un flux de caméra particulier sur plusieurs surfaces de sortie. Un compteur de référence interne suit les tampons lorsqu'ils sont prêts à être traités davantage du côté du client.
Lorsque tous les consommateurs ont terminé leurs tâches respectives, le tampon est retiré de la file d'attente et est disponible pour la caméra.
Figure 1 : Partage de mémoire tampon
La figure 1 illustre un exemple de scénario dans lequel les tampons traités par le flux de caméra 2 sont associés et dissociés de manière dynamique, comptabilisés par référence et gérés par le composant de fractionnement de flux dans un flux de sortie partagé dédié au sein du service de caméra.
Exemples et source
L'implémentation de base de cette fonctionnalité se trouve dans le module Camera3StreamSplitter
. Vous trouverez la documentation sur cette fonctionnalité dans la documentation de référence pour les développeurs:
Implémentation
Aucune implémentation n'est requise côté HAL de l'appareil photo, car cette fonctionnalité est implémentée côté framework.
Validation
Votre implémentation doit réussir les cas CTS qui couvrent cette fonctionnalité à partir du module MultiViewTest et de la bibliothèque JNI native pour l'API native.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/26 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 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."]]