Android include API che consentono alle app di regolare le impostazioni di visualizzazione sull'hardware supportato. Su Android TV OS, le app possono sfruttare questa funzionalità per assicurarsi che i contenuti vengano visualizzati nel miglior formato possibile, abbinando la frequenza fotogrammi e il profilo colore per un'esperienza di visione ideale.
Adatta alla frequenza fotogrammi dei contenuti
Quando la frequenza fotogrammi di un video non corrisponde alla frequenza di aggiornamento del display, gli utenti possono riscontrare artefatti di judder di movimento sgradevoli dovuti alla conversione della frequenza fotogrammi. Questo è particolarmente visibile durante le riprese panoramiche lente. Per questo motivo, utilizza l'API Surface.setFrameRate() per comunicare al framework la frequenza fotogrammi dei contenuti e segnalare se i contenuti video sono idonei per un cambio di frequenza fotogrammi non continuo switch.
Per saperne di più, consulta la guida alla frequenza fotogrammi.
Adatta ai profili immagine preferiti
L'API MediaQuality in Android 16 consente agli sviluppatori di controllare i profili immagine.
Ecco alcuni scenari di esempio:
- Per i film e le serie TV masterizzati con un intervallo dinamico più ampio, gli sviluppatori potrebbero richiedere la modalità Filmmaker per visualizzare accuratamente i contenuti come previsto dal creator. Un profilo cinematografico con una maggiore precisione del colore fa risaltare i dettagli sottili nelle ombre a favore dell'aumento della luminosità.
- Gli eventi sportivi live, spesso masterizzati con un intervallo dinamico ristretto e guardati alla luce del giorno, possono trarre vantaggio da un profilo che privilegia la luminosità rispetto alla precisione del colore.
- Gli sviluppatori di giochi possono richiedere un profilo a bassa latenza con un'elaborazione delle immagini minima in modo che i giocatori possano ottenere le migliori prestazioni dal loro display.
Selezionare un profilo immagine di sistema
Prima di selezionare un profilo immagine, è importante verificare che il dispositivo lo supporti.
Il seguente snippet mostra come utilizzare
getAvailablePictureProfiles() per eseguire una query su tutti i profili immagine
supportati e applicare un profilo sportivo:
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)
}
}
}
Per ottenere un profilo specifico per nome, utilizza getPictureProfile():
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val profile = mediaQualityManager.getPictureProfile(
PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}
Se non devi eseguire una query per verificare se un profilo è disponibile, i profili possono essere forniti direttamente tramite il loro ID a un MediaCodec utilizzando MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.
Sebbene i profili supportati possano variare in base al dispositivo, puoi prendere in considerazione la corrispondenza con i seguenti ID di profili di sistema noti:
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"