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

قدم Android 9 دعم API للأجهزة متعددة الكاميرات من خلال جهاز كاميرا منطقي جديد يتكون من جهازين أو أكثر من أجهزة الكاميرا الفعلية التي تشير إلى نفس الاتجاه. يتم عرض جهاز الكاميرا المنطقي كجهاز 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 منطقي، فيجب ألا يقوم جهاز الكاميرا المنطقية بالتبديل إلى الكاميرات الفرعية الفعلية ذات أحجام مستشعرات مختلفة. وهذا يضمن عدم تعطل تطبيقات التقاط RAW الحالية.

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

مزيج تيار مضمون

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

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

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

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

  • إضافة تدفقين خام، واحد من كل كاميرا فعلية، إذا كانت الكاميرا المنطقية لا تعلن عن قدرة 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 درجة)، يلزم إصدار rev2 من صندوق ITS.

Sensor_fusion هو جهاز اختبار ثانٍ يتيح حركة الهاتف المتكررة والمحددة ويؤكد أن الطوابع الزمنية للجيروسكوب ومستشعر الصورة متطابقة وأن إطارات الكاميرات المتعددة متزامنة.

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

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

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

  • (Android 10 أو أعلى) إخفاء الكاميرات الفرعية المادية من getCameraIdList . وهذا يقلل من عدد الكاميرات التي يمكن فتحها مباشرة بواسطة التطبيقات، مما يلغي حاجة التطبيقات إلى منطق معقد لاختيار الكاميرا.
  • (Android 11 أو أعلى) بالنسبة إلى جهاز منطقي متعدد الكاميرات يدعم التكبير/التصغير البصري، قم بتنفيذ ANDROID_CONTROL_ZOOM_RATIO API، واستخدم 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 بحيث يتم استخدام قائمة انتظار مخزن مؤقت واحدة لدعم سطحين يواجهان التطبيق، مما يقلل من استهلاك الذاكرة.