Regolare le impostazioni di visualizzazione

Android include API che consentono alle app di regolare le impostazioni di visualizzazione sull'hardware supportato. Sul sistema operativo Android TV, le app possono sfruttare questa funzionalità per garantire che i contenuti vengano visualizzati nel formato migliore possibile, abbinando la frequenza fotogrammi e il profilo di colore per un'esperienza di visualizzazione 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 spiacevoli artefatti di tremolio durante il movimento dovuti alla conversione della frequenza fotogrammi. Questo è particolarmente visibile durante le panoramiche lente. Per questo motivo, è importante utilizzare l'API SurfaceControl.Transaction.setFrameRate() per notificare al framework la frequenza fotogrammi dei contenuti e indicare se i contenuti video sono idonei per un cambio di frequenza fotogrammi non continuo.

Per saperne di più, consulta la guida alla frequenza fotogrammi.

Corrispondenza ai profili di immagini preferiti

L'API MediaQuality in Android 16 consente agli sviluppatori di assumere il controllo dei profili di immagine.

Ecco alcuni scenari di esempio:

  • Per i film e le serie TV masterizzati con una gamma dinamica più ampia, gli sviluppatori potrebbero richiedere la modalità Filmmaker per visualizzare con precisione i contenuti come previsto dal creator. Un profilo cinematografico con una maggiore accuratezza del colore risalta i dettagli sottili nelle ombre a favore dell'aumento della luminosità.
  • Gli eventi sportivi in diretta, che spesso vengono masterizzati con un intervallo dinamico ridotto e guardati alla luce del giorno, possono trarre vantaggio da un profilo che dà la preferenza alla luminosità rispetto all'accuratezza 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 proprio display.

Selezionare un profilo immagine di sistema

Prima di selezionare un profilo di immagine, è importante verificare che il dispositivo lo supporti.

Lo snippet seguente mostra come utilizzare getAvailablePictureProfiles() per eseguire query su tutti gli stili di foto 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 relativo ID a MediaCodec utilizzando MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

Sebbene i profili supportati possano variare in base al dispositivo, ti consigliamo di eseguire la corrispondenza con i seguenti ID profilo 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"