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 judder gerakan yang tidak menyenangkan dari konversi kecepatan frame. Hal ini terutama terlihat selama pengambilan gambar panning lambat. Oleh karena itu, gunakan Surface.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.

Menyesuaikan 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 Filmmaker untuk menampilkan konten secara akurat seperti yang diinginkan kreator. Profil bioskop dengan akurasi warna yang lebih baik menampilkan detail halus dalam bayangan untuk meningkatkan kecerahan.
  • Acara olahraga live, yang sering dikuasai dengan rentang dinamis yang sempit dan ditonton pada siang hari, dapat memanfaatkan profil yang memprioritaskan 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 berdasarkan 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:

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"