النظام الفرعي لواجهة 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 يتم ضبط كل شيء على ON، بالإضافة إلى android.flash.firingPower وandroid.flash.firingTime وandroid.flash.mode
ON_ALWAYS_FLASH Same as ON_AUTO_FLASH
ON_AUTO_FLASH_RED_EYE Same as 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 بالتزامن مع بقية مسار الكاميرا، ولكن لا يمكنه معالجة أكثر من عملية التقاط واحدة في المرة الواحدة.