Ab dem 27. März 2025 empfehlen wir, android-latest-release
anstelle von aosp-main
zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Kamerabuffer-Transport mit einem einzelnen Produzenten und mehreren Verbrauchern
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Mit dieser Funktion werden mehrere Methoden eingeführt, mit denen Kameraclients Ausgabeoberflächen dynamisch hinzufügen und entfernen können, während die Aufnahmesitzung aktiv ist und das Kamerastreaming läuft. Eine neue Ausgabe kann einem bestimmten, vom Nutzer ausgewählten Stream einer freigegebenen Kamera zugeordnet werden. Nach dem Hinzufügen kann eine Oberfläche jederzeit wieder entfernt werden.
Im Allgemeinen geht es darum, die mit einem bestimmten Kamerastream verknüpften Puffer auf mehreren Ausgabeoberflächen zu teilen. Ein interner Referenzzähler überwacht die Buffers, sobald sie für die weitere Verarbeitung auf der Verbraucherseite bereit sind.
Wenn alle Abnehmer ihre jeweiligen Aufgaben abgeschlossen haben, wird der Puffer aus der Warteschlange entfernt und ist für die Kamera verfügbar.
Abbildung 1: Pufferfreigabe
Abbildung 1 zeigt ein Beispielszenario, in dem die vom Kamerastream 2 verarbeiteten Puffer dynamisch angehängt und getrennt, referenziert und von der Stream-Splitter-Komponente in einem speziellen freigegebenen Ausgabestream innerhalb des Kameradienstes verwaltet werden.
Beispiele und Quelle
Die Hauptimplementierung dieser Funktion finden Sie im Modul Camera3StreamSplitter
. Eine Dokumentation zu dieser Funktion finden Sie in der Entwicklerreferenz:
Implementierung
Auf der Seite der Camera HAL ist keine Implementierung erforderlich, da diese Funktion auf der Framework-Seite implementiert ist.
Zertifizierungsstufe
Ihre Implementierung muss CTS-Tests bestehen, die diese Funktion aus dem Modul MultiViewTest und der nativen JNI-Bibliothek für die native API abdecken.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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."]]