أتاح نظام التشغيل Android 9 إمكانية استخدام واجهة برمجة التطبيقات للأجهزة التي تتضمّن كاميرات متعددة من خلال جهاز كاميرا منطقي جديد يتألف من جهازَي كاميرا ماديَين أو أكثر موجّهة في الاتجاه نفسه. يتم عرض جهاز الكاميرا المنطقية كتطبيق CameraDevice/CaptureSession واحد، ما يتيح للتطبيق التفاعل مع ميزات الكاميرات المتعددة المدمجة في طبقة HAL. يمكن للتطبيقات اختياريًا الوصول إلى تدفقات الكاميرا المادية الأساسية والبيانات الوصفية وعناصر التحكّم والتحكّم فيها.
الشكل 1 دعم الكاميرات المتعددة
في هذا الرسم البياني، يتم ترميز معرّفات الكاميرات المختلفة بالألوان. يمكن للتطبيق بث المخازن المؤقتة الأولية من كل كاميرا فعلية في الوقت نفسه. من الممكن أيضًا ضبط عناصر تحكّم منفصلة وتلقّي بيانات وصفية منفصلة من كاميرات فعلية مختلفة.
أمثلة ومصادر
يجب الإعلان عن الأجهزة التي تتضمّن كاميرات متعدّدة مع توضيح إمكانية استخدام الكاميرات المتعدّدة بشكل منطقي.
يمكن لبرامج الكاميرا استعلام معرّف الكاميرا للأجهزة المادية التي تتكوّن منها كاميرا منطقية معيّنة من خلال استدعاء getPhysicalCameraIds().
بعد ذلك، يتم استخدام أرقام التعريف التي يتم عرضها كجزء من النتيجة للتحكّم في الأجهزة المادية بشكل فردي من خلال setPhysicalCameraId().
يمكن الاستعلام عن نتائج هذه الطلبات الفردية من النتيجة الكاملة عن طريق استدعاء getPhysicalCameraResults().
قد لا تتيح طلبات الكاميرا الفعلية الفردية سوى مجموعة فرعية محدودة من المَعلمات. لتلقّي قائمة بالوسيطات المتوافقة، يمكن للمطوّرين طلب getAvailablePhysicalCameraRequestKeys().
تتوفّر إمكانية بث بيانات الكاميرا المادية فقط للطلبات التي لا تتضمّن إعادة معالجة، وفقط لأجهزة الاستشعار أحادية اللون وأجهزة استشعار باير.
التنفيذ
قائمة التحقّق من إمكانية الاستفادة من الدعم
لإضافة أجهزة منطقية متعددة الكاميرات على مستوى طبقة HAL، اتّبِع الخطوات التالية:
- أضِف إمكانية
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERAلأي جهاز كاميرا منطقي مزوّد بكاميرتَين أو أكثر من الكاميرات المادية التي يتم عرضها أيضًا على التطبيق. - املأ حقل البيانات الوصفية الثابتة
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDSبقائمة تتضمّن أرقام تعريف الكاميرات المادية. - املأ البيانات الوصفية الثابتة ذات الصلة بالعمق المطلوبة لربط وحدات البكسل في بث الكاميرا الفعلي:
ANDROID_LENS_POSE_ROTATION،ANDROID_LENS_POSE_TRANSLATION،ANDROID_LENS_INTRINSIC_CALIBRATION،ANDROID_LENS_DISTORTION،ANDROID_LENS_POSE_REFERENCE. اضبط حقل البيانات الوصفية الثابت
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPEعلى:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE: بالنسبة إلى أدوات الاستشعار في الوضع الرئيسي، لا تتم مزامنة غالق/تعرّض الأجهزة.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED: بالنسبة إلى أدوات الاستشعار في الوضع الرئيسي والثانوي، تتم مزامنة غالق الكاميرا/التعرّض للضوء في الأجهزة.
املأ
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYSبقائمة بالمعلمات المتوافقة مع الكاميرات المادية الفردية. يمكن أن تكون القائمة فارغة إذا كان الجهاز المنطقي لا يتيح الطلبات الفردية.في حال توفّر طلبات فردية، عالِج
physicalCameraSettingsالفردي الذي يمكن أن يصل كجزء من طلبات الالتقاط وطبِّقه، وأضِفphysicalCameraMetadataالفردي وفقًا لذلك.بالنسبة إلى إصدارات جهاز Camera HAL 3.5 (الذي تم طرحه في Android 10) أو الإصدارات الأحدث، املأ مفتاح النتيجة
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_IDباستخدام معرّف الكاميرا الفعلية النشطة الحالية التي تدعم الكاميرا المنطقية.
بالنسبة إلى الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android، يجب أن تتيح أجهزة الكاميرا استبدال بث منطقي واحد بتنسيق YUV أو RAW ببث مباشر من كاميرتَين ماديتَين بالحجم نفسه (لا ينطبق ذلك على البث المباشر بتنسيق RAW) وبالتنسيق نفسه. لا ينطبق ذلك على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android.
بالنسبة إلى الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android والتي يكون فيها إصدار جهاز HAL للكاميرا 3.5 أو إصدار أحدث، يجب أن يتيح جهاز الكاميرا isStreamCombinationSupported لكي تتمكّن التطبيقات من الاستعلام عمّا إذا كان يتم توفير مجموعة معيّنة من عمليات البث تتضمّن عمليات بث فعلية.
خريطة إعدادات البث
بالنسبة إلى الكاميرا المنطقية، تكون مجموعات البث الإلزامية لجهاز الكاميرا ذي مستوى الأجهزة المعيّن هي نفسها المطلوبة في CameraDevice.createCaptureSession.
يجب أن تكون جميع مصادر البيانات في خريطة إعداد مصدر البيانات مصادر بيانات منطقية.
بالنسبة إلى جهاز كاميرا منطقية يتيح إمكانية استخدام تنسيق RAW مع كاميرات فرعية فعلية بأحجام مختلفة، إذا كان أحد التطبيقات يضبط بثًا منطقيًا بتنسيق RAW، يجب ألا يتحوّل جهاز الكاميرا المنطقية إلى كاميرات فرعية فعلية بأحجام مختلفة لأجهزة الاستشعار. يضمن ذلك عدم حدوث مشاكل في تطبيقات التقاط صور RAW الحالية.
للاستفادة من ميزة التقريب البصري التي يتم تنفيذها باستخدام طبقة تجريد الأجهزة (HAL) من خلال التبديل بين الكاميرات الفرعية الفعلية أثناء التقاط صور بتنسيق RAW، يجب أن تضبط التطبيقات مصادر الكاميرات الفرعية الفعلية بدلاً من مصدر RAW منطقي.
مزيج البث المباشر المضمون
يجب أن تضمن كل من الكاميرا المنطقية والكاميرات المادية الأساسية مجموعات البث الإلزامي المطلوبة لمستويات الأجهزة.
يجب أن يعمل جهاز الكاميرا المنطقية بالطريقة نفسها التي يعمل بها جهاز الكاميرا الفعلي استنادًا إلى مستوى الأجهزة وإمكاناتها. ويُنصح بأن تكون مجموعة الخصائص الخاصة به مجموعة شاملة لمجموعة الخصائص الخاصة بالكاميرات المادية الفردية.
على الأجهزة التي تعمل بنظام التشغيل Android 9، يجب أن تتوافق الكاميرا المنطقية مع ما يلي لكل مجموعة من عمليات البث المضمونة:
استبدال بث منطقي واحد بتنسيق YUV_420_888 أو بث أولي ببثَّين فعليَّين بالحجم والتنسيق نفسهما، كلّ منهما من كاميرا فعلية منفصلة، على أن تكون الكاميرات الفعلية متوافقة مع الحجم والتنسيق.
إضافة سلسلتَي بيانات RAW، واحدة من كل كاميرا فعلية، إذا كانت الكاميرا المنطقية لا تعلن عن إمكانية استخدام RAW، ولكن الكاميرات الفعلية الأساسية تعلن عن ذلك. يحدث هذا عادةً عندما يكون للكاميرات الفعلية أحجام مختلفة لأجهزة الاستشعار.
استخدام عمليات بث فعلية بدلاً من عملية بث منطقية بالحجم والتنسيق نفسهما يجب ألا يؤدي ذلك إلى خفض عدد اللقطات في الثانية عند التقاط الفيديو عندما تكون المدة الدنيا للقطة في كل من البث المادي والمنطقي هي نفسها.
اعتبارات الأداء والطاقة
الأداء:
- قد يؤدي إعداد عمليات البث المادي وبثها إلى إبطاء معدّل الالتقاط في الكاميرا المنطقية بسبب قيود الموارد.
- قد يؤدي تطبيق إعدادات الكاميرا المادية إلى إبطاء معدل الالتقاط إذا تم ضبط الكاميرات الأساسية على معدلات لقطات مختلفة.
الطاقة:
- يستمر عمل ميزة تحسين استهلاك الطاقة في طبقة تجريد الأجهزة (HAL) في الحالة التلقائية.
- قد يؤدي ضبط أو طلب بث مباشر إلى إلغاء تحسين استهلاك الطاقة الداخلي في طبقة تجريد الأجهزة (HAL) وزيادة استهلاك الطاقة.
التخصيص
يمكنك تخصيص عملية تنفيذ الجهاز بالطرق التالية.
- يعتمد الناتج المدمج لجهاز الكاميرا المنطقية بشكل كامل على تنفيذ طبقة تجريد الأجهزة (HAL). ويكون قرار كيفية استخلاص تدفقات البيانات المنطقية المدمجة من الكاميرات المادية واضحًا للتطبيق وإطار عمل كاميرا Android.
- يمكن إتاحة الطلبات والنتائج الفردية المادية بشكل اختياري. تعتمد مجموعة المَعلمات المتاحة في هذه الطلبات أيضًا بشكل كامل على عملية التنفيذ المحدّدة لطبقة HAL.
- بدءًا من Android 10، يمكن لطبقة تجريد الأجهزة (HAL) تقليل عدد الكاميرات التي يمكن لأحد التطبيقات فتحها مباشرةً من خلال عدم الإعلان عن بعض أو كل PHYSICAL_IDs في
getCameraIdList. يجب أن تعرض الدالة CallinggetPhysicalCameraCharacteristicsبعد ذلك خصائص الكاميرا المادية.
التحقُّق
يجب أن تجتاز الأجهزة المنطقية المتعددة الكاميرات اختبار التوافق مع نظام التشغيل Android (CTS) للكاميرا مثل أي كاميرا عادية أخرى.
يمكن العثور على حالات الاختبار التي تستهدف هذا النوع من الأجهزة في الوحدة
LogicalCameraDeviceTest.
تستهدف اختبارات ITS الثلاثة هذه أنظمة الكاميرات المتعددة لتسهيل دمج الصور بشكل سليم:
scene1/test_multi_camera_match.pyscene4/test_multi_camera_alignment.pysensor_fusion/test_multi_camera_frame_sync.py
يتم إجراء اختبارَي المشهد 1 والمشهد 4 باستخدام جهاز اختبار
ITS-in-a-box. يؤكّد اختبار test_multi_camera_match أنّ سطوع مركز الصور يتطابق عند تفعيل الكاميرتَين معًا. يؤكّد الاختبار
test_multi_camera_alignment أنّ مسافات الكاميرا واتجاهاتها
ومَعلمات التشويش يتم تحميلها بشكلٍ سليم. إذا كان نظام الكاميرات المتعدّدة يتضمّن كاميرا ذات مجال رؤية واسع (>90 درجة)، يجب استخدام الإصدار 2 من صندوق ITS.
Sensor_fusion هو جهاز اختبار ثانٍ يتيح تكرار حركة الهاتف المحدّدة مسبقًا، ويؤكّد أنّ الطوابع الزمنية الخاصة بجهاز الجيروسكوب ووحدة استشعار الصور متطابقة وأنّ إطارات الكاميرات المتعددة متزامنة.
تتوفّر جميع الصناديق من خلال AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) وMYWAY Manufacturing (www.myway.tw, sales@myway.tw). بالإضافة إلى ذلك، يمكن شراء صندوق rev1 ITS من خلال West-Mark (www.west-mark.com, dgoodman@west-mark.com).
أفضل الممارسات
للاستفادة بشكل كامل من الميزات التي تتيحها الكاميرات المتعددة مع الحفاظ على توافق التطبيقات، اتّبِع أفضل الممارسات التالية عند تنفيذ جهاز كاميرا متعددة منطقي:
- (الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث) إخفاء الكاميرات الفرعية المادية من
getCameraIdListيؤدي ذلك إلى تقليل عدد الكاميرات التي يمكن للتطبيقات فتحها مباشرةً، ما يلغي حاجة التطبيقات إلى استخدام منطق معقّد لاختيار الكاميرا. - (الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث) بالنسبة إلى الأجهزة المنطقية التي تتضمّن عدة كاميرات وتتيح التكبير/التصغير البصري، عليك تنفيذ واجهة برمجة التطبيقات
ANDROID_CONTROL_ZOOM_RATIOواستخدامANDROID_SCALER_CROP_REGIONللاقتصاص حسب نسبة العرض إلى الارتفاع فقط. تتيحANDROID_CONTROL_ZOOM_RATIOللجهاز تصغير الصورة والحفاظ على دقة أفضل. في هذه الحالة، يجب أن تعدّل طبقة تجريد الأجهزة (HAL) نظام الإحداثيات الخاص بكل منANDROID_SCALER_CROP_REGIONوANDROID_CONTROL_AE_REGIONSوANDROID_CONTROL_AWB_REGIONSوANDROID_CONTROL_AF_REGIONSوANDROID_STATISTICS_FACE_RECTANGLESوANDROID_STATISTICS_FACE_LANDMARKSللتعامل مع مجال الرؤية بعد التكبير/التصغير على أنّه مجموعة المستشعر النشطة. لمزيد من المعلومات حول كيفية عملANDROID_SCALER_CROP_REGIONمعANDROID_CONTROL_ZOOM_RATIO، يُرجى الاطّلاع علىcamera3_crop_reprocess#cropping. - بالنسبة إلى الأجهزة المزودة بكاميرات متعددة ذات إمكانات مختلفة، تأكَّد من أنّ الجهاز يعلن عن إمكانية استخدام قيمة أو نطاق معيّنَين لأداة تحكّم معيّنة فقط إذا كان نطاق التكبير/التصغير بالكامل يتيح استخدام القيمة أو النطاق. على سبيل المثال، إذا كانت الكاميرا المنطقية تتألف من كاميرا فائقة العرض وكاميرا عادية وكاميرا مقرِّبة (تيليفوتو)، اتّبِع الخطوات التالية:
- إذا كانت أحجام المصفوفات النشطة للكاميرات المادية مختلفة، يجب أن تنفّذ طبقة تجريد الأجهزة (HAL) للكاميرا عملية الربط من المصفوفات النشطة للكاميرات المادية إلى المصفوفة النشطة للكاميرا المنطقية لكل من
ANDROID_SCALER_CROP_REGIONوANDROID_CONTROL_AE_REGIONSوANDROID_CONTROL_AWB_REGIONSوANDROID_CONTROL_AF_REGIONSوANDROID_STATISTICS_FACE_RECTANGLESوANDROID_STATISTICS_FACE_LANDMARKS، وذلك لكي يكون نظام الإحداثيات من منظور التطبيق هو حجم المصفوفة النشطة للكاميرا المنطقية. - إذا كانت الكاميرات ذات الزاوية العريضة والكاميرات المقرِّبة (تيليفوتو) تتوافق مع ميزة التركيز التلقائي، ولكن الكاميرا ذات الزاوية الفائقة العرض لا تتوافق معها، تأكَّد من أنّ الكاميرا المنطقية تعلن عن توفّر ميزة التركيز التلقائي. يجب أن تحاكي طبقة تجريد الأجهزة (HAL) آلة حالة التركيز التلقائي للكاميرا ذات الصورة الموسّعة، وذلك حتى لا يظهر لبرنامج الحماية المتقدّمة (APP) أنّ الكاميرا الأساسية المثبّتة التركيز عند تصغير برنامج الحماية المتقدّمة (APP) إلى عدسة لالتقاط صور موسّعة، وحتى تعمل آلات حالة التركيز التلقائي لأوضاع التركيز التلقائي المتوافقة على النحو المتوقّع.
- إذا كانت الكاميرات ذات الزاوية الواسعة والعدسة المقرّبة تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية، وكانت الكاميرا ذات الزاوية الواسعة جدًا تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 30 لقطة في الثانية أو بدقة 1080p بمعدّل 60 لقطة في الثانية، ولكن ليس بدقة 4K بمعدّل 60 لقطة في الثانية، تأكَّد من أنّ الكاميرا المنطقية لا تعلن عن إمكانية تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية في إعدادات بث الفيديو المتوافقة. يضمن ذلك سلامة إمكانات الكاميرا المنطقية، ما يضمن عدم مواجهة التطبيق مشكلة عدم إمكانية تسجيل فيديو بدقة 4K بمعدل 60 لقطة في الثانية عند قيمة
ANDROID_CONTROL_ZOOM_RATIOأقل من 1.
- إذا كانت أحجام المصفوفات النشطة للكاميرات المادية مختلفة، يجب أن تنفّذ طبقة تجريد الأجهزة (HAL) للكاميرا عملية الربط من المصفوفات النشطة للكاميرات المادية إلى المصفوفة النشطة للكاميرا المنطقية لكل من
- في نظام التشغيل Android 10 والإصدارات الأحدث، لا يلزم توفُّر كاميرا منطقية متعددة
لدعم مجموعات البث التي تتضمّن عمليات بث فعلية.
إذا كان HAL يتيح الدمج مع التدفقات المادية:
- (الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث) للتعامل بشكل أفضل مع حالات الاستخدام، مثل قياس العمق من الصور المجسمة وتتبُّع الحركة، يجب أن يكون مجال الرؤية لنتائج البث المباشر كبيرًا قدر الإمكان حسب ما يسمح به الجهاز. ومع ذلك، إذا كان كل من البث المادي والبث المنطقي مصدرهما كاميرا مادية واحدة، قد تفرض القيود على الأجهزة أن يكون مجال رؤية البث المادي هو نفسه مجال رؤية البث المنطقي.
- لمعالجة مشكلة الضغط على الذاكرة الناتجة عن تدفّقات فعلية متعددة، تأكَّد من أنّ التطبيقات تستخدم
discardFreeBuffersلإلغاء تخصيص المخازن المؤقتة المجانية (المخازن المؤقتة التي يحرّرها المستهلك، ولكن لم تتم إزالتها من قائمة الانتظار بعد من قِبل المنتج) إذا كان من المتوقّع أن يكون التدفق الفعلي غير نشط لفترة من الوقت. - إذا لم تكن عمليات البث المباشر من كاميرات فعلية مختلفة مرتبطة عادةً بالطلب نفسه، احرص على أن تستخدم التطبيقات
surface groupليتم استخدام قائمة انتظار المخزن المؤقت لتخزين مؤقت لسطحَين متاحَين للتطبيق، ما يقلّل من استهلاك الذاكرة.