Menyesuaikan setelan tampilan

Android menyertakan API yang memungkinkan aplikasi menyesuaikan setelan tampilan pada hardware yang didukung. Di Android TV OS, aplikasi dapat memanfaatkan hal ini untuk memastikan bahwa konten ditampilkan dalam format terbaik, dengan mencocokkan kecepatan frame dan profil warna untuk pengalaman menonton yang ideal.

Menyesuaikan kecepatan frame konten

Jika kecepatan frame video tidak cocok dengan kecepatan refresh layar, pengguna dapat mengalami artefak judder gerakan yang tidak menyenangkan dari konversi kecepatan frame. Hal ini sangat terlihat selama pengambilan gambar panning lambat. Oleh karena itu, gunakan API Surface.setFrameRate untuk memberi tahu framework tentang kecepatan frame konten dan untuk memberi sinyal apakah konten video memenuhi syarat untuk pengalihan kecepatan frame yang tidak lancar.

Untuk mengetahui informasi selengkapnya, baca panduan kecepatan frame.

Mencocokkan profil gambar pilihan

MediaQuality API di Android 16 memungkinkan developer mengontrol profil gambar.

Beberapa contoh skenario mencakup:

  • Untuk film dan serial TV yang di-master dengan rentang dinamis yang lebih luas, developer mungkin meminta mode Filmmaker untuk menampilkan konten secara akurat seperti yang diinginkan kreator. Profil bioskop dengan akurasi warna yang lebih tinggi menonjolkan detail halus dalam bayangan untuk meningkatkan kecerahan.
  • Acara olahraga live, yang sering kali di-master dengan rentang dinamis sempit dan ditonton di siang hari, dapat memanfaatkan profil yang lebih mengutamakan kecerahan daripada akurasi warna.
  • Developer game dapat meminta profil latensi rendah dengan pemrosesan gambar minimal agar pemain bisa mendapatkan performa terbaik dari layar mereka.

Memilih profil gambar sistem

Sebelum memilih profil gambar, penting untuk memvalidasi terlebih dahulu bahwa perangkat mendukungnya.

Cuplikan berikut menunjukkan cara menggunakan getAvailablePictureProfiles untuk mengkueri semua profil gambar yang didukung dan menerapkan profil olahraga:

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)
        }
    }
}

Untuk mendapatkan profil tertentu berdasarkan nama, gunakan getPictureProfile:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
    val profile = mediaQualityManager.getPictureProfile(
        PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null
    )
}

Jika Anda tidak perlu mengkueri apakah profil tersedia, profil dapat disediakan langsung oleh ID-nya ke MediaCodec menggunakan MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

Meskipun profil yang didukung mungkin berbeda menurut perangkat, Anda dapat mempertimbangkan untuk mencocokkan dengan ID profil sistem yang diketahui berikut:

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"