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

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

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

الشكل (1). دعم متعدد الكاميرات

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

أمثلة ومصادر

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

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

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

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

تطبيق

قائمة مراجعة الدعم

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

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

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

خريطة تكوين الدفق

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

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

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

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

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

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

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

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

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

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

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

  • أداء:

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

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

التخصيص

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

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

تصديق

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

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

الاختبارات المشهد 1 والمشهد 4 تعمل مع ITS في واحد في مربع اختبار تلاعب. و test_multi_camera_match يؤكد الاختبار الذي سطوع مركز الصور تتطابق عندما اثنين من كاميرات تمكين كل. و test_multi_camera_alignment يؤكد الاختبار الذي المباعدة الكاميرا، والتوجهات، والمعلمات تشويه يتم تحميل بشكل صحيح. إذا كان النظام متعدد الكاميرات يشتمل على كاميرا Wide FoV (> 90 درجة) ، فإن إصدار rev2 من صندوق ITS مطلوب.

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

تتوفر كافة مربعات من خلال AcuSpec، وشركة ( www.acuspecinc.com ، fred@acuspecinc.com) وMYWAY التصنيع ( www.myway.tw ، sales@myway.tw). بالإضافة إلى ذلك، REV1 مربع ITS يمكن شراؤها عبر غرب مارك ( www.west-mark.com ، dgoodman@west-mark.com).

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

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

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