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

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

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

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13 أو الإصدارات الأحدث، يتضمّن إطار عمل الكاميرا التوافق مع طبقة تجريد الأجهزة (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 في المواضع التالية:

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

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

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

ميزات HAL3 للكاميرا

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

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

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

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

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

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

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

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

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

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

نظرة عامة على كاميرا HAL1

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

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

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

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

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

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

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