ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

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

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

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

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

أمثلة ومصادر

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

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

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

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

التنفيذ

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

لإضافة أجهزة منطقية متعددة الكاميرات على جانب 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 استدعاء getPhysicalCameraCharacteristics إرجاع خصائص الكاميرا الفعلية.

تصديق

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

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

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

Sensor_fusion هو جهاز اختبار ثانٍ يتيح الحركة المتكررة Sensor_fusion للهاتف ويؤكد أن الطوابع الزمنية 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).

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

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

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