Android incluye APIs que permiten que las apps ajusten la configuración de la pantalla en hardware compatible. En el SO Android TV, las apps pueden aprovechar esto para garantizar que el contenido se muestre en el mejor formato posible, haciendo coincidir la velocidad de fotogramas y el perfil de color para obtener la experiencia de visualización ideal.
Cómo igualar la velocidad de fotogramas del contenido
Cuando la velocidad de fotogramas de un video no coincide con la frecuencia de actualización de la pantalla, los usuarios pueden experimentar artefactos de vibración de movimiento desagradables debido a la conversión de la velocidad de fotogramas. Esto es especialmente visible durante las tomas de paneo lentas. Por este
motivo, usa la API de Surface.setFrameRate para notificar al
framework sobre la velocidad de fotogramas del contenido y para indicar si el contenido de video
es apto para un cambio de velocidad de fotogramas no fluido .
Para obtener más información, lee la guía de velocidad de fotogramas.
Cómo hacer coincidir los perfiles de imagen preferidos
La API de MediaQuality en Android 16 permite que los desarrolladores tomen el control de los perfiles de imagen.
A continuación, se muestran algunas situaciones de ejemplo:
- En el caso de las películas y las series de TV que se masterizan con un rango dinámico más amplio, los desarrolladores pueden solicitar el modo de cineasta para mostrar con precisión el contenido tal como el creador pretendía que se viera. Un perfil de cine con mayor precisión de color resalta los detalles sutiles en las sombras para aumentar el brillo.
- Los eventos deportivos en vivo, que a menudo se masterizan con un rango dinámico estrecho y se ven a la luz del día, pueden beneficiarse de un perfil que dé preferencia al brillo sobre la precisión del color.
- Los desarrolladores de juegos pueden solicitar un perfil de baja latencia con un procesamiento de imágenes mínimo para que los jugadores puedan obtener el mejor rendimiento de su pantalla.
Cómo seleccionar un perfil de imagen del sistema
Antes de seleccionar un perfil de imagen, es importante validar primero que el dispositivo lo admita.
En el siguiente fragmento, se muestra cómo usar
getAvailablePictureProfiles para consultar todos los perfiles de imagen compatibles y aplicar un perfil deportivo:
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) } } }
Para obtener un perfil específico por nombre, usa
getPictureProfile:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) { val profile = mediaQualityManager.getPictureProfile( PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null ) }
Si no necesitas consultar si un perfil está disponible, se pueden proporcionar perfiles directamente por su ID a un MediaCodec usando MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.
Si bien los perfiles compatibles pueden diferir según el dispositivo, puedes considerar hacer coincidir los siguientes IDs de perfil del sistema conocidos:
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"