색상 관리

Android 8.1 이상에는 디스플레이 기술 전체에 걸쳐 일관적인 환경을 제공하는 데 사용할 수 있는 색 관리 지원이 포함되어 있습니다. Android에서 실행되는 앱은 고색 재현 디스플레이의 기능 일체에 액세스하여 디스플레이 기기를 최대한 활용할 수 있습니다.

이전 Android 버전은 색 관리 지원을 포함하지 않았으며 대신 콘텐츠와 디스플레이의 호환성에 의존했습니다(주로 TV 업계에서 지원하는 목표). 그러나 최근 디스플레이 기술을 통해 기존 콘텐츠를 예상대로 표시하지 않는 고색 재현 디스플레이가 가능해졌습니다. Android 8.1 이상에서는 고색 재현 디스플레이를 사용하는 기기(예: 능동형 유기 발광 다이오드(AMOLED), 일부 LCD)에서 앱의 고색 재현 콘텐츠를 확인할 수 있습니다.

기기 지원 결정

Android 8.1 이상을 실행하고 고색 재현 디스플레이가 있는 기기는 색 관리(고색)를 지원해야 합니다. 이 기능을 사용 설정하기 전에 기기가 다음 요구사항을 충족하는지 확인하세요.

  • 기기 디스플레이가 Display-P3 색공간을 지원하는 제대로 특성화된 디스플레이를 비롯한 하드웨어 요구사항을 충족합니다. 디스플레이가 이러한 요구사항을 충족하지 않으면 색 관리를 사용 설정하면 안 됩니다. CPU 및 GPU 영향을 줄이려면 디스플레이 파이프라인에서 확장된 sRGB 및 HDR10을 지원하는 것이 좋습니다.
  • 기기가 보정 데이터(기기에 저장됨)를 생성하는 공장 보정 프로세스를 지원하여 디스플레이 동작의 제조 편차를 조정합니다. 최소한 보정 데이터를 통해 디스플레이에서 sRGB 콘텐츠와 D65 및 D73 화이트 포인트를 정확하게 표시할 수 있어야 합니다.

이러한 요구사항을 충족하면 기기에 색 관리 기능을 사용 설정할 수 있습니다.

색 관리 구현

색 관리를 구현하려면 먼저 Hardware Composer 2(HWC2) 드라이버를 업데이트하여 색 모드를 파악하고 이러한 모드를 하드웨어에 적용합니다. 특히 HWC2는 HWCDisplay::GetColorModes를 사용하여 Display-P3 및 sRGB 색 모드를 보고해야 합니다.

그런 다음에는 필요한 OpenGL 확장자와 라이브러리 지원을 사용 설정하여 OpenGL 색공간을 HAL 데이터 공간으로 해석합니다. 필수 OpenGL 확장자는 다음과 같습니다.

  • EGL_EXT_pixel_format_float. 앱에서 16비트 부동 색 구성요소로 표시 가능한 EGLSurfaces를 만들 수 있습니다. 우선순위가 높습니다(고색 인식 앱의 기본 픽셀 형식으로 예상해야 함). 드라이버 지원이 필요합니다.
  • EGL_KHR_gl_colorspace. sRGB 형식 기본 프레임 버퍼를 사용하여 디스플레이 기기에 sRGB 렌더링을 더 쉽게 달성하려는 앱의 경우 이 확장자를 통해 이 기능을 지원하는 OpenGL 컨텍스트에서 sRGB로 렌더링될 EGLSurfaces를 만들 수 있습니다. sRGB 동작과 관련된 드라이버 지원이 필요합니다.

또한 Android는 다음과 같은 선택적 확장자도 제공합니다.

  • EGL_EXT_colorspace_scrgb_linear. 이 확장자는 앱이 EGLSurface를 만들 때 선택할 수 있는 새로운 색공간 옵션인 scRGB를 제공합니다. scRGB 색공간은 sRGB와 동일한 화이트 포인트와 삼원색이 있는 선형 디스플레이 참조 공간을 정의합니다. 따라서 sRGB와 하위 호환됩니다. 드라이버 지원이 필요하지 않으며 Android EGL 래퍼에서 구현될 수 있습니다. 유용성을 발휘하려면 이 확장자에 16비트 부동 소수점(FP16) 지원이 필요합니다.
  • EGL_EXT_gl_colorspace_display_p3EGL_EXT_gl_colorspace_display_p3_linear. Display-P3 형식 기본 프레임 버퍼를 사용하여 디스플레이 기기에 sRGB 렌더링을 좀 더 쉽게 달성하려는 앱의 경우 이 확장자를 통해 이 기능을 지원하는 OpenGL 컨텍스트에서 Display-P3로 렌더링될 EGLSurfaces를 만들 수 있습니다. 이는 EGL 드라이버 래퍼에 구현할 수 있습니다.
  • VK_EXT_swapchain_colorspace(Vulkan). 앱이 사용하고 있는 색공간으로 스왑 체인에 태그를 지정할 수 있습니다. DCI-P3, Display-P3, AdobeRGB, BT2020과 같은 여러 일반적인 색공간을 포함합니다.

맞춤설정

DCI-P3, AdobeRGB, Rec709, Rec2020과 같은 다양한 색 표준 지원을 포함하여 색 관리 기능을 맞춤설정할 수 있습니다. 기타 맞춤설정은 다음과 같습니다.

  • 디스플레이 파이프라인의 색 변환을 위한 하드웨어 지원. 하드웨어에서 여러 색을 변환할 수 있도록 지원합니다.
  • 여러 계층의 개별 색 변환 지원(예: 일부 계층은 sRGB, 다른 계층은 확장된 sRGB일 수 있음, 각각 자체 색 파이프라인을 보유함). 두 개 이상의 색공간이 보이는 경우 일부 색공간을 디스플레이의 색공간으로 변환해야 합니다. 이러한 변환은 디스플레이 엔진에서 제공하는 것이 좋으며, 그렇지 않으면 Android는 GPU 구성을 실행해야 합니다.

테스트

색 관리를 테스트하려면 opengl/tests에서 다음 리소스를 사용하세요.

  • gl2_basic은 Display-P3 색공간을 요청하는 간단한 OpenGL 데모입니다.
  • EGL_test는 필요한 확장자와 구성 지원(10:10:10:2 및 FP16)을 테스트합니다.
  • test_wide_color는 SurfaceFlinger와 동일한 방식으로 표면을 만듭니다(예: 구성, 색공간, 픽셀 형식).

참조 구현

참조 구현은 frameworks/native를 참고하세요. 헤더의 경우 다음을 참고하세요.