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

الطلبات

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الشكل 4. خطوات تشغيل الكاميرا

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

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

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

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

المَعلمة الولاية المواقع الخاضعة للرقابة
android.control.aeMode إيقاف بدون تحديد نمط
تفعيل android.sensor.exposureTime android.sensor.frameDuration android.sensor.sensitivity android.lens.aperture (if supported) android.lens.filterDensity (if supported)
ON_AUTO_FLASH كل شيء مُفعَّل، بالإضافة إلى 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 إيقاف بدون تحديد نمط
WHITE_BALANCE_* android.colorCorrection.transform. تعديلات خاصة بالنظام الأساسي إذا كانت قيمة android.colorCorrection.mode هي FAST أو HIGH_QUALITY
android.control.afMode إيقاف بدون تحديد نمط
FOCUS_MODE_* android.lens.focusDistance
android.control.videoStabilization إيقاف بدون تحديد نمط
تفعيل يمكن ضبط android.scaler.cropRegion لتنفيذ ميزة "تثبيت الفيديو".
android.control.mode إيقاف إيقاف ميزات "التعرّض التلقائي" و"توازن اللون الأبيض التلقائي" و"التركيز التلقائي"
تلقائي يتم استخدام إعدادات فردية للتعرّض التلقائي للضوء وتوازن اللون الأبيض والتركيز التلقائي
SCENE_MODE_* يمكنه تجاهل جميع المَعلمات المذكورة أعلاه. تم إيقاف عناصر التحكّم الفردية في ميزات "التركيز التلقائي" و"تعديل التعرّض للضوء" و"توازن اللون الأبيض".

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

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

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

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

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

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