Настройте параметры дисплея

Android включает API, которые позволяют приложениям настраивать параметры отображения на поддерживаемом оборудовании. В ОС Android TV приложения могут воспользоваться этим, чтобы обеспечить отображение контента в наилучшем формате, сопоставляя частоту кадров и цветовой профиль для идеального просмотра.

Сопоставить частоту кадров контента

Когда частота кадров видео не соответствует частоте обновления дисплея, пользователи могут столкнуться с неприятным эффектом дрожания при движении из-за преобразования частоты кадров. Это особенно заметно при съемке с медленным панорамированием. По этой причине важно использовать API SurfaceControl.Transaction.setFrameRate() для уведомления платформы о частоте кадров контента и сигнализации о том, имеет ли видеоконтент право на плавное переключение частоты кадров .

Для получения дополнительной информации прочтите руководство по частоте кадров .

Соответствие предпочтительным профилям изображений

API MediaQuality в 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"