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 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 terutama terlihat selama pengambilan gambar dengan gerakan panning lambat. Oleh karena hal ini, penting untuk menggunakan SurfaceControl.Transaction.setFrameRate() API untuk memberi tahu framework tentang kecepatan frame konten dan untuk memberikan sinyal apakah konten video memenuhi syarat untuk penggantian kecepatan frame yang tidak lancar.

Untuk informasi selengkapnya, baca panduan kecepatan frame.

Mencocokkan profil gambar pilihan

MediaQuality API di Android 16 memungkinkan developer mengontrol profil gambar.

Beberapa contoh skenarionya meliputi:

  • Untuk film dan serial TV yang dimaster dengan rentang dinamis yang lebih luas, developer dapat meminta mode Filmmaker 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 direkam dengan rentang dinamis yang sempit dan ditonton di siang hari, dapat memanfaatkan profil yang memberikan preferensi pada kecerahan daripada akurasi warna.
  • Developer game dapat meminta profil latensi rendah dengan pemrosesan gambar minimal sehingga pemain dapat 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 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 disediakan langsung oleh ID-nya ke MediaCodec menggunakan MediaFormat.KEY_PICTURE_PROFILE_INSTANCE.

Meskipun profil yang didukung dapat berbeda menurut perangkat, Anda dapat mempertimbangkan pencocokan 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"