O Android inclui APIs que permitem que os apps ajustem as configurações de exibição em hardwares compatíveis. No Android TV OS, os apps podem aproveitar isso para garantir que o conteúdo seja exibido no melhor formato possível, combinando a taxa de quadros e o perfil de cores para a experiência de visualização ideal.
Usar o mesmo frame rate do conteúdo
Quando a taxa de quadros de um vídeo não corresponde à taxa de atualização da tela,
os usuários podem notar artefatos de trepidação de movimento desagradáveis na conversão de
taxa de quadros. Isso é especialmente visível durante as tomadas com panorâmica lenta. Por esse
motivo, é importante usar a API
SurfaceControl.Transaction.setFrameRate()
para notificar o framework sobre a taxa de frames do conteúdo e indicar
se o conteúdo de vídeo está qualificado para uma
mudança de taxa de frames não contínua.
Para mais informações, leia o guia de taxa de frames.
Combinar perfis de fotos preferidas
A API MediaQuality no Android 16 permite que os desenvolvedores assumam o controle dos perfis de imagem.
Alguns exemplos de cenários incluem:
- Para filmes e séries de TV masterizados com um intervalo dinâmico mais amplo, os desenvolvedores podem solicitar o modo Filmmaker para exibir o conteúdo com precisão, como o criador pretendia. Um perfil de cinema com maior precisão de cor destaca detalhes sutis nas sombras em favor do aumento do brilho.
- Eventos esportivos ao vivo, que geralmente são masterizados com um intervalo dinâmico estreito e assistidos durante o dia, podem se beneficiar de um perfil que dá preferência ao brilho em vez da precisão da cor.
- Os desenvolvedores de jogos podem solicitar um perfil de baixa latência com processamento mínimo de imagens para que os jogadores tenham o melhor desempenho na tela.
Como selecionar uma foto de perfil do sistema
Antes de selecionar uma foto do perfil, é importante validar se o dispositivo oferece suporte a ela.
O snippet a seguir mostra como usar
getAvailablePictureProfiles()
para consultar todos
os perfis de imagem com suporte e aplicar um perfil de esportes:
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 acessar um perfil específico pelo nome, use getPictureProfile()
:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val profile = mediaQualityManager.getPictureProfile(
PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}
Se você não precisar consultar se um perfil está disponível, os perfis podem ser
fornecidos diretamente pelo ID para um MediaCodec usando
MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
.
Embora os perfis compatíveis possam variar de acordo com o dispositivo, é possível fazer a correspondência com os seguintes IDs de perfil de sistema conhecidos:
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"