إتاحة واجهة برمجة التطبيقات في Android 9 للكاميرات المتعددة أجهزة من خلال جهاز كاميرا منطقي جديد يتكون من اثنين أو أكثر من الأجهزة أجهزة الكاميرا التي تشير في الاتجاه نفسه. جهاز الكاميرا المنطقي هو الكشف عن جهاز CameraDevice/CaptureSession واحد لتطبيق يسمح التفاعل مع ميزات الكاميرات المتعددة المدمجة HAL. يمكن للتطبيقات بشكل اختياري الوصول إلى أحداث بث الكاميرا المادية والبيانات الوصفية وعناصر التحكّم والتحكّم فيها
الشكل 1. إتاحة استخدام كاميرات متعدّدة
في هذا المخطّط البياني، تكون معرّفات الكاميرات المختلفة مُصنَّفة حسب الألوان. يمكن للتطبيق بث الموارد الاحتياطية الأولية من كل كاميرا فعلية في الوقت نفسه. من المهم أيضًا إمكانية تعيين عناصر تحكم منفصلة وتلقي بيانات وصفية منفصلة من جهات الكاميرات الفعلية.
الأمثلة والمصادر
يجب الإعلان عن الأجهزة ذات الكاميرات المتعددة بواسطة القدرة المنطقية لاستخدام كاميرات متعددة.
يمكن لعملاء الكاميرات الاستعلام عن معرّف الكاميرا للأجهزة الفعلية
الكاميرا المنطقية من خلال استدعاء
getPhysicalCameraIds()
بعد ذلك، يتم استخدام أرقام التعريف التي يتم عرضها كجزء من النتيجة للتحكّم في الأجهزة الفعلية.
كل على حدة من خلال
setPhysicalCameraId()
ويمكن الاستعلام عن نتائج هذه الطلبات الفردية من
النتيجة عن طريق الاستدعاء
getPhysicalCameraResults()
وقد لا تتيح طلبات الكاميرا الفعلية إلا مجموعة فرعية محدودة من
المعلَمات. لتلقّي قائمة بالمعلَمات المتوافقة، يمكن للمطوّرين طلب
getAvailablePhysicalCameraRequestKeys()
لا تتوافق أحداث بث الكاميرا الفعلية إلا مع الطلبات التي لا تتم إعادة معالجتها لأجهزة الاستشعار الأحادية اللون وأجهزة استشعار باير فقط.
التنفيذ
قائمة التحقّق الخاصة بالدعم
لإضافة أجهزة منطقية متعددة الكاميرات إلى جانب HAL:
- إضافة
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
لأي جهاز كاميرا منطقي يدعمه اثنان أو أكثر من الأجهزة الكاميرات التي يتم أيضًا تعرّضها لأحد التطبيقات. - تعبئة العنصر الثابت
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
البيانات الوصفية مع قائمة بمعرفات الكاميرا الفعلية. - تعبئة بيانات التعريف الثابتة ذات الصلة بالعمق المطلوبة للربط بينها
بث الكاميرا الفعلية البكسل:
ANDROID_LENS_POSE_ROTATION
،ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
،ANDROID_LENS_POSE_REFERENCE
. ضبط الثابت
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
البيانات الوصفية من أجل:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: بالنسبة إلى أدوات الاستشعار في الوضع الرئيسي، لا يمكن مزامنة إعدادات الإغلاق أو التعرّض للضوء.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: بالنسبة إلى أدوات الاستشعار في الوضع الثانوي الرئيسي، تتم مزامنة إعدادات الإغلاق/التعرض للضوء.
تعبئة
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
بالإضافة إلى قائمة بالمعلَمات المتوافقة مع الكاميرات الفردية تشير رسالة الأشكال البيانية يمكن أن تكون القائمة فارغة إذا كان الجهاز المنطقي لا يتيح الطلبات الفردية.إذا كانت الطلبات الفردية متاحة، يجب معالجتها وتطبيقها.
physicalCameraSettings
قد تصل كجزء من طلبات الالتقاط وإلحاق الشخصphysicalCameraMetadata
وفقًا لذلك.بالنسبة إلى إصدارات جهاز "كاميرا HAL" رقم 3.5 (تتوفر في Android 10) أو الإصدارات الأحدث، فقم بملء
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
باستخدام معرّف الكاميرا الفعلية النشطة الحالية التي تدعم والكاميرا المنطقية.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل 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_ID في
getCameraIdList
جارٍ الاتصال بالرقمgetPhysicalCameraCharacteristics
خصائص الكاميرا الفعلية.
التحقُّق
يجب أن تجتاز الأجهزة المنطقية المتعددة الكاميرات CTS للكاميرا مثل أي كاميرا عادية أخرى.
يمكن العثور على حالات الاختبار التي تستهدف هذا النوع من الأجهزة في
LogicalCameraDeviceTest
واحدة.
تستهدف اختبارات تقنية المعلومات الثلاثة هذه أنظمة كاميرات متعددة لتسهيل دمج الصور:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
يتم إجراء اختبار المشهد 1 والمشهد 4 باستخدام
اختبار ITS-in-a-box
منصة يؤكد اختبار test_multi_camera_match
أنّ سطوع
يتطابق الجزء الأوسط من الصور عند تفعيل كلتا الكاميرتين. تشير رسالة الأشكال البيانية
يؤكد اختبار test_multi_camera_alignment
أن المسافات بين الكاميرا والاتجاهات
والتشويه بشكل صحيح. إذا كان نظام الكاميرات المتعددة
تتضمن كاميرا بعدسة واسعة الزاوية (أكثر من 90 درجة)، يلزم إصدار rev2 من صندوق تقنية المعلومات.
"Sensor_fusion
" هو جهاز اختبار ثانٍ يتيح استخدام الهاتف الموصوف مجددًا.
الحركة وتؤكد أن الطوابع الزمنية للجيروسكوب ومستشعر الصورة متطابقة وأن
الإطارات ذات الكاميرات المتعددة متزامنة.
جميع الصناديق متوفرة من خلال AcuSpec, Inc. (www.acuspecinc.com، fred@acuspecinc.com) وMYWAY التصنيع (www.myway.tw, sales@myway.tw). بالإضافة إلى ذلك، يمكن شراء جهاز ITS rev1 من خلال شركة West-Mark (www.west-mark.com، dgoodman@west-mark.com).
أفضل الممارسات
الاستفادة الكاملة من الميزات التي توفّرها الكاميرات المتعددة مع الحفاظ على لتوافق التطبيقات، اتبع أفضل الممارسات هذه عند تنفيذ جهاز متعدد الكاميرات:
- (نظام التشغيل Android 10 أو الإصدارات الأحدث) إخفاء الكاميرات الفرعية الفعلية عن
getCameraIdList
ويقلل هذا من عدد الكاميرات التي يمكن فتحها مباشرةً من خلال مما يغنيك عن الحاجة إلى أن يكون لدى التطبيقات منطق معقّد لاختيار الكاميرا. - (نظام التشغيل Android 11 أو الإصدارات الأحدث) لاستخدام كاميرات متعدّدة منطقية
جهاز يتيح التكبير أو التصغير البصري، يمكنك تنفيذ
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.
- إذا كانت أحجام الصفائف النشطة للكاميرات الفعلية مختلفة،
يجب أن تجري طبقة تجريد الأجهزة (HAL) للكاميرا التخطيط من الصفائف النشطة للكاميرات
الصفيف النشط للكاميرا المنطقية لـ
- يبرز الشاشة من خلال نظام التشغيل Android 10، متعدد الكاميرات المنطقية
غير مطلوب لإتاحة مجموعات بث تتضمّن أحداث بث مادي.
إذا كانت HAL متوافقة مع البث المباشر:
- (الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث) للتعامل بشكل أفضل مع الاستخدام مثل العمق من الاستيريو وتتبع الحركة، يجعل مجال الرؤية من مخرجات البث الفعلي بأكبر حجم ممكن للأجهزة ومع ذلك، إذا نشأ البث الفعلي والبث المنطقي من نفس الكاميرا الفعلية، فإن قيود الأجهزة قد تفرض مجال رؤية البث الفعلي ليكون مطابقًا لتدفق المنطقي.
- لمعالجة ضغط الذاكرة الناجم عن عمليات البث المادية المتعددة،
التأكد من استخدام التطبيقات لـ
discardFreeBuffers
تحويل الموارد الاحتياطية المجانية (الموارد الاحتياطية التي يصدرها المستهلك، ولكن لم يوقفها المنتج في قائمة الانتظار) إذا كان من المتوقع أن يكون بث مادي خاملاً لفترة زمنية. - إذا تعذّر البث من كاميرات فعلية مختلفة
مرفق بالطلب نفسه، فتأكد من أن التطبيقات تستخدم
surface group
بحيث يتم استخدام قائمة انتظار واحدة للمخزن المؤقت لدعم سطحين مواجهين للتطبيق، ما يقلل من استهلاك الذاكرة.