اندروید شامل APIهایی است که به برنامهها اجازه میدهد تنظیمات نمایش را روی سختافزارهای پشتیبانیشده تنظیم کنند. در سیستمعامل اندروید تیوی، برنامهها میتوانند از این مزیت استفاده کنند تا با تطبیق نرخ فریم و مشخصات رنگ برای تجربه تماشای ایدهآل، اطمینان حاصل کنند که محتوا در بهترین قالب ممکن نمایش داده میشود.
نرخ فریم محتوا را مطابقت دهید
وقتی نرخ فریم یک ویدیو با نرخ تازهسازی صفحه نمایش مطابقت نداشته باشد، کاربران میتوانند مصنوعات لرزش حرکتی ناخوشایندی را که از تبدیل نرخ فریم ایجاد میشود، تجربه کنند. این امر به ویژه در هنگام نماهای آهسته قابل مشاهده است. به همین دلیل، استفاده از API SurfaceControl.Transaction.setFrameRate() برای اطلاعرسانی به فریمورک در مورد نرخ فریم محتوا و ارسال سیگنال مبنی بر اینکه آیا محتوای ویدیو واجد شرایط تغییر نرخ فریم غیریکپارچه است یا خیر، مهم است.
برای اطلاعات بیشتر، راهنمای نرخ فریم را مطالعه کنید.
مطابقت با پروفایلهای تصویر ترجیحی
رابط برنامهنویسی کاربردی MediaQuality در اندروید ۱۶ به توسعهدهندگان اجازه میدهد تا کنترل پروفایلهای تصاویر را در دست بگیرند.
برخی از سناریوهای نمونه عبارتند از:
- برای فیلمها و سریالهای تلویزیونی که با محدوده دینامیکی وسیعتری ساخته شدهاند، توسعهدهندگان ممکن است از حالت فیلمساز درخواست کنند تا محتوا را دقیقاً همانطور که سازنده در نظر داشته است نمایش دهد. یک پروفایل سینمایی با دقت رنگ بیشتر، جزئیات ظریف در سایهها را به نفع افزایش روشنایی نمایش میدهد.
- رویدادهای ورزشی زنده که اغلب با محدوده دینامیکی باریکی ضبط و در نور روز تماشا میشوند، میتوانند از پروفایلی که روشنایی را بر دقت رنگ ترجیح میدهد، بهرهمند شوند.
- توسعهدهندگان بازی میتوانند درخواست کنند که نمایشگر با کمترین تأخیر و حداقل پردازش تصویر، بهترین عملکرد را ارائه دهد.
انتخاب نمایه تصویر سیستم
قبل از انتخاب یک پروفایل تصویر، مهم است که ابتدا تأیید کنید که دستگاه از آن پشتیبانی میکند.
قطعه کد زیر نحوه استفاده از 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)
}
اگر نیازی به استعلام موجود بودن یک پروفایل ندارید، میتوانید با استفاده از MediaFormat.KEY_PICTURE_PROFILE_INSTANCE ، پروفایلها را مستقیماً توسط شناسهشان به یک MediaCodec ارائه دهید.
اگرچه پروفایلهای پشتیبانیشده ممکن است بسته به دستگاه متفاوت باشند، میتوانید تطبیق با شناسههای پروفایل سیستم شناختهشده زیر را در نظر بگیرید:
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"