ضبط إعدادات العرض

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

مطابقة عدد اللقطات في الثانية للمحتوى

عندما لا يتطابق عدد اللقطات في الثانية للفيديو مع معدّل تحديث الشاشة، قد يواجه المستخدمون تشوّشًا مزعجًا في الحركة ناتجًا عن تحويل عدد اللقطات في الثانية. ويظهر ذلك بشكل خاص أثناء لقطات التحريك البطيء للكاميرا. لهذا السبب، من المهم استخدام واجهة برمجة التطبيقات SurfaceControl.Transaction.setFrameRate() لإعلام إطار العمل بمعدّل عرض المحتوى وتحديد ما إذا كان محتوى الفيديو مؤهلاً لتبديل معدّل عرض غير سلس.

لمزيد من المعلومات، يُرجى قراءة دليل معدّل عرض اللقطات.

مطابقة ملفات تعريف الصور المفضّلة

تتيح واجهة برمجة التطبيقات MediaQuality في Android 16 للمطوّرين التحكّم في ملفات تعريف الصور.

تشمل بعض الأمثلة على السيناريوهات ما يلي:

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

اختيار ملف تعريف صورة نظام

قبل اختيار ملف تعريف صورة، من المهم أولاً التأكّد من أنّ الجهاز يتيح استخدامه.

يوضّح المقتطف التالي كيفية استخدام getAvailablePictureProfiles() للاستعلام عن جميع إعدادات الصور المتوافقة وتطبيق إعدادات رياضية:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
    val mediaQualityManager: MediaQualityManager =
        context.getSystemService(MediaQualityManager::class.java)
    val profiles = mediaQualityManager.getAvailablePictureProfiles(null)
    for (profile in profiles) {
        // If we have a system sports profile, apply it to our media codec
        if (profile.profileType == PictureProfile.TYPE_SYSTEM
            && profile.name == NAME_SPORTS
        ) {
            val bundle = Bundle().apply { 
                putParcelable(MediaFormat.KEY_PICTURE_PROFILE_INSTANCE, profile)
            }
            mediaCodec.setParameters(bundle)
        }
    }
}

للحصول على ملف شخصي معيّن حسب الاسم، استخدِم getPictureProfile():

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
    val profile = mediaQualityManager.getPictureProfile(
        PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}

إذا لم تكن بحاجة إلى الاستعلام عمّا إذا كان الملف الشخصي متاحًا، يمكن توفير الملفات الشخصية مباشرةً من خلال معرّفها إلى MediaCodec باستخدام MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

على الرغم من أنّ الملفات الشخصية المتوافقة قد تختلف حسب الجهاز، يمكنك مطابقة الملفات الشخصية مع معرّفات ملفات النظام الشخصية المعروفة التالية:

const val NAME_STANDARD: String = "standard"
const val NAME_VIVID: String = "vivid"
const val NAME_SPORTS: String = "sports"
const val NAME_GAME: String = "game"
const val NAME_MOVIE: String = "movie"
const val NAME_ENERGY_SAVING: String = "energy_saving"
const val NAME_USER: String = "user"