Android에는 앱이 지원되는 하드웨어에서 디스플레이 설정을 조정할 수 있는 API가 포함되어 있습니다. Android TV OS에서 앱은 이를 활용하여 이상적인 시청 환경을 위해 프레임 속도와 색상 프로필을 일치시켜 콘텐츠가 최상의 형식으로 표시되도록 할 수 있습니다.
콘텐츠 프레임 속도 일치시키기
동영상의 프레임 속도가 디스플레이의 화면 재생 빈도와 일치하지 않으면 사용자는 프레임 속도 변환으로 인해 불쾌감을 주는 모션 흔들림 아티팩트를 경험할 수 있습니다. 이 문제는 특히 느린 화면 이동 시 눈에 띕니다. 따라서 SurfaceControl.Transaction.setFrameRate()
API를 사용하여 프레임워크에 콘텐츠의 프레임 속도를 알리고 동영상 콘텐츠에 비선형 프레임 속도 전환이 적용될 수 있는지 신호를 보내는 것이 중요합니다.
자세한 내용은 프레임 속도 가이드를 참고하세요.
선호하는 사진 프로필 일치
Android 16의 MediaQuality API를 사용하면 개발자가 사진 프로필을 제어할 수 있습니다.
다음은 몇 가지 시나리오의 예입니다.
- 더 넓은 다이나믹 레인지로 마스터링된 영화 및 TV 시리즈의 경우 개발자는 크리에이터가 의도한 대로 콘텐츠를 정확하게 표시하기 위해 Filmmaker 모드를 요청할 수 있습니다. 색상 정확도가 더 높은 시네마 프로필은 밝기를 높이는 대신 어두운 부분의 미묘한 디테일을 살려 줍니다.
- 종종 협소한 다이나믹 레인지로 마스터링되고 일광에서 시청되는 라이브 스포츠 이벤트의 경우 색상 정확성보다 밝기를 우선하는 프로필을 사용하는 것이 좋습니다.
- 게임 개발자는 플레이어가 디스플레이에서 최상의 성능을 얻을 수 있도록 최소한의 이미지 처리로 짧은 지연 시간 프로필을 요청할 수 있습니다.
시스템 사진 프로필 선택
그림 프로필을 선택하기 전에 먼저 기기에서 이를 지원하는지 확인하는 것이 중요합니다.
다음 스니펫은 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
를 사용하여 프로필 ID를 MediaCodec에 직접 제공할 수 있습니다.
지원되는 프로필은 기기에 따라 다를 수 있지만 다음과 같은 알려진 시스템 프로필 ID와 일치시켜 볼 수 있습니다.
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"