Android include API che consentono alle app di regolare le impostazioni del display sull'hardware supportato. Su Android TV OS, le app possono sfruttare questa funzionalità per garantire 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 spiacevoli artefatti di tremolio del movimento dovuti alla conversione della frequenza fotogrammi. Questo è particolarmente visibile durante le inquadrature con panoramica lenta. Per questo motivo, utilizza l'API Surface.setFrameRate per comunicare al framework la frequenza fotogrammi dei contenuti e per segnalare se i contenuti video sono idonei per un cambio di frequenza fotogrammi non fluido.
Per saperne di più, consulta la guida alla frequenza fotogrammi.
Abbina i profili immagine preferiti
L'API MediaQuality in Android 16 consente agli sviluppatori di assumere il controllo dei profili immagine.
Ecco alcuni scenari di esempio:
- Per i film e le serie TV con un intervallo dinamico più ampio, gli sviluppatori potrebbero richiedere la modalità Filmmaker per visualizzare con precisione i contenuti come previsto dal creator. Un profilo cinematografico con una maggiore precisione dei colori mette in risalto i dettagli impercettibili nelle ombre per aumentare la luminosità.
- Gli eventi sportivi dal vivo, che spesso vengono masterizzati con una gamma dinamica ridotta e guardati alla luce del giorno, possono trarre vantaggio da un profilo che dà la preferenza alla 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 proprio display.
Selezione di 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 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 in base al nome, utilizza getPictureProfile:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) { val profile = mediaQualityManager.getPictureProfile( PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null ) }
Se non hai bisogno di 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 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"