Ajusta la configuración de la pantalla

Android incluye APIs que permiten que las apps ajusten la configuración de la pantalla en el hardware compatible. En el SO Android TV, las apps pueden aprovechar esto para garantizar que el contenido se muestre en el mejor formato posible, ya que coinciden con la velocidad de fotogramas y el perfil de color para lograr 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 parpadeo de movimiento desagradables debido a la conversión de velocidad de fotogramas. Esto se nota especialmente en los planos panorámicos lentos. Por este motivo, es importante usar la API de SurfaceControl.Transaction.setFrameRate() para notificarle al framework la velocidad de fotogramas del contenido y señalar 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 a los desarrolladores tomar el control de los perfiles de imagen.

Estos son algunos ejemplos de situaciones:

  • 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 que el modo de director muestre con precisión el contenido como el creador pretendía que se viera. Un perfil de cine con mayor precisión de color muestra 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 miran 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 fotos 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, los perfiles se pueden proporcionar directamente a un MediaCodec por su ID con MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

Si bien los perfiles admitidos pueden diferir según el dispositivo, te recomendamos que realices la coincidencia con 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"