التعامل مع مقبس كهربائي

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

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

تعديل إمكانات العرض

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

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

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

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

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

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

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

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

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

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

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

اعتبارات اتصال غير متصل بمنفذ 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 بحيث يستخدم المعرّفات التسلسلية لمنع هذه الشروط.

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

  1. أرقام التعريف المتوافقة لإعدادات العرض هي:

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

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

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

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

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

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

ضبط HAL في Compose لاستخدام المعرّفات التسلسلية

لتجنّب شروط السباق هذه، على المصنّع الأصلي للجهاز تنفيذ HAL للمكوّن كما يلي:

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

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

ضَع في اعتبارك تسلسل الأحداث التالي، عند تخصيص معرّفات تسلسلية جديدة لإعدادات العرض الجديدة:

  1. أرقام التعريف المتوافقة لإعدادات العرض هي:

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

  3. عند معالجة تغيير في إعدادات العرض، يتم تخصيص المجموعة التالية من أرقام تعريف الإعدادات بدءًا من العدد الصحيح التالي غير المستخدَم، على النحو التالي:

    • id=3، 2160x3840 60 هرتز

    • id=4, 2160x3840 50 هرتز

    • id=5، 1080x1920 60 هرتز

    • id=6، 1080x1920 50 هرتز

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

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

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

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

  8. يُرسِل إطار العمل حدث setActiveConfig آخر برقم تعريف 5 مُعدَّل.

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

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

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