النظام الفرعي لواجهة HAL

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

الطلبات

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

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

الشكل 1: طراز الكاميرا

طبقة تجريد الأجهزة والنظام الفرعي للكاميرا

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

يدعم مسار الكاميرا أيضًا المشغّلات التي يمكن أن يبدأها إطار التطبيق لتفعيل عناصر مثل التركيز التلقائي. كما يُرسِل إشعارات إلى إطار التطبيق، لإعلام التطبيقات بالأحداث مثل قفل التركيز التلقائي أو الأخطاء.

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

الشكل 2: مسار الكاميرا

يُرجى العِلم أنّ بعض وحدات معالجة الصور الموضّحة في الرسم البياني أعلاه غير محدّدة جيدًا في الإصدار الأولي. يستند مسار الكاميرا إلى الافتراضات التالية:

  • لا تخضع بيانات RAW Bayer التي يتم إخراجها لأي معالجة داخل معالج إشارات الصور.
  • يتم إنشاء الإحصاءات استنادًا إلى بيانات جهاز الاستشعار الأولية.
  • تكون وحدات المعالجة المختلفة التي تحوّل بيانات جهاز الاستشعار الأولية إلى YUV بترتيب عشوائي.
  • على الرغم من عرض وحدات متعدّدة لتعديل الحجم والاقتصاص، تشترك جميع وحدات تعديل الحجم في الـ تحكّم في منطقة الإخراج (التكبير الرقمي). ومع ذلك، قد يكون لكل وحدة دقة إخراج وتنسيق بكسل مختلفان.

ملخّص عن استخدام واجهة برمجة التطبيقات

في ما يلي ملخّص موجز عن خطوات استخدام واجهة برمجة التطبيقات للكاميرا في Android. راجِع قسم تسلسل بدء التشغيل والعمليات المتوقّعة للحصول على تفاصيل عن هذه الخطوات، بما في ذلك طلبات واجهة برمجة التطبيقات.

  1. الاستماع إلى أجهزة الكاميرا وإدراجها
  2. فتح الجهاز وربط المستمعين
  3. ضبط عمليات الإخراج لحالة الاستخدام المستهدَفة (مثل التقاط صورة ثابتة أو تسجيل فيديو)
  4. إنشاء طلبات لحالة الاستخدام المستهدَفة
  5. التقاط/تكرار الطلبات واللقطات المتسلسلة
  6. تلقّي البيانات الوصفية للنتائج وبيانات الصور
  7. عند التبديل بين حالات الاستخدام، عليك الرجوع إلى الخطوة 3.

ملخّص عن عمليات طبقة تجريد الأجهزة

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

الشكل 3: نظرة عامة على طبقة تجريد الأجهزة للكاميرا

تسلسل بدء التشغيل والعمليات المتوقّعة

يحتوي هذا القسم على شرح مفصّل للخطوات المتوقّعة عند استخدام واجهة برمجة التطبيقات للكاميرا. للحصول على تعريفات واجهة HIDL، يُرجى الاطّلاع على platform/hardware/interfaces/camera/.

إدراج أجهزة الكاميرا وفتحها وإنشاء جلسة نشطة

  1. بعد التهيئة، يبدأ إطار العمل في الاستماع إلى أيّ من موفّري الكاميرا الحاليين الذين ينفّذون واجهة ICameraProvider. إذا كان هناك موفّر أو موفّرون من هذا النوع، يحاول إطار العمل إنشاء اتصال.
  2. يُدرِج الإطار أجهزة الكاميرا من خلال ICameraProvider::getCameraIdList.
  3. ينشئ الإطار مثيلاً جديدًا من ICameraDevice من خلال استدعاء ICameraProvider::getCameraDeviceInterface_VX_X المعني.
  4. يستدعي الإطار ICameraDevice::open لإنشاء جلسة التقاط نشطة جديدة ICameraDeviceSession.

استخدام جلسة كاميرا نشطة

  1. يستدعي إطار العمل ICameraDeviceSession::configureStreams مع قائمة ببث الإدخال/الإخراج إلى جهاز طبقة تجريد الأجهزة.
  2. يطلب إطار العمل الإعدادات التلقائية لبعض حالات الاستخدام من خلال استدعاءات إلى ICameraDeviceSession::constructDefaultRequestSettings. يمكن أن يحدث ذلك في أي وقت بعد إنشاء ICameraDeviceSession من خلال ICameraDevice::open.
  3. ينشئ إطار العمل أول طلب التقاط ويُرسِله إلى طبقة تجريد الأجهزة (HAL) مع إعدادات تستند إلى إحدى مجموعات الإعدادات التلقائية، ومع بث إخراج واحد على الأقل سبق أن سجّله إطار العمل. يتم إرسال ذلك إلى طبقة تجريد الأجهزة باستخدام ICameraDeviceSession::processCaptureRequest. يجب أن تحظر طبقة تجريد الأجهزة إرجاع هذا الاستدعاء إلى أن تصبح جاهزة لإرسال الطلب التالي.
  4. يواصل إطار العمل إرسال الطلبات ويستدعي ICameraDeviceSession::constructDefaultRequestSettings للحصول على مخازن مؤقتة للإعدادات التلقائية لحالات الاستخدام الأخرى حسب الحاجة.
  5. عند بدء التقاط طلب (يبدأ المستشعر في عرض لقطات الالتقاط)، تستدعي طبقة تجريد الأجهزة ICameraDeviceCallback::notify مع رسالة SHUTTER، بما في ذلك رقم الإطار والطابع الزمني لبدء العرض. ليس من الضروري أن يحدث رد الاتصال `notify` هذا قبل أول processCaptureResult لطلب معيّن، ولكن لا يتم تسليم أي نتائج إلى أحد التطبيقات لعملية التقاط إلى أن يتم استدعاء notify لعملية الالتقاط هذه.
  6. بعد بعض التأخير في المسار، تبدأ طبقة تجريد الأجهزة في إرجاع عمليات الالتقاط المكتملة إلى الإطار باستخدام ICameraDeviceCallback::processCaptureResult. ويتم إرجاعها بالترتيب نفسه الذي تم إرسال الطلبات به. يمكن أن تكون هناك طلبات متعدّدة قيد المعالجة في الوقت نفسه، وذلك حسب عمق مسار جهاز طبقة تجريد الأجهزة للكاميرا.

بعد فترة من الوقت، يحدث أحد الإجراءات التالية:

  • يتوقف إطار العمل عن إرسال طلبات جديدة، وينتظر اكتمال عمليات الالتقاط الحالية (ملء جميع المخازن المؤقتة وإرجاع جميع النتائج)، ثم يستدعي ICameraDeviceSession::configureStreams مرة أخرى. يؤدي ذلك إلى إعادة ضبط أجهزة الكاميرا ومسارها لمجموعة جديدة من بث الإدخال/الإخراج. يمكن إعادة استخدام بعض البث من الإعدادات السابقة. يواصل الإطار بعد ذلك من أول طلب التقاط إلى طبقة تجريد الأجهزة، إذا كان هناك بث إخراج مسجّل واحد على الأقل. (وإلا، ICameraDeviceSession::configureStreams مطلوب أولاً).
  • يمكن أن يستدعي الإطار ICameraDeviceSession::close لإنهاء جلسة الكاميرا. يمكن استدعاء ذلك في أي وقت عندما لا تكون هناك أي استدعاءات أخرى نشطة من الإطار، على الرغم من أنّ الاستدعاء قد يتم حظره إلى أن تكتمل جميع عمليات الالتقاط قيد المعالجة (إرجاع جميع النتائج وملء جميع المخازن المؤقتة ). بعد إرجاع استدعاء close، لا يُسمح لطبقة تجريد الأجهزة بإجراء أي استدعاءات أخرى لـ ICameraDeviceCallback بمجرد بدء استدعاء close، لا يمكن للإطار استدعاء أي وظائف أخرى لطبقة تجريد الأجهزة.
  • في حال حدوث خطأ أو حدث غير متزامن آخر، يجب أن تستدعي طبقة تجريد الأجهزة ICameraDeviceCallback::notify مع رسالة الخطأ/الحدث المناسبة. بعد إرجاع إشعار بخطأ فادح على مستوى الجهاز، يجب أن تتصرف طبقة تجريد الأجهزة كما لو تم استدعاء close عليها. ومع ذلك، يجب أن تلغي طبقة تجريد الأجهزة جميع عمليات الالتقاط المعلقة أو تُكملها قبل استدعاء notify، حتى لا يتلقّى الإطار عمليات رد اتصال أخرى من الجهاز بعد استدعاء notify مع خطأ فادح. يجب أن تُرجِع الطرق بخلاف close القيمة -ENODEV أو NULL بعد أن تُرجِع طريقة notify رسالة خطأ فادح.
خطوات عمليات الكاميرا

الشكل 4: سير العمليات في الكاميرا

مستويات الأجهزة

يمكن أن تنفّذ أجهزة الكاميرا عدة مستويات من الأجهزة حسب إمكاناتها. لمزيد من المعلومات، يُرجى الاطّلاع على مستوى الأجهزة المتوافق.

التفاعل بين طلب التقاط التطبيق والتحكّم في 3A ومسار المعالجة

استنادًا إلى الإعدادات في وحدة التحكّم في 3A، يتجاهل مسار الكاميرا بعض المَعلمات في طلب التقاط التطبيق ويستخدم القيم التي توفّرها إجراءات التحكّم في 3A بدلاً من ذلك. على سبيل المثال، عندما يكون التعرّض التلقائي مفعّلاً، تتحكّم خوارزمية 3A للنظام الأساسي في وقت التعرّض ومدة الإطار وحساسية المستشعر، ويتم تجاهل أي قيم يحدّدها التطبيق. يجب الإبلاغ عن القيم التي تختارها إجراءات 3A للإطار في البيانات الوصفية للإخراج. يوضّح الجدول التالي الأوضاع المختلفة لوحدة التحكّم في 3A والخصائص التي تتحكّم فيها هذه الأوضاع. يُرجى الاطّلاع على ملف platform/system/media/camera/docs/docs.html للحصول على تعريفات هذه الخصائص.

المَعلمة الولاية الخصائص التي يتم التحكّم فيها
android.control.aeMode OFF بدون
ON android.sensor.exposureTime، android.sensor.frameDuration، android.sensor.sensitivity، android.lens.aperture (إذا كان ذلك متاحًا)، وandroid.lens.filterDensity (إذا كان ذلك متاحًا).
ON_AUTO_FLASH كل شيء ON، بالإضافة إلى android.flash.firingPower، android.flash.firingTime، وandroid.flash.mode.
ON_ALWAYS_FLASH الإعداد نفسه في ON_AUTO_FLASH
ON_AUTO_FLASH_RED_EYE الإعداد نفسه في ON_AUTO_FLASH
android.control.awbMode OFF بدون
WHITE_BALANCE_* android.colorCorrection.transform. عمليات الضبط الخاصة بالنظام الأساسي إذا كان android.colorCorrection.mode هو FAST أو HIGH_QUALITY
android.control.afMode OFF بدون
FOCUS_MODE_* android.lens.focusDistance
android.control.videoStabilization OFF بدون
ON يمكن ضبط android.scaler.cropRegion لتنفيذ ميزة تثبيت الفيديو.
android.control.mode OFF يتم إيقاف التعرّض التلقائي (AE) وتوازن اللون الأبيض التلقائي (AWB) والتركيز التلقائي (AF).
AUTO يتم استخدام إعدادات التعرّض التلقائي وتوازن اللون الأبيض التلقائي والتركيز التلقائي الفردية.
SCENE_MODE_* يمكن تجاوز جميع المَعلمات المذكورة أعلاه. يتم إيقاف عناصر التحكّم الفردية في 3A.

تعمل عناصر التحكّم في وحدة معالجة الصور في الشكل 2 على مبدأ مماثل، وتحتوي كل وحدة على ثلاثة أوضاع:

  • OFF: يتم إيقاف وحدة المعالجة هذه. لا يمكن إيقاف وحدات إزالة التشويه وتصحيح الألوان و ضبط منحنى الدرجة اللونية.
  • FAST: في هذا الوضع، قد لا تؤدي وحدة المعالجة إلى إبطاء معدّل الإطارات الناتج مقارنةً بالوضع OFF، ولكن يجب أن تُنتج أفضل جودة ممكنة للإخراج في ظل هذا القيد. عادةً ما يتم استخدام ذلك لـ أوضاع المعاينة أو تسجيل الفيديو أو التقاط لقطات متسلسلة للصور الثابتة. على بعض الأجهزة، قد يكون هذا الوضع مكافئًا للوضع OFF (لا يمكن إجراء أي معالجة بدون إبطاء عدد اللقطات في الثانية)، وعلى بعض الأجهزة، قد يكون هذا الوضع مكافئًا للوضع HIGH_QUALITY (أفضل جودة لا تؤدي إلى إبطاء عدد اللقطات في الثانية).
  • HIGH_QUALITY: في هذا الوضع، يجب أن تُنتج وحدة المعالجة أفضل نتيجة ممكنة من حيث الجودة، مع إبطاء عدد اللقطات في الثانية الناتج حسب الحاجة. عادةً ما يتم استخدام ذلك لالتقاط صور ثابتة عالية الجودة. تتضمّن بعض الوحدات عنصر تحكّم يدوي يمكن اختياره اختياريًا بدلاً من FAST أو HIGH_QUALITY. على سبيل المثال، تدعم وحدة تصحيح الألوان مصفوفة تحويل الألوان ، بينما يدعم ضبط منحنى الدرجة اللونية منحنى عشوائيًا لضبط الدرجة اللونية على مستوى العالم.

إنّ الحد الأقصى لعدد اللقطات في الثانية الذي يمكن أن يدعمه النظام الفرعي للكاميرا هو دالة للعديد من العوامل:

  • الدقة المطلوبة لبث صور الإخراج
  • مدى توفّر أوضاع التجميع/التخطّي على جهاز التصوير
  • معدّل نقل البيانات لواجهة جهاز التصوير
  • معدّل نقل البيانات لوحدات معالجة معالج إشارات الصور المختلفة

يمكن أن تختلف هذه العوامل بشكل كبير بين معالجات إشارات الصور والمستشعرات المختلفة، لذا تحاول واجهة طبقة تجريد الأجهزة للكاميرا تجريد قيود معدّل نقل البيانات إلى نموذج بسيط قدر الإمكان. يتميّز النموذج المقدَّم بالخصائص التالية:

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