Android มี API ที่อนุญาตให้แอปปรับการตั้งค่าการแสดงผลในฮาร์ดแวร์ที่รองรับ ในระบบปฏิบัติการ Android TV แอปต่างๆ สามารถใช้ประโยชน์จากฟีเจอร์นี้เพื่อให้มั่นใจว่า เนื้อหาจะแสดงในรูปแบบที่ดีที่สุดด้วยการจับคู่เฟรมเรตและ โปรไฟล์สีเพื่อประสบการณ์การรับชมที่สมบูรณ์แบบ
จับคู่อัตราเฟรมของเนื้อหา
เมื่ออัตราเฟรมของวิดีโอไม่ตรงกับอัตราการรีเฟรชของจอแสดงผล
ผู้ใช้อาจพบอาร์ติแฟกต์การกระตุกที่ไม่พึงประสงค์จากการแปลงอัตราเฟรม
โดยจะเห็นได้ชัดเจนเป็นพิเศษในฉากที่แพนกล้องช้าๆ ด้วยเหตุนี้ ให้ใช้ Surface.setFrameRate API เพื่อแจ้งให้เฟรมเวิร์กทราบเกี่ยวกับอัตราเฟรมของเนื้อหา และเพื่อส่งสัญญาณว่าเนื้อหาวิดีโอมีสิทธิ์สำหรับการสลับอัตราเฟรมแบบไม่ราบรื่นหรือไม่
ดูข้อมูลเพิ่มเติมได้ที่คู่มืออัตราเฟรม
จับคู่โปรไฟล์รูปภาพที่ต้องการ
MediaQuality API ใน Android 16 ช่วยให้นักพัฒนาแอปควบคุม โปรไฟล์รูปภาพได้
ตัวอย่างสถานการณ์มีดังนี้
- สำหรับภาพยนตร์และซีรีส์ที่มาสเตอร์ด้วยช่วงไดนามิกที่กว้างขึ้น นักพัฒนาแอปอาจขอโหมดผู้สร้างภาพยนตร์เพื่อแสดงเนื้อหาอย่างถูกต้องตามที่ผู้สร้างต้องการให้แสดง โปรไฟล์ภาพยนตร์ที่มีความแม่นยำของสีสูงขึ้น จะดึงรายละเอียดเล็กๆ น้อยๆ ในเงาออกมาแทนที่จะเพิ่มความสว่าง
- การถ่ายทอดสดการแข่งขันกีฬาซึ่งมักจะมาสเตอร์ด้วยช่วงไดนามิกแคบๆ และรับชมในเวลากลางวันจะได้รับประโยชน์จากโปรไฟล์ที่ให้ความสำคัญกับความสว่างมากกว่าความแม่นยำของสี
- นักพัฒนาเกมสามารถขอโปรไฟล์ที่มีเวลาในการตอบสนองต่ำพร้อมการประมวลผลรูปภาพที่น้อยที่สุด เพื่อให้ผู้เล่นได้รับประสิทธิภาพที่ดีที่สุดจากจอแสดงผล
การเลือกโปรไฟล์รูปภาพระบบ
ก่อนเลือกโปรไฟล์รูปภาพ คุณควรตรวจสอบก่อนว่าอุปกรณ์รองรับโปรไฟล์ดังกล่าว
ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้
getAvailablePictureProfiles เพื่อค้นหาโปรไฟล์รูปภาพที่รองรับทั้งหมดและใช้โปรไฟล์กีฬา
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) } } }
หากต้องการรับโปรไฟล์ที่เฉพาะเจาะจงตามชื่อ ให้ใช้
getPictureProfile
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) { val profile = mediaQualityManager.getPictureProfile( PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null ) }
หากไม่จำเป็นต้องค้นหาว่ามีโปรไฟล์หรือไม่ คุณสามารถระบุโปรไฟล์โดยใช้รหัสของโปรไฟล์นั้นโดยตรงไปยัง MediaCodec ได้โดยใช้
MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
แม้ว่าโปรไฟล์ที่รองรับอาจแตกต่างกันไปตามอุปกรณ์ แต่คุณอาจพิจารณาจับคู่กับรหัสโปรไฟล์ระบบที่ทราบต่อไปนี้
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"