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

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

دعم الكاميرات المتعددة

الشكل 1 دعم الكاميرات المتعددة

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

أمثلة ومصادر

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

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

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

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

التنفيذ

قائمة التحقّق من إمكانية الاستفادة من الدعم

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

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

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

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

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

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

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

مزيج البث المضمون

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

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

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

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

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

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

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

  • الأداء:

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

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

التخصيص

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

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

التحقُّق

يجب أن تجتاز الأجهزة المنطقية المتعددة الكاميرات اختبار التوافق مع نظام التشغيل Android (CTS) للكاميرا مثل أي كاميرا عادية أخرى. يمكن العثور على حالات الاختبار التي تستهدف هذا النوع من الأجهزة في الوحدة LogicalCameraDeviceTest.

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

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