تربط طبقة تجريد أجهزة الكاميرا (HAL) في Android واجهات برمجة التطبيقات لإطار عمل الكاميرا عالي المستوى في android.hardware.camera2 ببرنامج تشغيل الكاميرا الأساسي وأجهزتها. اعتبارًا من Android 13، يستخدم تطوير واجهة HAL للكاميرا لغة AIDL. قدّم Android 8.0 مشروع Treble، ما أدّى إلى تبديل واجهة برمجة التطبيقات لواجهة HAL للكاميرا إلى واجهة مستقرة محدّدة بلغة وصف واجهة HAL (HIDL). إذا سبق لك تطوير وحدة وبرنامج تشغيل لواجهة HAL للكاميرا في Android 7.0 والإصدارات الأقدم، يُرجى العِلم بالتغييرات الكبيرة في مسار الكاميرا.
واجهة HAL للكاميرا المستندة إلى AIDL
بالنسبة إلى الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، يتضمّن إطار عمل الكاميرا دعمًا لواجهات HAL للكاميرا المستندة إلى AIDL. يدعم إطار عمل الكاميرا أيضًا واجهات HAL للكاميرا المستندة إلى HIDL، ولكن ميزات الكاميرا التي تمت إضافتها في Android 13 أو الإصدارات الأحدث لا تتوفّر إلا من خلال واجهات HAL للكاميرا المستندة إلى AIDL. لتنفيذ هذه الميزات على الأجهزة التي يتم ترقيتها إلى Android 13 أو الإصدارات الأحدث، على الشركات المصنّعة للأجهزة نقل عملية HAL من استخدام واجهات HIDL للكاميرا إلى واجهات AIDL للكاميرا.
للتعرّف على مزايا AIDL، يُرجى الاطّلاع على مقالة AIDL لواجهات HAL.
تنفيذ واجهة HAL للكاميرا المستندة إلى AIDL
للحصول على تنفيذ مرجعي لواجهة HAL للكاميرا المستندة إلى AIDL، يُرجى الاطّلاع على
hardware/google/camera/common/hal/aidl_service/.
تتوفّر مواصفات واجهة HAL للكاميرا المستندة إلى AIDL في المواقع التالية:
- مزوّد الكاميرا:
hardware/interfaces/camera/provider/aidl/ - جهاز الكاميرا:
hardware/interfaces/camera/device/aidl/ - البيانات الوصفية للكاميرا:
hardware/interfaces/camera/metadata/aidl/ - أنواع البيانات الشائعة:
hardware/interfaces/camera/common/aidl/
بالنسبة إلى الأجهزة التي يتم نقلها إلى AIDL، قد تحتاج الشركات المصنّعة للأجهزة إلى تعديل سياسة Android SELinux (sepolicy) وملفات RC استنادًا إلى بنية الرمز.
تأكيد صحة واجهة HAL للكاميرا المستندة إلى AIDL
لاختبار تنفيذ واجهة HAL للكاميرا المستندة إلى AIDL، تأكَّد من اجتياز الجهاز جميع اختبارات CTS وVTS. يقدّم Android 13 اختبار VTS المستند إلى AIDL
،
VtsAidlHalCameraProvider_TargetTest.cpp.
ميزات واجهة HAL للكاميرا 3
الهدف من إعادة تصميم واجهة برمجة التطبيقات Android Camera API هو زيادة قدرة التطبيقات بشكل كبير على التحكّم في النظام الفرعي للكاميرا على أجهزة Android، مع إعادة تنظيم واجهة برمجة التطبيقات لجعلها أكثر فعالية وسهولة في الصيانة. يسهّل عنصر التحكّم الإضافي إنشاء تطبيقات كاميرا عالية الجودة على أجهزة Android يمكنها العمل بشكل موثوق على منتجات متعددة مع الاستمرار في استخدام الخوارزميات الخاصة بالجهاز كلما أمكن ذلك لتحقيق أقصى قدر من الجودة والأداء.
يُعدّ الإصدار 3 من بنى النظام الفرعي للكاميرا أوضاع التشغيل في عرض موحّد واحد، يمكن استخدامه لتنفيذ أي من الأوضاع السابقة والعديد من الأوضاع الأخرى، مثل وضع التصوير المتتابع. يؤدي ذلك إلى تحسين تحكّم المستخدم في التركيز والتعرّض، وإجراء المزيد من المعالجة اللاحقة، مثل تقليل الضوضاء والتباين والحدة. بالإضافة إلى ذلك، يسهّل هذا العرض المبسّط على مطوّري التطبيقات استخدام وظائف الكاميرا المختلفة.
تُصمّم واجهة برمجة التطبيقات النظام الفرعي للكاميرا كمسار يحوّل الطلبات الواردة لالتقاط الإطارات إلى إطارات، بنسبة 1:1. تتضمّن الطلبات جميع معلومات الإعدادات حول التقاط إطار ومعالجته. ويشمل ذلك الدقة وتنسيق البكسل، والتحكّم اليدوي في المستشعر والعدسة والفلاش، وأوضاع تشغيل 3A، والتحكّم في معالجة RAW->YUV، وإنشاء الإحصاءات، وما إلى ذلك.
ببساطة، يطلب إطار عمل التطبيق إطارًا من النظام الفرعي للكاميرا، ويعرض النظام الفرعي للكاميرا النتائج في دفق إخراج. بالإضافة إلى ذلك، يتم إنشاء بيانات وصفية تحتوي على معلومات مثل مساحات الألوان وتظليل العدسة لكل مجموعة من النتائج. يمكنك اعتبار الإصدار 3 من الكاميرا مسارًا إلى دفق أحادي الاتجاه في الإصدار 1 من الكاميرا. يحوّل كل طلب التقاط إلى صورة واحدة يلتقطها المستشعر، تتم معالجتها إلى:
- كائن نتيجة يتضمّن بيانات وصفية حول عملية الالتقاط
- من مخزن مؤقت واحد إلى N من بيانات الصور، كل منها في سطح الوجهة الخاص به
تم ضبط مجموعة أسطح الإخراج الممكنة مسبقًا:
- كل سطح هو وجهة لدفق من المخازن المؤقتة للصور بدقة ثابتة.
- لا يمكن ضبط سوى عدد صغير من الأسطح كإخراجات في وقت واحد (~3).
يحتوي الطلب على جميع إعدادات الالتقاط المطلوبة وقائمة بأسطح الإخراج التي سيتم إرسال المخازن المؤقتة للصور إليها لهذا الطلب (من إجمالي المجموعة التي تم ضبطها). يمكن أن يكون الطلب لمرة واحدة (باستخدام capture())، أو يمكن تكراره إلى أجل غير مسمى (باستخدام setRepeatingRequest()). تحظى عمليات الالتقاط بأولوية أعلى من الطلبات المتكررة.
الشكل 1: نموذج عملية الكاميرا الأساسية
نظرة عامة على واجهة HAL للكاميرا 1
تم تصميم الإصدار 1 من النظام الفرعي للكاميرا على شكل صندوق أسود يتضمّن عناصر تحكّم عالية المستوى وأوضاع التشغيل الثلاثة التالية:
- معاينة
- تسجيل فيديو
- التقاط صورة ثابتة
يتميّز كل وضع بقدرات مختلفة قليلاً ومتداخلة. وقد أدّى ذلك إلى صعوبة تنفيذ ميزات جديدة، مثل وضع التصوير المتتابع، الذي يقع بين وضعَي التشغيل.
الشكل 2: مكوّنات الكاميرا
يواصل Android 7.0 دعم واجهة HAL للكاميرا 1 لأنّ العديد من الأجهزة لا تزال تعتمد عليها. بالإضافة إلى ذلك، تتيح خدمة كاميرا Android تنفيذ كلتا واجهتَي HAL (1 و3)، ما يكون مفيدًا عندما تريد دعم كاميرا أمامية أقل قدرة باستخدام واجهة HAL للكاميرا 1 وكاميرا خلفية أكثر تقدّمًا باستخدام واجهة HAL للكاميرا 3.
تتوفّر وحدة HAL واحدة للكاميرا (برقم إصدار خاص بها رقم الإصدار)، والتي تسرد أجهزة كاميرا متعددة ومستقلة لكل منها رقم إصدار خاص بها. يجب توفّر وحدة الكاميرا 2 أو إصدار أحدث لدعم الأجهزة 2 أو إصدار أحدث، ويمكن أن تتضمّن وحدات الكاميرا هذه مزيجًا من إصدارات أجهزة الكاميرا (هذا ما نقصده عندما نقول إنّ Android يتيح تنفيذ كلتا واجهتَي HAL).