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 adaptant 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, utilisez l'API Surface.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 les séries TV masterisés avec une plage dynamique plus large, les développeurs peuvent demander le mode Filmmaker afin d'afficher précisément le contenu tel que le créateur l'a prévu. 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é par rapport à 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 d'image 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 un profil spécifique par son 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 les profils directement par leur ID à un MediaCodec à l'aide de MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.
Bien que les profils compatibles puissent varier selon l'appareil, vous pouvez envisager de les faire correspondre 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"