Ajuster les paramètres d'affichage

Android inclut des API qui permettent aux applications d'ajuster les paramètres d'affichage sur le matériel compatible. Sur Android TV OS, les applications peuvent en profiter pour s'assurer que le contenu s'affiche dans le meilleur format possible, en faisant correspondre le frame rate et le profil de couleur pour une expérience de visionnage optimale.

Ajuster en fonction de la fréquence d'images du contenu

Lorsque la fréquence d'images d'une vidéo ne correspond pas à la fréquence d'actualisation de l'écran, les utilisateurs peuvent voir des artefacts de flou de mouvement désagréables dus à la conversion de la fréquence d'images. Cela est particulièrement visible lors de panoramiques lents. Pour cette raison, il est important d'utiliser l'API SurfaceControl.Transaction.setFrameRate() pour informer le framework de la fréquence d'images du contenu et pour indiquer si le contenu vidéo est éligible à un changement de fréquence d'images non fluide.

Pour en savoir plus, consultez le guide sur la fréquence d'images.

Correspondre aux profils d'images préférés

L'API MediaQuality d'Android 16 permet aux développeurs de contrôler les profils d'image.

Voici quelques exemples de scénarios:

  • Pour les films et séries TV masterisés avec une plage dynamique plus large, les développeurs peuvent demander le mode Cinéaste pour afficher précisément le contenu tel que le créateur l'a conçu. Un profil cinéma avec une meilleure précision des couleurs met en valeur les détails subtils dans les ombres au détriment de l'augmentation de la luminosité.
  • Les événements sportifs en direct, qui sont souvent masterisés avec une plage dynamique étroite et regardés en plein jour, peuvent bénéficier d'un profil qui privilégie la luminosité à la précision des couleurs.
  • Les développeurs de jeux peuvent demander un profil à faible latence avec un traitement d'image minimal afin que les joueurs puissent obtenir les meilleures performances de leur écran.

Sélectionner un profil d'image système

Avant de sélectionner un profil d'image, il est important de vérifier que l'appareil le prend en charge.

L'extrait de code suivant montre comment utiliser getAvailablePictureProfiles() pour interroger tous les profils de photo compatibles et appliquer un profil de sport:

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)
        }
    }
}

Pour obtenir une fiche spécifique par nom, utilisez getPictureProfile():

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

Si vous n'avez pas besoin de vérifier si un profil est disponible, vous pouvez le fournir directement à un MediaCodec à l'aide de MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

Bien que les profils compatibles puissent varier d'un appareil à l'autre, vous pouvez les comparer aux ID de profil système connus suivants:

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"