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

‫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"