توضّح هذه الصفحة نظام HAL الفرعي، بما في ذلك الطلبات ونظام الكاميرا الفرعي وتسلسل بدء التشغيل والعمليات ومستويات الأجهزة والتفاعلات.
الطلبات
يصدر إطار عمل التطبيق طلبات للحصول على النتائج التي تم التقاطها إلى نظام الكاميرا الفرعي. يتوافق طلب واحد مع مجموعة واحدة من النتائج. يتضمّن الطلب جميع معلومات الإعدادات المتعلّقة بتسجيل هذه النتائج ومعالجتها. ويشمل ذلك عناصر مثل الدقة وتنسيق البكسل، والتحكّم اليدوي في أداة الاستشعار والعدسة وتثبيت ذاكرة ROM، وأوضاع تشغيل 3A، والتحكّم في معالجة RAW إلى YUV، وإنشاء الإحصاءات. ويتيح ذلك التحكّم بشكل أكبر في ناتج النتائج ومعالجتها. يمكن أن تكون طلبات متعدّدة قيد التنفيذ في الوقت نفسه، كما أنّ إرسال الطلبات لا يحظر تنفيذ عمليات أخرى. وتتم معالجة الطلبات دائمًا حسب ترتيب استلامها.
الشكل 1: طراز الكاميرا
طبقة تجريد الأجهزة (HAL) ونظام الكاميرا الفرعي
يتضمّن نظام الكاميرا الفرعي عمليات تنفيذ المكوّنات في مسار الكاميرا، مثل خوارزمية 3A وعناصر التحكّم في المعالجة. توفّر طبقة HAL للكاميرا واجهات لتنفيذ إصداراتك من هذه المكوّنات. للحفاظ على التوافق بين الأنظمة الأساسية المختلفة لدى العديد من الشركات المصنّعة للأجهزة ومورّدي معالجات إشارات الصور (ISP أو مستشعرات الكاميرا)، يكون نموذج مسار الكاميرا افتراضيًا ولا يتوافق مباشرةً مع أي معالج إشارات صور حقيقي. ومع ذلك، فإنّها تشبه مسارات المعالجة الحقيقية إلى حدّ كبير، ما يتيح لك ربطها بالأجهزة بكفاءة. بالإضافة إلى ذلك، هي مجرّدة بما يكفي للسماح بخوارزميات مختلفة متعددة وترتيبات مختلفة للعمليات بدون التأثير في الجودة أو الكفاءة أو التوافق مع الأجهزة المختلفة.
تتيح سلسلة نقل بيانات الكاميرا أيضًا عمليات تشغيل يمكن لإطار عمل التطبيق بدءها لتفعيل ميزات مثل التركيز التلقائي. ويرسل أيضًا إشعارات إلى إطار عمل التطبيق، لإعلام التطبيقات بأحداث مثل قفل التركيز التلقائي أو الأخطاء.
الشكل 2: مسار الكاميرا
يُرجى العِلم أنّ بعض وحدات معالجة الصور الموضّحة في الرسم البياني أعلاه غير محدّدة بشكل جيد في الإصدار الأوّلي. يفترض مسار الكاميرا ما يلي:
- لا تخضع بيانات RAW Bayer لأي معالجة داخل معالج إشارات الصور.
- يتم إنشاء الإحصاءات استنادًا إلى بيانات جهاز الاستشعار الأولية.
- تكون وحدات المعالجة المختلفة التي تحوّل بيانات جهاز الاستشعار الأولية إلى YUV بترتيب عشوائي.
- على الرغم من عرض وحدات متعددة لتغيير الحجم والاقتصاص، تتشارك جميع وحدات تغيير الحجم عناصر التحكّم في منطقة الإخراج (التكبير الرقمي). ومع ذلك، قد تختلف درجة الدقة وتنسيق البكسل لكل وحدة.
ملخّص استخدام واجهة برمجة التطبيقات
في ما يلي ملخّص موجز لخطوات استخدام واجهة برمجة التطبيقات Android Camera API. راجِع قسم "تسلسل بدء التشغيل والعمليات المتوقّعة" للحصول على تفاصيل حول هذه الخطوات، بما في ذلك طلبات البيانات من واجهة برمجة التطبيقات.
- الاستماع إلى أجهزة الكاميرا وإدراجها
- افتح الجهاز ووصِّل سماعات الأذن.
- اضبط النواتج لحالة الاستخدام المستهدَفة (مثل التقاط صورة ثابتة أو التسجيل).
- إنشاء طلبات لحالة الاستخدام المستهدَفة
- تسجيل/تكرار الطلبات والزيادات المفاجئة
- تلقّي البيانات الوصفية للنتائج وبيانات الصور
- عند التبديل بين حالات الاستخدام، ارجع إلى الخطوة 3.
ملخّص عمليات طبقة تجريد الأجهزة (HAL)
- تأتي الطلبات غير المتزامنة لعمليات الالتقاط من إطار العمل.
- يجب أن يعالج جهاز HAL الطلبات بالترتيب. وبالنسبة إلى كل طلب، يجب إنشاء بيانات وصفية لنتائج الإخراج، ومخزن مؤقت واحد أو أكثر لصور الإخراج.
- يتم التعامل مع الطلبات والنتائج، ومع عمليات البث التي تشير إليها الطلبات اللاحقة، وفقًا لترتيب ورودها.
- يجب أن تكون الطوابع الزمنية متطابقة لجميع النواتج من طلب معيّن، حتى يتمكّن الإطار من مطابقتها معًا عند الحاجة.
- يتم تضمين جميع إعدادات الالتقاط وحالته (باستثناء إجراءات 3A) في الطلبات والنتائج.
الشكل 3: نظرة عامة على طبقة تجريد الأجهزة (HAL) للكاميرا
تسلسل بدء التشغيل والعمليات المتوقّعة
يحتوي هذا القسم على شرح مفصّل للخطوات المتوقّعة عند استخدام واجهة برمجة تطبيقات الكاميرا. للاطّلاع على تعريفات واجهة HIDL، يُرجى الانتقال إلى platform/hardware/interfaces/camera/.
تعداد أجهزة الكاميرا وفتحها وإنشاء جلسة نشطة
- بعد التهيئة، يبدأ إطار العمل في الاستماع إلى أي موفّري كاميرات حاليين ينفّذون واجهة
ICameraProvider. وفي حال توفّر مقدّم خدمة أو أكثر من هذا النوع، يحاول إطار العمل إنشاء اتصال. - يعدّد إطار العمل أجهزة الكاميرا من خلال
ICameraProvider::getCameraIdList. - ينشئ إطار العمل مثيلاً جديدًا من
ICameraDeviceمن خلال استدعاءICameraProvider::getCameraDeviceInterface_VX_Xالمعني. - يستدعي إطار العمل
ICameraDevice::openلإنشاء جلسة تسجيل نشطة جديدة ICameraDeviceSession.
استخدام جلسة كاميرا نشطة
- يستدعي إطار العمل
ICameraDeviceSession::configureStreamsمع قائمة بملفات إدخال/إخراج إلى جهاز HAL. - يطلب إطار العمل الإعدادات التلقائية لبعض حالات الاستخدام من خلال إجراء مكالمات إلى
ICameraDeviceSession::constructDefaultRequestSettings. يمكن أن يحدث ذلك في أي وقت بعد أن ينشئICameraDevice::openICameraDeviceSession. - ينشئ إطار العمل أول طلب التقاط ويرسله إلى طبقة HAL مع إعدادات تستند إلى إحدى مجموعات الإعدادات التلقائية، ومع بث إخراج واحد على الأقل تم تسجيله سابقًا بواسطة إطار العمل. ويتم إرسال هذا الرمز إلى طبقة تجريد الأجهزة (HAL) باستخدام
ICameraDeviceSession::processCaptureRequest. يجب أن تحظر طبقة HAL إرجاع هذه المكالمة إلى أن تصبح جاهزة لإرسال الطلب التالي. - يواصل إطار العمل إرسال الطلبات واستدعاء
ICameraDeviceSession::constructDefaultRequestSettingsللحصول على مخازن مؤقتة للإعدادات التلقائية لحالات الاستخدام الأخرى حسب الحاجة. - عندما يبدأ التقاط طلب (يبدأ المستشعر في التعريض للضوء من أجل الالتقاط)، يستدعي HAL الدالة
ICameraDeviceCallback::notifyمع الرسالة SHUTTER، بما في ذلك رقم اللقطة والطابع الزمني لبدء التعريض للضوء. ليس من الضروري أن يتم تنفيذ وظيفة معاودة الاتصال الخاصة بالإشعار هذه قبل إجراء أول عملية استدعاءprocessCaptureResultلطلب، ولكن لن يتم تسليم أي نتائج إلى تطبيق لعملية تسجيل إلا بعد استدعاءnotifyلعملية التسجيل هذه. - بعد بعض التأخير في خط أنابيب المعالجة، تبدأ طبقة 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 |
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 |
تم إيقاف ميزات "التعرّض التلقائي" و"توازن اللون الأبيض التلقائي" و"التركيز التلقائي". |
AUTO |
يتم استخدام إعدادات AE وAWB وAF الفردية. | |
SCENE_MODE_* |
يمكن تجاهل جميع المَعلمات المذكورة أعلاه. تم إيقاف عناصر التحكّم الفردية في 3A. |
تستند عناصر التحكّم في قسم معالجة الصور في الشكل 2 إلى مبدأ مشابه، ويتضمّن كل قسم ثلاثة أوضاع:
-
OFF: تم إيقاف هذه العملية. لا يمكن إيقاف حظر عمليات إزالة التمويه وتصحيح الألوان وتعديل منحنى الدرجات اللونية. FAST: في هذا الوضع، قد لا تؤدي عملية المعالجة إلى إبطاء معدّل عرض اللقطات مقارنةً بالوضعOFF، ولكن يجب أن تنتج أفضل جودة ممكنة ضمن هذا القيد. يُستخدم هذا الوضع عادةً للمعاينة أو تسجيل الفيديو أو التقاط سلسلة من الصور الثابتة. على بعض الأجهزة، قد يكون هذا الوضع مكافئًا للوضعOFF(لا يمكن إجراء أي معالجة بدون خفض عدد اللقطات في الثانية)، وعلى بعض الأجهزة الأخرى، قد يكون هذا الوضع مكافئًا للوضعHIGH_QUALITY(أفضل جودة لا تؤدي إلى خفض عدد اللقطات في الثانية).HIGH_QUALITY: في هذا الوضع، يجب أن ينتج جزء المعالجة أفضل نتيجة ممكنة من حيث الجودة، مع خفض عدد اللقطات في الثانية عند الحاجة. يتم استخدام هذا الوضع عادةً لالتقاط صور ثابتة عالية الجودة. تتضمّن بعض الحظر عنصر تحكّم يدويًا يمكن اختياره بدلاً منFASTأوHIGH_QUALITY. على سبيل المثال، تتوافق وحدة تصحيح الألوان مع مصفوفة تحويل الألوان، بينما يتوافق تعديل منحنى الدرجات اللونية مع منحنى عشوائي شامل لربط الدرجات اللونية.
إنّ الحد الأقصى لعدد اللقطات في الثانية الذي يمكن أن يوفّره نظام فرعي للكاميرا هو دالة تعتمد على العديد من العوامل:
- درجات الدقة المطلوبة لعمليات بث الصور الناتجة
- توفُّر أوضاع تجميع وحدات البكسل/تخطّيها في أداة التصوير
- معدّل نقل البيانات لواجهة أداة التصوير
- النطاق الترددي لمختلف وحدات معالجة مزود خدمة الإنترنت
يمكن أن تختلف هذه العوامل بشكل كبير بين مختلف موفّري خدمة الإنترنت وأجهزة الاستشعار، لذا تحاول واجهة HAL للكاميرا تجريد قيود النطاق الترددي إلى أبسط نموذج ممكن. يتميّز النموذج المقدَّم بالخصائص التالية:
- يتم دائمًا ضبط وحدة استشعار الصور لعرض أصغر دقة ممكنة بالنظر إلى أحجام بث الإخراج التي طلبها التطبيق. يتم تحديد أصغر دقة على أنّها على الأقل بحجم أكبر دقة مطلوبة لتدفق الإخراج.
- يمكن لأي طلب استخدام أي من مجموعات بث الإخراج التي تم ضبطها حاليًا أو كلها، لذا يجب ضبط المستشعر ومزوّد خدمة الإنترنت (ISP) لإتاحة تغيير حجم عملية التقاط واحدة لتناسب جميع مجموعات البث في الوقت نفسه.
- تتصرّف حِزم JPEG مثل حِزم YUV المعالَجة للطلبات التي لا تتضمّنها، بينما تتصرّف كحِزم JPEG في الطلبات التي تتم الإشارة إليها فيها مباشرةً.
- يمكن أن يعمل معالج JPEG بالتزامن مع بقية مسار الكاميرا، ولكن لا يمكنه معالجة أكثر من عملية التقاط واحدة في المرة الواحدة.