مَعلمات الجلسة

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

في Android 10، يمكنك تحسين الأداء باستخدام ميزة طلب إعادة إعداد الجلسة الاختيارية للتحكّم بشكل أكبر في منطق إعادة إعداد مَعلمات الجلسة الداخلية. لمزيد من المعلومات، يُرجى الاطّلاع على طلب إعادة إعداد الجلسة.

الأمثلة والمصدر

يتضمّن CameraHal حاليًا عملية تنفيذ مرجعية لمَعلمة الجلسة. تستخدِم طبقة تجريد الأجهزة هذه واجهة برمجة التطبيقات القديمة لطبقة تجريد الأجهزة. يجب أن تستخدِم CameraHal المُربّط الذي ينفّذ واجهة برمجة تطبيقات الكاميرا HIDL إدخال sessionParams الخاص بها للوصول إلى أي مَعلمات جلسة واردة جديدة أثناء إعداد البث.

يمكن لعملاء الكاميرا طلب مفاتيح جميع مَعلمات الجلسة المتوافقة من خلال استدعاء getAvailableSessionKeys() وضبط قيمها الأولية في النهاية من خلال setSessionParameters().

التنفيذ

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

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

يراقب إطار العمل جميع الطلبات الواردة، وإذا رصد تغييرًا في قيمة مَعلمة الجلسة، يعيد إعداد الكاميرا داخليًا. يتضمّن إعداد البث الجديد الذي يتم تمريره إلى CameraHal بعد ذلك قيم مَعلمات الجلسة المعدَّلة، والتي تُستخدَم لإعداد خط أنابيب الكاميرا بكفاءة أكبر.

التخصيص

يمكنك تحديد العلامات في قائمة مَعلمات الجلسة المتاحة التي يتم ملؤها على جانب CameraHal. لا تكون هذه الميزة نشطة إذا تركت CameraHal قائمة مَعلمات الجلسة المتاحة فارغة.

التحقق من صحة البيانات

يتضمّن اختبار التوافق (CTS) الحالات الجديدة التالية لاختبار مَعلمات الجلسة:

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

يجب اختيار مَعلمات الجلسة بعناية. يجب ألا تتغيّر القيم بشكل متكرّر، إن تغيّرت على الإطلاق، بين عمليات إعداد البث. إنّ المَعلمات التي تتغيّر بشكل متكرّر، مثل هدف الالتقاط، غير مناسبة، وقد يؤدي إضافتها إلى قائمة مَعلمات الجلسة إلى حدوث أعطال في مجموعة أدوات اختبار التوافق (CTS) بسبب إعادة الإعداد الداخلي المفرط.

طلب إعادة إعداد الجلسة

يقدّم Android 10 ميزة طلب إعادة إعداد الجلسة الاختيارية لتحسين الأداء، لأنّ عمليات إعادة إعداد البث الداخلية الناتجة عن تعديلات قيمة مَعلمة الجلسة يمكن أن تقلّل من الأداء. لمعالجة هذه المشكلة، يتيح الإصدار 3.5 والإصدارات الأحدث من ICameraDeviceSession في HIDL طريقة isReconfigurationRequired التي توفّر تحكّمًا دقيقًا في منطق إعادة إعداد مَعلمات الجلسة الداخلية. باستخدام هذه الطريقة، يمكن إعادة إعداد البث بدقة عند الحاجة.

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

يتم تنفيذ هذه الميزة في خدمة الكاميرا وطبقة تجريد أجهزة الكاميرا فقط. لا تتوفّر واجهات برمجة تطبيقات متاحة للجميع. إذا تم تنفيذ هذه الميزة، من المفترض أن يلاحظ عملاء الكاميرا تحسينات في الأداء عند استخدام مَعلمات الجلسة.

التنفيذ

لدعم طلبات إعادة إعداد الجلسة، يجب تنفيذ الـ isReconfigurationRequired للتحقّق مما إذا كانت هناك حاجة إلى إعادة إعداد البث بالكامل لقيم مَعلمات الجلسة الجديدة.

إذا غيّر العميل قيمة أي مَعلمة جلسة معلَن عنها، يستدعي إطار عمل الكاميرا طريقة isReconfigurationRequired. استنادًا إلى القيم المحدّدة، تحدّد طبقة تجريد الأجهزة ما إذا كانت هناك حاجة إلى إعادة إعداد البث بالكامل. إذا عرضت طبقة تجريد الأجهزة القيمة false، يتخطّى إطار عمل الكاميرا عملية إعادة الإعداد الداخلية. إذا عرضت طبقة تجريد الأجهزة القيمة true، يعيد إطار العمل إعداد عمليات البث ويمرّر قيم مَعلمات الجلسة الجديدة وفقًا لذلك.

يمكن لإطار العمل استدعاء طريقة isReconfigurationRequired قبل فترة من إرسال طلب يتضمّن مَعلمات جديدة إلى طبقة تجريد الأجهزة، ويمكن إلغاء الطلب قبل إرساله. لذلك، يجب ألا تستخدِم طبقة تجريد الأجهزة استدعاء الطريقة هذا لتغيير سلوكها بأي شكل من الأشكال.

يجب أن يستوفي تنفيذ طبقة تجريد الأجهزة المتطلبات التالية:

  • يجب أن يكون إطار العمل قادرًا على استدعاء طريقة isReconfigurationRequired في أي وقت بعد إعداد الجلسة النشطة.
  • يجب ألا يكون هناك أي تأثير في أداء طلبات الكاميرا المعلقة. على وجه الخصوص، يجب ألا تحدث أي أعطال أو حالات تأخير أثناء البث العادي للكاميرا.

يجب أن يستوفي الجهاز وتنفيذ طبقة تجريد الأجهزة متطلبات الأداء التالية:

  • يجب عدم تغيير إعدادات الكاميرا للأجهزة والبرامج.
  • يجب ألا يكون هناك أي تأثير مرئي للمستخدم في أداء الكاميرا.

تأخذ طريقة isReconfigurationRequired الوسيطات التالية:

  • oldSessionParams: مَعلمات الجلسة من الجلسة السابقة. عادةً ما تكون مَعلمات الجلسة الحالية.
  • newSessionParams: مَعلمات الجلسة الجديدة التي يضبطها العميل.

رموز حالة الإرجاع المتوقّعة هي:

  • OK: طلب ناجح لإعادة الإعداد.
  • METHOD_NOT_SUPPORTED: لا يتيح جهاز الكاميرا طلب إعادة الإعداد.
  • INTERNAL_ERROR: لا يمكن إكمال طلب إعادة الإعداد بسبب خطأ داخلي.

القيم المعروضة هي:

  • true: يجب إعادة إعداد البث.
  • false: ليس من الضروري إعادة إعداد البث.

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

التحقق من صحة البيانات

يمكن التحقق من صحة ميزة طلب إعادة إعداد الجلسة باستخدام حالة اختبار VTS في CameraHidlTest#configureStreamsWithSessionParameters.