التعامل مع القابس

يمكن أن تتغير إمكانيات العرض (مثل أوضاع العرض وأنواع HDR المدعومة) ديناميكيًا على الأجهزة التي تحتوي على شاشات عرض متصلة خارجيًا (مع HDMI أو DisplayPort)، مثل أجهزة فك التشفير التي تعمل بنظام Android TV (STBs) وأجهزة البث المباشر (OTT) الأجهزة. يمكن أن يحدث هذا التغيير كنتيجة لإشارة توصيل HDMI السريع، على سبيل المثال عندما ينتقل المستخدم من شاشة إلى أخرى أو يقوم بتشغيل الجهاز بدون شاشة متصلة. يتضمن Android 12 والإصدارات الأحدث تغييرات في إطار العمل للتعامل مع إمكانات العرض الديناميكي والتوصيل السريع.

توضح هذه الصفحة كيفية التعامل مع المقابس السريعة للعرض والتغييرات في إمكانيات العرض في تطبيق Composer HAL. بالإضافة إلى ذلك، فإنه يناقش كيفية إدارة مخزن الإطارات المؤقت المرتبط ومنع حالات السباق في هذه المواقف.

تحديث قدرات العرض

يصف هذا القسم كيفية تعامل إطار عمل Android مع التغييرات في إمكانيات العرض التي بدأها Composer HAL.

قبل أن يتمكن Android من التعامل مع التغييرات في إمكانيات العرض بشكل صحيح، يجب على OEM تنفيذ Composer HAL بحيث يستخدم onHotplug(display, connection=CONNECTED) لإعلام إطار العمل بأي تغييرات في إمكانيات العرض. بعد تنفيذ ذلك، يتعامل Android مع التغييرات في إمكانيات العرض على النحو التالي:

  1. عند اكتشاف تغيير في إمكانيات العرض، يتلقى إطار العمل إشعارًا onHotplug(display, connection=CONNECTED) .
  2. عند تلقي الإشعار، يقوم إطار العمل بإسقاط حالة العرض الخاصة به وإعادة إنشائها باستخدام الإمكانات الجديدة من HAL باستخدام الأساليب getActiveConfig و getDisplayConfigs getDisplayAttribute و getColorModes و getHdrCapabilities و getDisplayCapabilities .
  3. بعد أن يقوم إطار العمل بإعادة إنشاء حالة عرض جديدة، فإنه يرسل رد الاتصال onDisplayChanged إلى التطبيقات التي تستمع لمثل هذه الأحداث.

يقوم الإطار بإعادة تخصيص المخازن المؤقتة للإطارات في أحداث onHotplug(display, connection=CONNECTED) اللاحقة. راجع إدارة مخزن إطارات العميل للحصول على مزيد من المعلومات حول كيفية إدارة ذاكرة مخزن إطارات مؤقت بشكل صحيح لتجنب الفشل أثناء تخصيص مخزن إطارات مؤقت جديد.

التعامل مع سيناريوهات الاتصال الشائعة

يغطي هذا القسم كيفية التعامل بشكل صحيح مع سيناريوهات الاتصال المختلفة في عمليات التنفيذ الخاصة بك عندما تكون شاشة العرض الأساسية متصلة أو منفصلة.

نظرًا لأنه تم تصميمه للأجهزة المحمولة، لا يحتوي إطار عمل Android على دعم مدمج لشاشة عرض أساسية غير متصلة. بدلاً من ذلك، يجب على HAL استبدال شاشة العرض الأساسية بعرض عنصر نائب في تفاعلاتها مع إطار العمل في حالة فصل شاشة العرض الأساسية فعليًا.

يمكن أن تحدث السيناريوهات التالية في أجهزة STB وأجهزة دونجل التلفزيون التي تحتوي على شاشات متصلة خارجيًا ويمكن فصلها. لتنفيذ الدعم لهذه السيناريوهات، استخدم المعلومات الواردة في الجدول أدناه:

سيناريو معالجة
لا توجد شاشة متصلة في وقت التمهيد
  • أرسل إشارة onHotplug(display, connection=CONNECTED) من Composer HAL إلى إطار العمل.
  • استبدل حالة العرض الفعلية داخل طبقة Composer HAL بحالة عرض العنصر النائب.
العرض الأساسي متصل فعليًا
  • أرسل حدث onHotplug(display, connection=CONNECTED) آخر من Composer HAL إلى إطار العمل.

    يؤدي هذا إلى قيام الإطار بإعادة تحميل جميع إمكانيات العرض.

تم فصل شاشة العرض الأساسية فعليًا
  • أرسل حدث onHotplug(display, connection=CONNECTED) آخر من Composer HAL إلى إطار العمل.
  • استبدل حالة العرض الفعلية داخل طبقة Composer HAL بحالة عرض العنصر النائب. يجب أن تحتوي شاشة العنصر النائب على وضع عرض واحد، بحيث يرسل إطار العمل رد الاتصال onDisplayChanged إلى التطبيقات (لأن مجموعة الأوضاع المدعومة قد تغيرت). يجب أن يتطابق وضع العرض الفردي هذا مع آخر وضع نشط للشاشة الفعلية قبل قطع الاتصال، حتى لا تتلقى التطبيقات أحداث تغيير التكوين .

استخدم معرفات التكوين التسلسلية لمنع حالات السباق

يمكن أن تنشأ حالات السباق إذا قام Composer HAL بتحديث تكوينات العرض المدعومة بشكل متزامن مع إطار العمل الذي يستدعي setActiveConfig أو setActiveConfigWithConstraints . الحل هو تطبيق Composer HAL لاستخدام المعرفات التسلسلية ومنع هذه المشكلة.

يصف هذا القسم كيفية حدوث حالات السباق، متبوعة بتفاصيل حول كيفية تنفيذ Composer HAL بحيث يستخدم معرفات تسلسلية لمنع مثل هذه الحالات.

خذ بعين الاعتبار التسلسل التالي للأحداث، عندما لا يتم تعيين معرفات تسلسلية جديدة لتكوينات العرض الجديدة، مما يتسبب في حالة سباق:

  1. معرفات تكوين العرض المدعومة هي:

    • المعرف=1 ، 1080x1920 60 هرتز
    • المعرف=2 ، 1080x1920 50 هرتز
  2. يستدعي إطار العمل setActiveConfig(display, config=1) .

  3. في الوقت نفسه، تقوم Composer HAL بمعالجة تغيير تكوينات العرض وتحديث حالتها الداخلية إلى مجموعة جديدة من تكوينات العرض، الموضحة على النحو التالي:

    • المعرف=1 , 2160x3840 60 هرتز
    • المعرف=2 ، 2160x3840 50 هرتز
    • المعرف=3 ، 1080x1920 60 هرتز
    • المعرف=4 ، 1080x1920 50 هرتز
  4. يرسل Composer HAL حدث onHotplug إلى إطار العمل لإعلامك بأن مجموعة الأوضاع المدعومة قد تغيرت.

  5. يتلقى Composer HAL setActiveConfig(display, config=1) (من الخطوة 2).

  6. يفسر HAL أن الإطار قد طلب تغيير التكوين إلى 2160x3840 60 هرتز ، على الرغم من أنه في الواقع كان 1080x1920 60 هرتز مطلوبًا.

تنتهي عملية استخدام تعيينات المعرفات غير المتسلسلة هنا بتفسير خاطئ لتغيير التكوين المطلوب.

قم بتكوين Composer HAL لاستخدام المعرفات التسلسلية

لتجنب حالات التعارض هذه، يجب على الشركة المصنعة للمعدات الأصلية (OEM) تنفيذ طبقة تصديق الأجهزة (HAL) للملحن كما يلي:

  • عندما يقوم Composer HAL بتحديث تكوينات العرض المدعومة، فإنه يقوم بتعيين معرفات تسلسلية جديدة لتكوينات العرض الجديدة.
  • عندما يستدعي إطار العمل setActiveConfig أو setActiveConfigWithConstraints بمعرف تكوين غير صالح، يتجاهل Composer HAL الاستدعاء.

تعمل هذه الخطوات على منع حالات السباق كما هو موضح في المناقشة التالية.

خذ بعين الاعتبار التسلسل التالي للأحداث، عندما يتم تعيين معرفات تسلسلية جديدة لتكوينات العرض الجديدة:

  1. معرفات تكوين العرض المدعومة هي:

    • المعرف=1 ، 1080x1920 60 هرتز
    • المعرف=2 ، 1080x1920 50 هرتز
  2. يستدعي إطار العمل setActiveConfig(display, config=1) .

  3. عند معالجة تغيير تكوينات العرض، يتم تعيين المجموعة التالية من معرفات التكوين بدءًا من العدد الصحيح التالي غير المستخدم، كما هو موضح كما يلي:

    • المعرف=3 , 2160x3840 60 هرتز

    • المعرف=4 , 2160x3840 50 هرتز

    • المعرف=5 ، 1080x1920 60 هرتز

    • المعرف=6 ، 1080x1920 50 هرتز

  4. يرسل Composer HAL حدث onHotplug إلى إطار العمل لإعلامك بأن مجموعة الأوضاع المدعومة قد تغيرت.

  5. يتلقى Composer HAL setActiveConfig(display, config=1) (من الخطوة 2).

  6. يتجاهل Composer HAL المكالمة لأن المعرف لم يعد صالحًا.

  7. يتلقى إطار العمل الحدث onHotplug ويعالجه من الخطوة 4. ويستدعي طبقة توصيف HAL ​​للمؤلف باستخدام الوظائف getDisplayConfigs و getDisplayAttribute . باستخدام هذه الوظائف، يحدد الإطار المعرف الجديد (5) للدقة المطلوبة ومعدل التحديث 1080x1920 و60 هرتز.

  8. يرسل إطار العمل حدث setActiveConfig آخر بمعرف محدث قدره 5.

  9. يتلقى Composer HAL setActiveConfig(display, config=5) من الخطوة 5.

  10. يفسر HAL بشكل صحيح أن إطار العمل قد طلب تغيير التكوين إلى 1080x1920 60 هرتز.

كما هو موضح في المثال أعلاه، تضمن العملية التي تستخدم تعيينات المعرفات التسلسلية منع حالة السباق وتحديث تغيير تكوين العرض الصحيح.