اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
نقل بيانات مخبّر الكاميرا من منتج واحد إلى عدة مستخدِمين
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تقدّم هذه الميزة مجموعة من الطرق التي تسمح لعملاء الكاميرا بإضافة مساحات العرض للإخراج و
إزالتها بشكل ديناميكي أثناء نشاط جلسة الالتقاط و
بث الكاميرا. يمكن ربط مخرج جديد ببث محدد يختاره المستخدم من الكاميرا المشتركة. بعد إضافة سطح، يمكن إزالته في أي وقت.
والفكرة العامة هي مشاركة وحدات التخزين المؤقت المرتبطة ببث
كاميرا معيّن ضمن عدة مساحات عرض. يتتبّع عداد مرجعي داخلي
المخازن المؤقتة عندما تصبح جاهزة لإجراء المزيد من المعالجة من جانب المستهلك.
عندما يُكمل جميع المستهلكين مهامهم، تتم إزالة المخزن المؤقت من "قائمة الانتظار" ويُصبح
متاحًا للكاميرا.
الشكل 1: مشاركة الفيديوهات في "المخزن المؤقت"
يوضّح الشكل 1 مثالاً على سيناريو يتم فيه ربط وفصل العناصر المخزّنة مؤقتًا التي تتم معالجتها من خلال بث الكاميرا الثاني بشكل ديناميكي، ويتم احتساب عدد الإحالات وإدارتها من خلال عنصر "مُقسِّم البث" داخل بث إخراج مشترَك مخصّص ضمن خدمة الكاميرا.
الأمثلة والمصدر
يمكن العثور على التنفيذ الأساسي لهذه الميزة في وحدة
Camera3StreamSplitter
. يمكن العثور على مستندات حول هذه الميزة في مرجع المطوّرين:
التنفيذ
لا يلزم تنفيذ أيّ عملية من جانب Camera HAL لأنّ هذه الميزة تتم
تنفيذها من جانب إطار العمل.
التحقُّق
يجب أن يجتاز التنفيذ حالات CTS التي تغطي هذه الميزة من وحدة MultiViewTest
ومكتبة JNI الأصلية
لواجهة برمجة التطبيقات الأصلية.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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."]]