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 la fréquence d'images et le profil de couleur pour une expérience de visionnage idéale.
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 rencontrer des artefacts de saccades désagréables dus à la conversion de la fréquence d'images. Cela est particulièrement visible lors des 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.
Faire correspondre les profils d'image 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 afin d'afficher le contenu de manière fidèle à la vision du créateur. Un profil cinéma avec une plus grande précision des couleurs fait ressortir les détails subtils dans les ombres au lieu d'augmenter 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 suivant montre comment utiliser getAvailablePictureProfiles()
pour interroger tous les profils d'image compatibles et appliquer un profil sportif :
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 un profil 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 fournir directement les profils par leur ID à un MediaCodec en utilisant MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
.
Bien que les profils compatibles puissent varier selon l'appareil, vous pouvez envisager d'effectuer une mise en correspondance avec les 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"