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