إتاحة استخدام كاميرات متعدّدة

وفّر نظام التشغيل Android 9 واجهة برمجة تطبيقات لأجهزة الكاميرات المتعدّدة من خلال جهاز كاميرا منطقي جديد يتألف من جهازَي كاميرا أو أكثر موجهَين في الاتجاه نفسه. يتم عرض جهاز الكاميرا المنطقي كجهاز CameraDevice/CaptureSession واحد لتطبيق يسمح بالتفاعل مع ميزات الكاميرات المتعددة المُدمجة مع HAL. يمكن للتطبيقات اختياريًا الوصول إلى عمليات نقل البيانات الأساسية للكاميرا المادية والبيانات الوصفية وعناصر التحكّم فيها والتحكّم فيها.

إتاحة استخدام كاميرات متعدّدة

الشكل 1: إتاحة استخدام كاميرات متعددة

في هذا المخطّط البياني، يتم ترميز أرقام تعريف الكاميرات المختلفة حسب اللون. يمكن للتطبيق بثّ ذاكرات التخزين المؤقت الأوّلية من كل كاميرا في الوقت نفسه. يمكن أيضًا تعيين عناصر تحكم منفصلة وتلقي بيانات وصفية منفصلة من كاميرات مادية مختلفة.

الأمثلة والمصادر

يجب الإعلان عن الأجهزة المزوّدة بعدّة كاميرات مع توضيح إمكانية استخدام كاميرات متعددة.

يمكن لعملاء الكاميرا الاستعلام عن معرّف الكاميرا للأجهزة المادية التي تتكون منها كاميرا منطقية معيّنة من خلال الاتصال getPhysicalCameraIds(). بعد ذلك، يتم استخدام أرقام التعريف التي يتم عرضها كجزء من النتيجة للتحكم في الأجهزة الفعلية بشكل فردي من خلال setPhysicalCameraId(). يمكن البحث عن نتائج هذه الطلبات الفردية من النتيجة الكاملة عن طريق استدعاء getPhysicalCameraResults().

قد لا تتيح طلبات الكاميرات الفردية سوى مجموعة فرعية محدودة من المَعلمات. لتلقّي قائمة بالمَعلمات المتوافقة، يمكن للمطوِّرين استدعاء getAvailablePhysicalCameraRequestKeys().

لا تتوفّر عمليات بث الكاميرا المادية إلا لطلبات إعادة المعالجة ولا تتوفّر إلا لأجهزة الاستشعار أحادية اللون وأجهزة استشعار Bayer.

التنفيذ

قائمة التحقّق من الدعم

لإضافة أجهزة منطقية متعددة الكاميرات إلى جانب HAL:

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 9، يجب أن تتيح أجهزة الكاميرا استبدال بث YUV/RAW واحد منطقي بالبث المباشر بالحجم نفسه (لا ينطبق على أحداث بث RAW) وبالتنسيق نفسه من كاميرتين. ولا ينطبق ذلك على الأجهزة التي تعمل بنظام التشغيل Android 10.

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10 حيث يكون إصدار جهاز HAL للكاميرا 3.5 أو إصدارًا أحدث، يجب أن يتوافق جهاز الكاميرا مع isStreamCombinationSupported للتطبيقات لمعرفة ما إذا كانت مجموعة بث معيّنة تحتوي على أحداث بث فعلية متاحة.

خريطة إعدادات البث

بالنسبة إلى الكاميرا المنطقية، تكون مجموعات البث الإلزامية لجهاز الكاميرا من مستوى أجهزة معيّن مماثلة لما هو مطلوب في CameraDevice.createCaptureSession. يجب أن تكون كل مجموعات البث في خريطة ضبط البث عبارة عن أحداث بث منطقية.

إذا أنشأ أحد التطبيقات بث RAW منطقيًا، يجب ألا يبدِّل جهاز الكاميرا المنطقي إلى كاميرات فرعية مادية ذات أحجام مستشعر مختلفة، إذا كان جهاز كاميرا منطقي يتوافق مع كاميرات فرعية ذات أحجام مختلفة. ويضمن ذلك عدم تعطُّل تطبيقات التقاط الصور بتنسيق RAW الحالية.

للاستفادة من ميزة التكبير/التصغير البصري التي توفّرها HAL من خلال التبديل بين الكاميرات الفرعية المادية أثناء التقاط الصور بتنسيق RAW، يجب أن تهدف التطبيقات إلى ضبط عمليات بث الكاميرات الفرعية المادية بدلاً من بث RAW المنطقي.

مجموعة البث المضمونة

يجب أن تضمن كلّ من الكاميرا المنطقية والكاميرات المادية الأساسية مجموعات البث الإلزامية المطلوبة لمستويات الأجهزة.

يجب أن يعمل جهاز الكاميرا المنطقي بالطريقة نفسها التي يعمل بها جهاز كاميرا مادي استنادًا إلى مستوى الأجهزة وإمكاناتها. من المستحسن أن تكون مجموعة ميزاته مجموعة أكبر من مجموعة الكاميرات المادية الفردية.

على الأجهزة التي تعمل بنظام التشغيل Android 9، يجب أن تتيح الكاميرا المنطقية كلّ ما يلي لكلّ مجموعة من بثّات الفيديو المضمونة:

  • استبدال بث منطقي واحد بتنسيق YUV_420_888 أو بث عادي ببثَّين ماديَّين بالحجم والتنسيق نفسهما، وكلّ منهما من كاميرا مادية منفصلة، شرط أن يكون الحجم والتنسيق متوافقَين مع الكاميرات المادية

  • إضافة مصدرَين للبثّ بتنسيق RAW، أحدهما من كل كاميرا أساسية، إذا كانت الكاميرا المنطقية لا تعرض إمكانية استخدام تنسيق RAW، ولكن الكاميرات الأساسية تفعل ذلك. يحدث ذلك عادةً عندما تكون أحجام أدوات الاستشعار في الكاميرات الأساسية مختلفة.

  • استخدام مصادر بيانات فعلية بدلاً من مصدر بيانات منطقي بالحجم وال التنسيق نفسهما يجب ألا يؤدي ذلك إلى إبطاء عدد اللقطات في الثانية لعمليات الالتقاط عندما يكون الحد الأدنى لمدة اللقطة في البثّين المادي والمنطقي متطابقًا.

اعتبارات الأداء واستهلاك الطاقة

  • الأداء:

    • وبسبب القيود المفروضة على الموارد، قد يؤدي إعداد أحداث بث فعلية وبثها إلى إبطاء معدّل تصوير الكاميرا المنطقية.
    • قد يؤدي تطبيق إعدادات الكاميرا المادية إلى إبطاء معدل الالتقاط إذا تم ضبط الكاميرات الأساسية على عدد لقطات مختلف في الثانية.
  • الطاقة:

    • يواصل تحسين طاقة HAL العمل في الحالة التلقائية.
    • قد يؤدي ضبط مصادر البيانات المادية أو طلبها إلى إلغاء ميزة تحسين الطاقة الداخلية في HAL وزيادة استهلاك الطاقة.

التخصيص

يمكنك تخصيص عملية تنفيذ الجهاز بالطرق التالية:

  • يعتمد الإخراج المجمّع لجهاز الكاميرا المنطقي بالكامل على تنفيذ HAL. إنّ قرار كيفية الحصول على أحداث الفيديو المجمّعة من الكاميرات الفعلية يكون واضحًا للتطبيق وإطار عمل كاميرا Android.
  • يمكن اختياريًا إتاحة إمكانية تلقّي الطلبات والنتائج المادية الفردية. وتعتمد مجموعة المعلمات المتاحة في هذه الطلبات بشكل كامل على تنفيذ HAL المحدد.
  • اعتبارًا من Android 10، يمكن أن يحدّ HAL من عدد الكاميرات التي يمكن للتطبيق فتحها مباشرةً من خلال اختيار عدم نشر بعض PHYSICAL_IDs أو كلها في getCameraIdList. يجب أن يؤدي الاتصال getPhysicalCameraCharacteristics بعد ذلك إلى عرض خصائص الكاميرا الفعلية.

التحقُّق

يجب أن تجتاز الأجهزة المنطقية المزوّدة بعدة كاميرات اختبار CTS الخاص بالكاميرا مثل أي كاميرا عادية أخرى. يمكن العثور على حالات الاختبار التي تستهدف هذا النوع من الأجهزة في وحدة LogicalCameraDeviceTest.

تستهدف اختبارات ITS الثلاثة هذه أنظمة الكاميرات المتعدّدة لتسهيل دمج الصور بشكلٍ سليم:

يتم إجراء اختبارات المشهد 1 والمشهد 4 باستخدام جهاز الاختبار ITS-in-a-box. يؤكد اختبار test_multi_camera_match أنّ سطوع وسط الصور يتطابق عندما تكون كلتا الكاميراَين مفعّلتَين. يُثبت اختبار test_multi_camera_alignment أنّه تم تحميل مَعلمات المسافات بين الكاميرات واتجاهاتها والتشوه بشكلٍ صحيح. إذا كان نظام الكاميرات المتعدّدة يتضمّن كاميرا ذات مجال رؤية واسع (>90 درجة)، يجب استخدام الإصدار 2 من مربّع ITS.

Sensor_fusion هو جهاز اختبار ثانٍ يتيح تكرار حركات الهاتف المُحدَّدة ويؤكد تطابق الطوابع الزمنية لجهاز الاستشعار الدوراني وجهاز استشعار الصور، فضلاً عن تزامن frmes من الكاميرات المتعدّدة.

تتوفّر جميع العلب من خلال شركة AcuSpec, Inc. (www.acuspecinc.com، fred@acuspecinc.com) وشركة MYWAY Manufacturing (www.myway.tw، sales@myway.tw). بالإضافة إلى ذلك، يمكن شراء علبة ITS من الإصدار 1 من خلال West-Mark (www.west-mark.com، dgoodman@west-mark.com).

أفضل الممارسات

للاستفادة بشكل كامل من الميزات التي تتيحها ميزة "الكاميرات المتعدّدة" مع الحفاظ على توافق التطبيق، اتّبِع أفضل الممارسات التالية عند تنفيذ جهاز منطقي "للكاميرات المتعدّدة":

  • (نظام التشغيل Android 10 أو الإصدارات الأحدث) يمكنك إخفاء الكاميرات الفرعية الفعلية عن 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 آلة حالة التركيز التلقائي للكاميرا ذات الزاوية الواسعة جدًا، بحيث لا يلاحظ التطبيق أنّ الكاميرا الأساسية ذات تركيز ثابت عندما يكبِّر التطبيق الصورة باستخدام العدسة ذات الزاوية الواسعة جدًا، وتعمل آلات حالة التركيز التلقائي لأوضاع التركيز التلقائي المتوافقة على النحو المُتوقَّع.
    • إذا كانت الكاميرا ذات الزاوية الواسعة والكاميرا ذات الزاوية المقرّبة تتيحان تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية، وكانت الكاميرا ذات الزاوية الفائقة تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 30 لقطة في الثانية أو 1080p بمعدّل 60 لقطة في الثانية، ولكن لا تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية، تأكَّد من أنّ الكاميرا المنطقية لا تعرض دقة 4K بمعدّل 60 لقطة في الثانية في إعدادات البث المتوافقة. يضمن ذلك سلامة إمكانات الكاميرا المنطقية، ما يضمن عدم مواجهة التطبيق لمشكلة عدم تحقيق دقة 4K بمعدل 60 لقطة في الثانية عند استخدام قيمة ANDROID_CONTROL_ZOOM_RATIO أقل من 1.
  • اعتبارًا من Android 10، لن يكون من الضروري توفُّر كاميرا منطقية متعددة لتوفير مجموعات بث تتضمّن مصادر بث حقيقية. إذا كانت HAL متوافقة مع البث المباشر:
    • (نظام التشغيل Android 11 أو الإصدارات الأحدث) للتعامل بشكل أفضل مع حالات الاستخدام، مثل العمق الناتج عن الاستيريو وتتبُّع الحركة، اجعل مجال رؤية مخرجات البث الفعلي أكبر قدر ممكن من خلال الأجهزة. ومع ذلك، إذا كان مصدر البثّ المادي والبثّ المنطقي هو الكاميرا المادية نفسها، قد تفرض قيود الأجهزة أن يكون مجال رؤية البثّ المادي هو نفسه مجال رؤية البثّ المنطقي.
    • لحلّ مشكلة الضغط على الذاكرة الناتجة عن مصادر بيانات متعددة، تأكَّد من أنّ التطبيقات تستخدم discardFreeBuffers لإلغاء تخصيص ذاكرة التخزين المؤقت المجانية (ذاكرة التخزين المؤقت التي يُطلقها المستخدِم، ولكن لم يُخرجها المنتج من "قائمة الانتظار" بعد) إذا كان من المتوقّع أن يكون مصدر البيانات في وضعٍ دوار لفترة زمنية.
    • إذا لم تكن عمليات البث المباشر من كاميرات خارجية مختلفة مرتبطة عادةً بالطلب نفسه، تأكَّد من أنّ التطبيقات تستخدم surface group كي يتم استخدام قائمة انتظار واحدة للذاكرة المؤقتة لدعم سطحَين موجهَين للتطبيق، وبالتالي تقليل استهلاك الذاكرة.