שינוי הגדרות התצוגה

‫Android כולל ממשקי API שמאפשרים לאפליקציות להתאים את הגדרות התצוגה בחומרה נתמכת. ב-Android TV OS, אפליקציות יכולות לנצל את התכונה הזו כדי להבטיח שהתוכן יוצג בפורמט הטוב ביותר האפשרי, על ידי התאמה של קצב הפריימים ופרופיל הצבעים לחוויית צפייה אופטימלית.

התאמת התוכן לקצב הפריימים

אם קצב הפריימים של סרטון לא תואם לקצב הרענון של המסך, המשתמשים עלולים לראות ארטיפקטים לא נעימים של תנועה מגומגמת כתוצאה מהמרת קצב הפריימים. הדבר בולט במיוחד בצילומי פנינג איטיים. לכן, צריך להשתמש ב-API‏ Surface.setFrameRate כדי להודיע למסגרת על קצב הפריימים של התוכן, וכדי לציין אם תוכן הווידאו עומד בדרישות להחלפה לא חלקה של קצב הפריימים.

מידע נוסף מפורט במדריך קצב הפריימים.

התאמה של פרופילים עם תמונות מועדפות

‫MediaQuality API ב-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"