طبقة تجريد الأجهزة (HAL) للكاميرا

تربط طبقة HAL لأجهزة الكاميرا في Android بين واجهتَي برمجة التطبيقات ذات المستوى الأعلى لإطار عمل الكاميرا في android.hardware.camera2 وبرامج تشغيل الكاميرا والأجهزة الأساسية. بدءًا من Android 13، يستخدم تطوير واجهة HAL للكاميرا AIDL. طرح نظام التشغيل Android 8.0 Treble، الذي ينقل واجهة برمجة التطبيقات Camera HAL API إلى واجهة ثابتة تحدّدها لغة وصف واجهة HAL (HIDL). إذا سبق لك تطوير وحدة HAL للكاميرا وبرنامج تشغيلها لنظام التشغيل Android 7.0 والإصدارات الأقدم، عليك الانتباه إلى التغيُّرات المهمة في مسار معالجة الكاميرا.

طبقة HAL لكاميرا لغة تعريف واجهة نظام Android

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13 أو إصدار أحدث، يتضمّن إطار عمل الكاميرا إمكانية استخدام واجهات برمجة التطبيقات لواجهة HAL للكاميرا المستندة إلى AIDL. يتيح إطار عمل الكاميرا أيضًا استخدام واجهات HAL للكاميرا من HIDL، ولكن ميزات الكاميرا التي تمت إضافتها في Android 13 أو الإصدارات الأحدث لا تتوفّر إلا من خلال واجهات HAL للكاميرا من AIDL. لتنفيذ هذه الميزات على الأجهزة التي يتم ترقيتها إلى Android 13 أو إصدار أحدث، على المصنّعين نقل عملية HAL من استخدام واجهات كاميرا HIDL إلى واجهات كاميرا AIDL.

للتعرّف على مزايا AIDL، اطّلِع على مقالة AIDL لواجهة HAL.

تنفيذ طبقة HAL للكاميرا باستخدام لغة تعريف واجهة نظام Android ‏(AIDL)

للحصول على مرجع لتنفيذ واجهة برمجة تطبيقات لكاميرا AIDL، يُرجى الاطّلاع على hardware/google/camera/common/hal/aidl_service/.

تتوفّر مواصفات HAL للكاميرا في AIDL في المواضع التالية:

بالنسبة إلى الأجهزة التي يتم نقلها إلى AIDL، قد تحتاج الشركات المصنّعة للأجهزة إلى تعديل سياسة Android SELinux (sepolicy) وملفات RC استنادًا إلى بنية الرمز المبرمَج.

التحقّق من صحة HAL لكاميرا AIDL

لاختبار تنفيذ HAL لكاميرا AIDL، تأكَّد من أنّ الجهاز يجتاز جميع اختبارات CTS وVTS. يقدّم الإصدار 13 من Android اختبار فحص سلامة النقل (VTS) لـ AIDL، VtsAidlHalCameraProvider_TargetTest.cpp.

ميزات Camera HAL3

يهدف إعادة تصميم Android Camera API إلى زيادة قدرة التطبيقات على التحكّم بشكل كبير في النظام الفرعي للكاميرا على أجهزة Android، مع إعادة تنظيم واجهة برمجة التطبيقات لجعلها أكثر فعالية وسهولة في الصيانة. تسهّل ميزة التحكّم الإضافية إنشاء تطبيقات كاميرا عالية الجودة على أجهزة Android التي يمكنها العمل بشكل موثوق على منتجات متعددة مع مواصلة استخدام الخوارزميات الخاصة بالأجهزة كلما أمكن ذلك لزيادة الجودة والأداء إلى أقصى حد.

يصِغ الإصدار 3 من النظام الفرعي للكاميرا أوضاع التشغيل في عرض موحّد واحد يمكن استخدامه لتنفيذ أي من الأوضاع السابقة والعديد من الأوضاع الأخرى، مثل وضع "التقاط الصور المتتالية". ويؤدي ذلك إلى قدرة المستخدم على التحكّم بشكل أفضل في التركيز والتعريض وإجراء المزيد من عمليات المعالجة اللاحقة، مثل تقليل الضوضاء والتباين والتوضيح. بالإضافة إلى ذلك، تسهّل هذه الطريقة المبسّطة على مطوّري التطبيقات استخدام وظائف الكاميرا المختلفة.

تنشئ واجهة برمجة التطبيقات نموذجًا للنظام الفرعي للكاميرا على أنّه مسار تحويل يحوّل الطلبات الواردة لالتقاط اللقطات إلى لقطات، على أساس 1:1. تُحاط الطلبات بجميع معلومات الضبط حول التقاط الإطار ومعالجته. ويشمل ذلك درجة الدقة وتنسيق البكسل، والتحكّم اليدوي في أداة الاستشعار والعدسة والفلاش، ووضعَي التشغيل 3A، والتحكّم في معالجة تنسيق RAW إلى تنسيق YUV، وإنشاء الإحصاءات، وغيرها.

بعبارة بسيطة، يطلب إطار عمل التطبيق إطارًا من المنظومة الفرعية للكاميرا، وتُرجع المنظومة الفرعية للكاميرا النتائج إلى بث الإخراج. بالإضافة إلى ذلك، يتم إنشاء بيانات وصفية تحتوي على معلومات مثل مساحات الألوان وتظليل عدسة لكل مجموعة من النتائج. يمكنك اعتبار الإصدار 3 من الكاميرا كمسار لبث الإصدار 1 من الكاميرا في اتجاه واحد. ويحوّل كل طلب التقاط إلى صورة واحدة يلتقطها أداة الاستشعار، ويتم معالجتها إلى:

  • عنصر نتيجة يتضمّن بيانات وصفية عن عملية الالتقاط
  • من واحد إلى N مخزن مؤقت لبيانات الصور، كلّ منها في سطحه المقصود

تم ضبط مجموعة مساحات العرض المحتمَلة مسبقًا:

  • كل سطح هو وجهة لبثّ وحدات تخزين مؤقت للصور بدرجة دقة ثابتة.
  • لا يمكن ضبط سوى عدد صغير من مساحات العرض كمَخرجات في المرة الواحدة (3 تقريبًا).

يحتوي الطلب على جميع إعدادات الالتقاط المطلوبة وقائمة مساحات سطح الإخراج التي يتم دفع وحدات تخزين مؤقت للصور إليها لهذا الطلب (من إجمالي مجموعة مساحات السطح التي تم ضبطها). يمكن أن يكون الطلب لمرة واحدة (مع capture())، أو قد تتمّ إعادته إلى أجل غير مسمى (مع setRepeatingRequest()). وتكون عمليات الالتقاط لها الأولوية على الطلبات المتكرّرة.

نموذج بيانات الكاميرا

الشكل 1: نموذج التشغيل الأساسي للكاميرا

نظرة عامة على Camera HAL1

تم تصميم الإصدار 1 من النظام الفرعي للكاميرا كصندوق أسود يحتوي على عناصر تحكّم رفيعة المستوى ووضعَي التشغيل التاليَين:

  • معاينة
  • تسجيل الفيديو
  • التقاط الصور الثابتة

ولكل وضع قدرات مختلفة ومتداخلة قليلاً. وقد جعل ذلك من الصعوبة تنفيذ ميزات جديدة، مثل وضع "التقاط الصور المتتالية" الذي يقع بين وضعَين من أوضاع التشغيل.

مخطّط الكاميرا البياني

الشكل 2: مكونات الكاميرا

يواصل نظام التشغيل Android 7.0 إتاحة طبقة HAL1 للكاميرا لأنّ العديد من الأجهزة لا تزال تعتمد عليها. بالإضافة إلى ذلك، تتيح خدمة كاميرا Android تنفيذ كلتا طبقتَي HAL (1 و3)، وهو أمر مفيد عندما تريد توفير كاميرا أمامية أقل قدرة باستخدام كاميرا HAL1 وكاميرا خلفية أكثر تقدّمًا باستخدام كاميرا HAL3.

تتوفّر وحدة واحدة من HAL للكاميرا (التي تتضمّن رقم الإصدار الخاص بها)، والتي تسرد عدة أجهزة كاميرا مستقلة لكل منها رقم إصدار خاص به. يجب استخدام وحدة الكاميرا 2 أو إصدار أحدث للتوافق مع الأجهزة 2 أو الإصدارات الأحدث، ويمكن أن تتضمّن وحدات الكاميرا هذه مزيجًا من إصدارات أجهزة الكاميرا (هذا ما نقصده عندما نقول أنّ نظام التشغيل Android متوافق مع تنفيذ كلٍّ من طبقتَي HAL).