تقلّل ميزة "مَعلمات الجلسة" من حالات التأخير من خلال السماح لبرامج الكاميرا بتفعيل إعدادات المجموعة الفرعية من مَعلمات الطلب المكلفة، أي مَعلمات الجلسة، كجزء من مرحلة إعداد جلسة الالتقاط. باستخدام هذه الميزة، تتلقّى عمليات تنفيذ HAL مَعلمات العميل أثناء مرحلة إعداد البث بدلاً من طلب الالتقاط الأول، ويمكنها، بناءً على قيمها، إعداد البنية الأساسية الداخلية وإنشاؤها بشكل أكثر فعالية.
في نظام التشغيل Android 10، يمكنك تحسين الأداء باستخدام ميزة طلب إعادة ضبط إعدادات الجلسة الاختيارية للتحكّم بشكل أكبر في منطق إعادة ضبط إعدادات مَعلمات الجلسة الداخلية. لمزيد من المعلومات، اطّلِع على طلب إعادة ضبط الجلسة.
أمثلة ومصدر
يتضمّن CameraHal حاليًا عملية تنفيذ مَعلمات جلسة مرجعية. تستخدِم طبقة تجريد الأجهزة هذه واجهة برمجة التطبيقات القديمة لطبقة تجريد الأجهزة. يجب أن تستخدم واجهة CameraHal المستندة إلى Binder التي تنفّذ واجهة برمجة تطبيقات HIDL للكاميرا إدخال sessionParams الخاص بواجهة HIDL للوصول إلى أي مَعلمات جلسة واردة جديدة أثناء ضبط إعدادات البث.
يمكن لبرامج الكاميرا استعلام مفاتيح جميع مَعلمات الجلسة المتوافقة من خلال استدعاء
getAvailableSessionKeys()
ويمكنها في النهاية ضبط قيمها الأولية من خلال
setSessionParameters()
.
التنفيذ
يجب أن تتضمّن عملية تنفيذ CameraHal
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ضمن البيانات الوصفية الثابتة الخاصة بالكاميرا، وأن توفّر مجموعة فرعية من
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
،
التي تحتوي على قائمة بالمفاتيح التي يصعب تطبيقها على كل إطار ويمكن أن تؤدي إلى حدوث تأخيرات غير متوقعة عند تعديلها أثناء مدة جلسة الالتقاط.
وتشمل الأمثلة النموذجية المَعلمات التي تتطلّب إعادة ضبط الأجهزة بشكل يستغرق وقتًا طويلاً أو تغييرًا في مسار الكاميرا الداخلي. سيظل بإمكانك التحكّم في مَعلمات الجلسة في طلبات الالتقاط، ولكن يجب أن يكون العملاء على دراية بالتأخيرات المتوقّعة في تطبيقاتهم.
يراقب إطار العمل جميع الطلبات الواردة، وإذا رصد تغييرًا في قيمة مَعلمة الجلسة، يعيد ضبط إعدادات الكاميرا داخليًا. تتضمّن إعدادات البث الجديدة التي يتم تمريرها إلى CameraHal قيم مَعلمات الجلسة المعدَّلة، والتي تُستخدَم لإعداد مسار الكاميرا بشكل أكثر كفاءة.
التخصيص
يمكنك تحديد العلامات في قائمة مَعلمات الجلسة المتاحة التي يتم ملؤها على جانب CameraHal. لا تكون هذه الميزة نشطة إذا تركت CameraHal قائمة معلَمات الجلسة المتاحة فارغة.
التحقُّق
تتضمّن مجموعة اختبار التوافق (CTS) حالات الاستخدام الجديدة التالية لمَعلمات جلسة الاختبار:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
بشكل عام، بعد أن تصبح مَعلمة معيّنة جزءًا من قائمة مفاتيح الجلسة، يتم تضمين قيمتها الحالية كجزء من مَعلمات الجلسة التي يتم تمريرها أثناء إعداد البث في طبقة HAL.
يجب اختيار مَعلمات الجلسة بعناية. يجب ألا تتغيّر القيم بشكل متكرّر، أو ألا تتغيّر على الإطلاق، بين إعدادات البث. لا تناسب المَعلمات التي تتغيّر بشكل متكرّر، مثل مَعلمة capture intent، عملية التجميع، وقد تؤدي إضافتها إلى قائمة مَعلمات الجلسة إلى حدوث أخطاء في عملية التجميع بسبب إعادة الضبط الداخلي المفرط.
طلب إعادة ضبط الجلسة
يوفّر نظام التشغيل Android 10 ميزة طلب إعادة ضبط الجلسة الاختيارية لتحسين الأداء، لأنّ عمليات إعادة ضبط البث الداخلي الناتجة عن تعديلات على قيم مَعلمات الجلسة يمكن أن تقلّل الأداء. لحلّ هذه المشكلة، يتيح الإصدار 3.5 والإصدارات الأحدث من HIDL استخدام طريقة isReconfigurationRequired
التي توفّر تحكّمًا دقيقًا في منطق إعادة ضبط معلَمة الجلسة الداخلية.ICameraDeviceSession
باستخدام هذه الطريقة، يمكن إعادة ضبط إعدادات البث بدقة عند الحاجة.
تقدّم وسيطات isReconfigurationRequired
المعلومات المطلوبة حول كل تعديل على مَعلمات الجلسة المعلقة، ما يتيح إجراء أنواع مختلفة من التخصيصات الخاصة بالجهاز.
يتم تنفيذ هذه الميزة في خدمة الكاميرا وطبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا فقط. لا تتوفّر أي واجهات برمجة تطبيقات متاحة للجميع. في حال تنفيذ هذه الميزة، من المفترض أن يلاحظ عملاء الكاميرا تحسّنًا في الأداء عند استخدام مَعلمات الجلسة.
التنفيذ
لإتاحة طلبات إعادة ضبط الجلسة، يجب تنفيذ طريقة
isReconfigurationRequired
للتحقّق مما إذا كانت إعادة ضبط البث بالكامل مطلوبة لقيم مَعلمات الجلسة الجديدة.
إذا غيّر العميل قيمة أي مَعلمة لجلسة معلَن عنها، يستدعي إطار عمل الكاميرا الطريقة isReconfigurationRequired
. واستنادًا إلى القيم المحدّدة، يقرّر طبقة تجريد الأجهزة ما إذا كان يجب إعادة ضبط إعدادات البث بالكامل. إذا عرضت طبقة HAL القيمة false
، سيتخطى إطار عمل الكاميرا إعادة الضبط الداخلية. إذا عرضت طبقة HAL القيمة true
، يعيد إطار العمل ضبط عمليات البث ويمرر قيم مَعلمات الجلسة الجديدة وفقًا لذلك.
يمكن أن تستدعي المكتبة طريقة isReconfigurationRequired
قبل وقت معيّن من إرسال طلب يتضمّن مَعلمات جديدة إلى طبقة HAL، ويمكن إلغاء الطلب قبل إرساله. لذلك، يجب ألا تستخدم طبقة HAL استدعاء الطريقة هذا لتغيير سلوكها بأي شكل من الأشكال.
يجب أن يستوفي تنفيذ طبقة تجريد الأجهزة (HAL) المتطلبات التالية:
- يجب أن يكون بإمكان إطار العمل استدعاء الطريقة
isReconfigurationRequired
في أي وقت بعد إعداد الجلسة النشطة. - يجب ألا يكون هناك أي تأثير في أداء طلبات الكاميرا المعلقة. وعلى وجه الخصوص، يجب ألا تحدث أي أعطال أو تأخيرات أثناء البث العادي من الكاميرا.
يجب أن يستوفي الجهاز وتنفيذ طبقة HAL متطلبات الأداء التالية:
- يجب عدم تغيير إعدادات الكاميرا في الأجهزة والبرامج.
- يجب ألا يكون هناك أي تأثير مرئي للمستخدم على أداء الكاميرا.
تتلقّى الطريقة isReconfigurationRequired
الوسيطات التالية:
-
oldSessionParams
: مَعلمات الجلسة من الجلسة السابقة عادةً ما تكون مَعلمات الجلسة الحالية. -
newSessionParams
: مَعلمات الجلسة الجديدة التي يضبطها العميل.
رموز حالة الإرجاع المتوقّعة هي:
OK
: طلب إعادة الضبط بنجاحMETHOD_NOT_SUPPORTED
: لا يتوافق جهاز الكاميرا مع طلب إعادة الضبط.-
INTERNAL_ERROR
: لا يمكن إكمال طلب إعادة الضبط بسبب حدوث خطأ داخلي.
قيم العرض هي:
-
true
: يجب إعادة ضبط إعدادات البث. -
false
: لا يلزم إعادة ضبط إعدادات البث.
لتجاهل طلب إعادة ضبط إعدادات الجلسة، تعرض طبقة HAL القيمة METHOD_NOT_SUPPORTED
أو false
. ويؤدي ذلك إلى السلوك التلقائي لخدمة الكاميرا حيث يتم إعادة ضبط إعدادات البث عند كل تغيير في مَعلمات الجلسة.
التحقُّق
يمكن التحقّق من صحة ميزة طلب إعادة ضبط الجلسة باستخدام حالة اختبار VTS في CameraHidlTest#configureStreamsWithSessionParameters
.