Menyesuaikan setelan tampilan

Android menyertakan API yang memungkinkan aplikasi menyesuaikan setelan tampilan pada hardware yang didukung. Di Android TV OS, aplikasi dapat memanfaatkan fitur ini untuk memastikan 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 jutter gerakan yang tidak menyenangkan dari konversi kecepatan frame. Hal ini terutama terlihat selama pengambilan gambar panning lambat. Oleh karena itu, penting untuk menggunakan SurfaceControl.Transaction.setFrameRate() API 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 dikuasai dengan rentang dinamis yang lebih luas, developer dapat meminta mode Pembuat Film untuk menampilkan konten secara akurat seperti yang diinginkan kreator. Profil sinema dengan akurasi warna yang lebih tinggi menampilkan detail halus dalam bayangan untuk meningkatkan kecerahan.
  • Acara olahraga live, yang sering dikuasai 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 sehingga pemain dapat memperoleh 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 membuat kueri 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 membuat kueri apakah profil tersedia, profil dapat diberikan langsung oleh ID-nya ke MediaCodec menggunakan MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

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

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"