تنظیم کردن تنظیمات نمایشگر

Android شامل میاناهای برنامه‌سازی کاربردی است که به برنامه‌ها اجازه می‌دهد تنظیمات نمایشگر را در سخت‌افزار پشتیبانی‌شده تنظیم کنند. در سیستم‌عامل Android TV، برنامه‌ها می‌توانند از این ویژگی استفاده کنند تا مطمئن شوند محتوا در بهترین قالب ممکن نمایش داده می‌شود، با مطابقت دادن نرخ فریم و نمایه رنگ برای تجربه تماشای ایده‌آل.

مطابقت دادن نرخ فریم محتوا

وقتی نرخ فریم ویدیو با نرخ بازآوری نمایشگر مطابقت نداشته باشد، کاربران ممکن است به‌دلیل تبدیل نرخ فریم، با لرزش ناخوشایند تصویر مواجه شوند. این موضوع به‌ویژه درطول نماهای افق‌گرد آهسته قابل‌مشاهده است. به همین دلیل، از میانای برنامه‌سازی کاربردی Surface.setFrameRate برای اطلاع دادن به چارچوب درباره نرخ فریم محتوا و برای نشان دادن اینکه آیا محتوای ویدیویی واجدشرایط تغییر نرخ فریم غیریکپارچه است یا نه استفاده کنید.

برای اطلاعات بیشتر، راهنمای نرخ فریم را بخوانید.

مطابقت دادن نمایه‌های تصویر برگزیده

‫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"