يمكن أن تتغيّر إمكانات العرض (مثل أوضاع العرض وأنواع النطاق العالي الديناميكية المتوافقة) بشكل ديناميكي على الأجهزة المزوّدة بشاشات متصلة خارجيًا (باستخدام HDMI أو منفذ DisplayPort)، مثل أجهزة الاستقبال الرقمية لـ Android TV وأجهزة خدمة البث المباشر على الإنترنت (OTT). وقد يحدث هذا التغيير نتيجة لإشارة مقبس توصيل HDMI، على سبيل المثال، عندما يبدِّل المستخدم من شاشة إلى أخرى أو يشغّل الجهاز بدون شاشة متصلة. يشمل الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث تغييرات في إطار العمل للتعامل مع إمكانات التوصيل السريع وإمكانيات العرض الديناميكي.
تصف هذه الصفحة التعامل مع مكونات المكونات الإضافية والتغييرات في إمكانات العرض في تنفيذ HAL Composer. بالإضافة إلى ذلك، يناقش كيفية إدارة المخزن المؤقت للإطارات المرتبط ومنع ظروف السباق في هذه المواقف.
تعديل إمكانات العرض
يوضّح هذا القسم كيفية تعامل إطار عمل Android مع التغييرات في إمكانات العرض التي بدأها Composer HAL.
قبل أن يتمكّن Android من التعامل مع التغييرات في إمكانات العرض بشكل صحيح، على المصنّع الأصلي للجهاز
تنفيذ HAL Composer بحيث يستخدم onHotplug(display, connection=CONNECTED)
لإشعار إطار العمل بأي تغييرات تطرأ على إمكانات العرض. بعد تنفيذ ذلك، يتعامل Android مع التغييرات على إمكانات العرض على النحو التالي:
- عند رصد تغيير في إمكانات العرض، يتلقّى إطار العمل إشعار
onHotplug(display, connection=CONNECTED)
. - عند تلقّي الإشعار، يتوقّف إطار العمل عن حالة العرض ويعيد إنشائه باستخدام الإمكانات الجديدة من "طبقة المحتوى" باستخدام طرق
getActiveConfig
وgetDisplayConfigs
وgetDisplayAttribute
وgetColorModes
وgetHdrCapabilities
وgetDisplayCapabilities
. - بعد أن يُعيد إطار العمل إنشاء حالة عرض جديدة، يرسل استدعاء
onDisplayChanged
إلى التطبيقات التي تستمع إلى هذه الأحداث.
يُعيد إطار العمل تخصيص الموارد الاحتياطية للإطارات في أحداث onHotplug(display, connection=CONNECTED)
اللاحقة. راجِع إدارة المخزن المؤقت للإطارات للحصول على مزيد من المعلومات عن كيفية إدارة ذاكرة المخزن المؤقت للإطارات بشكلٍ سليم لتجنُّب حدوث أعطال أثناء تخصيص المخزن المؤقت الجديد للإطارات.
التعامل مع سيناريوهات الاتصال الشائعة
يتناول هذا القسم كيفية التعامل بشكل صحيح مع سيناريوهات اتصال مختلفة في عمليات التنفيذ عندما تكون الشاشة الأساسية متصلة وغير متصلة.
نظرًا لتصميمه للأجهزة الجوّالة، لا يحتوي إطار عمل Android على دعم مضمَّن لشاشة أساسية غير متصلة. بدلاً من ذلك، يجب أن تستبدل تقنية HAL الشاشة الأساسية بعرض عنصر نائب في تفاعلاتها مع إطار العمل في حال انقطاع اتصال الشاشة الأساسية.
يمكن أن تحدث السيناريوهات التالي�� في أجهزة STB ومفاتيح دونجل للتلفزيون التي تتضمن شاشات متصلة خارجيًا يمكن فصلها. لتنفيذ الدعم لهذه السيناريوهات، استخدم المعلومات الواردة في الجدول أد��ا��:
السيناريو | التعامل مع الجهاز |
---|---|
ما مِن شاشة متصلة في وقت التشغيل |
|
الشاشة الأساسية متصلة فعليًا |
|
الشاشة الأساسية غير متصلة. |
|
اعتبارات اتصال غير متصل بمنفذ HDMI
لا يتوافق Android TV إلا مع درجات الدقة التالية:
- 720×1280
- 1080×1920
- 2160×3840
- 4320×7680
عندما يحاول جهاز STB أو مفتاح إلكتروني للتلفزيون عرض درجة دقة غير متوافقة، مثل 480i عبر اتصال CVBS، تظهر رسالة خطأ للمستخدم.
إذا كان جهاز STB أو جهاز التلفزيون الخارجي مزوّدًا باتصال HDMI وغير HDMI، يكون اتصال HDMI
هو الشاشة الأساسية ويكون الاتصال غير المتوافق مع HDMI
غير نشط. نتيجةً لذلك، إذا انقطع اتصال HDMI وكان لا يزال الاتصال غير متصل بمنفذ HDMI، يتم إرسال حدث إلى SurfaceFlinger ويجب أن تظهر إمكانات الشاشة غير المزوّدة بمنفذ HDMI من خلال getDisplayAttribute
وواجهات برمجة تطبيقات iComposerClient
الأخرى (مثل getHdrCapabilities
).
استخدام أرقام تعريف الإعدادات التسلسلية لمنع شروط السباق
قد تنطبق شروط السباق إذا عدّلت قناة Composer HAL إعدادات العرض المتوافقة
بالتزامن مع إطار العمل الذي يستدعي setActiveConfig
أو setActiveConfigWithConstraints
.
يكمن الحل في تنفيذ HAL في Compose لاستخدام المعرّفات التسلسلية ولمنع هذه المشكلة.
يصف هذا القسم كيفية حدوث شروط السباق، متبوعًا بتفاصيل حول كيفية تنفيذ HAL في Composer بحيث يستخدم المعرّفات التسلسلية لمنع هذه الشروط.
ضع في اعتبارك تسلسل الأحداث التالي، عندما لا يتم تعيين معرّفات تسلسلية جديدة لإعدادات العرض الجديدة، ما يتسبّب في حالة سباق:
أرقام التعريف المتوافقة لإعدادات العرض هي:
- id=1، 1080x1920 60 هرتز
- id=2, 1080x1920 50 هرتز
يستدعي إطار العمل
setActiveConfig(display, config=1)
.وفي الوقت نفسه، تعالج قناة Composer HAL تغييرًا في إعدادات العرض وتُحدّث حالته الداخلية إلى مجموعة جديدة من إعدادات العرض، على النحو التالي:
- id=1، 2160x3840 60 هرتز
- id=2, 2160x3840 50 هرتز
- id=3، 1080x1920 60 هرتز
- id=4, 1080x1920 50 هرتز
يرسل HAL المؤلف حدث
onHotplug
إلى إطار العمل للإشعار بأنه تم تغيير مجموعة الأوضاع المتوافقة.يتلقى صانع المحتوى HAL
setActiveConfig(display, config=1)
(من الخطوة 2).يفسّر بروتوكول HAL أن إطار العمل قد طلب تغيير الإعدادات إلى 2160x3840 60 هرتز، على الرغم من أنّ إطار العمل كان مطلوبًا في الواقع 1080x1920 60 هرتز.
تنتهي العملية التي تستخدم تعيينات المعرفات غير المتسلسلة هنا بتفسير تغيير التهيئة المطلوب.
ضبط HAL في Compose لاستخدام المعرّفات التسلسلية
لتجنّب شروط السباق هذه، على المصنّع الأصلي للجهاز تنفيذ HAL للمكوّن كما يلي:
- عندما يحدِّث HAL Compose إعدادات العرض المتوافقة، يعيّن معرّفات تسلسلية جديدة لإعدادات العرض الجديدة.
- عندما يستدعي إطار العمل
setActiveConfig
أوsetActiveConfigWithConstraints
برقم تعريف إعداد غير صالح، يتجاهل HAL Composer.
تعمل هذه الخطوات على تجنُّب حالات السباق كما هو موضّح في المناقشة التالية.
ضَع في اعتبارك تسلسل الأحداث التالي، عند تخصيص معرّفات تسلسلية جديدة لإعدادات العرض الجديدة:
أرقام التعريف المتوافقة لإعدادات العرض هي:
- id=1، 1080x1920 60 هرتز
- id=2, 1080x1920 50 هرتز
يستدعي إطار العمل
setActiveConfig(display, config=1)
.عند معالجة تغيير في إعدادات العرض، يتم تخصيص المجموعة التالية من أرقام تعريف الإعدادات بدءًا من العدد الصحيح التالي غير المستخدَم، على النحو التالي:
id=3، 2160x3840 60 هرتز
id=4, 2160x3840 50 هرتز
id=5، 1080x1920 60 هرتز
id=6، 1080x1920 50 هرتز
يرسل HAL المؤلف حدث
onHotplug
إلى إطار العمل للإشعار بأنه تم تغيير مجموعة الأوضاع المتوافقة.يتلقّى صانع المحتوى HAL
setActiveConfig(display, config=1)
(من الخطوة 2).يتجاهل HAL المؤلف المكالمة لأنّ رقم التعريف لم يعد صالحًا.
يتلقّى إطار العمل حدث
onHotplug
من الخطوة 4 ويعالجه. وهو يستدعي HAL للمؤلف باستخدام الدالتينgetDisplayConfigs
وgetDisplayAttribute
. وباستخدام هذه الدوال، يحدّد إطار العمل المعرّف الجديد (5) لدرجة الدقة المطلوبة ومعدل التحديث 1080x1920 و60 هرتز.يُرسِل إطار العمل حدث
setActiveConfig
آخر برقم تعريف 5 مُعدَّل.يتلقى صانع المحتوى HAL
setActiveConfig(display, config=5)
من الخطوة 5.يفسر HAL بشكل صحيح أن إطار العمل قد طلب تغيير التهيئة إلى 1080x1920 60 هرتز.
كما هو موضح في المثال أعلاه، تضمن العملية التي تستخدم عمليات تعيين أرقام التعريف التسلسلية منع شرط السباق وتحديث تغيير تهيئة العرض الصحيح.