Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

색 관리

Android 8.1에는 디스플레이 기술 전체에 걸쳐 일관적인 경험을 제공하는 데 사용할 수 있는 색 관리 지원이 추가되었습니다. Android 8.1에서 실행되는 애플리케이션은 광범위한 gamut 디스플레이의 기능 일체에 액세스하여 디스플레이를 최대한 활용할 수 있습니다.

이전 Android 버전에는 색 관리 지원이 포함되지 않았으며, 대신 호환되고 잇는 콘텐츠 및 디스플레이에 의존했습니다(주로 TV 업계에 의해 지원되는 목표). 하지만 최근의 디스플레이 기술은 기존 콘텐츠를 예상대로 표시하지 않는 더 큰 gamut 디스플레이가 가능하게 합니다. Android 8.1에서는 AMOLED(active-matrix organic light-emitting diode) 또는 LED와 같은 고색 재현 디스플레이를 사용하는 기기가 애플리케이션에서 고색 재현 콘텐츠를 볼 수 있습니다.

기기 지원 결정

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

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

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

색상 관리 구현

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

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

  • EGL_EXT_pixel_format_float. 애플리케이션에서 깔끔한 EGLSurface와 16비트 부동 색 구성요소를 생성할 수 있게 해줍니다. 우선순위가 높습니다(고색 인식 애플리케이션의 기본 픽셀 형식으로 예상해야 함). 드라이버 지원이 필요합니다.
  • 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_p3 및 EGL_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. 필수 확장자와 config 지원(10:10:10:2 및 FP16)을 테스트합니다.
  • test_wide_color. SurfaceFlinger와 같은 방식으로 노출 영역을 생성합니다(예: config, 색공간, 픽셀 형식).

참조 구현

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