Zarządzanie kolorami

Android 8.1 i nowsze wersje obsługują zarządzanie kolorami, dzięki czemu można zapewnić spójne wrażenia w przypadku różnych technologii wyświetlania. Aplikacje działające w systemie Android mogą uzyskać dostęp do pełnych możliwości wyświetlacza o szerokiej gamie barw, aby w pełni wykorzystać możliwości urządzenia wyświetlającego.

Poprzednie wersje Androida nie obejmowały obsługi zarządzania kolorami i zamiast tego opierały się na zgodności treści i wyświetlaczy (cel często wspierany przez branżę telewizyjną). Jednak najnowsze technologie wyświetlania pozwalają na znacznie większą gamę wyświetlaczy, które nie wyświetlają istniejącej treści zgodnie z oczekiwaniami. W przypadku Androida 8.1 lub nowszego urządzenia korzystające z wyświetlaczy o szerokiej gamie barw (na przykład organicznej diody elektroluminescencyjnej z aktywną matrycą lub AMOLED, niektóre wyświetlacze LCD) mogą wyświetlać treści o szerokiej gamie kolorów z aplikacji.

Określ obsługę urządzenia

Urządzenia z szerokokolorowymi wyświetlaczami z systemem Android 8.1 lub nowszym powinny obsługiwać zarządzanie kolorami (szeroki kolor). Przed włączeniem tej funkcji upewnij się, że urządzenie spełnia następujące wymagania:

  • Wyświetlacz urządzenia spełnia wymagania sprzętowe, które obejmują dobrze scharakteryzowany wyświetlacz obsługujący przestrzeń kolorów Display-P3. Jeśli wyświetlacz nie spełnia tego wymagania, nie włączaj zarządzania kolorami. Aby zmniejszyć wpływ procesora i karty graficznej, pożądana jest obsługa rozszerzonych standardów sRGB i HDR10 w potoku wyświetlania.
  • Urządzenie obsługuje fabryczny proces kalibracji, który generuje dane kalibracyjne (przechowywane w urządzeniu) w celu dostosowania do odchyleń produkcyjnych w zachowaniu wyświetlacza. Dane kalibracyjne powinny co najmniej umożliwiać dokładne wyświetlanie zawartości sRGB oraz punktów bieli D65 i D73 na wyświetlaczu.

Jeśli te wymagania są spełnione, możesz włączyć funkcję zarządzania kolorami w urządzeniu.

Wdrażaj zarządzanie kolorami

Aby zaimplementować zarządzanie kolorami, najpierw zaktualizuj sterownik Hardware Composer 2 (HWC2) , aby poznać tryby kolorów i zastosować je do sprzętu. W szczególności kompozytor HWC2 musi zgłosić tryby kolorów Display-P3 i sRGB za pomocą HWCDisplay::GetColorModes .

Następnie włącz niezbędne rozszerzenia OpenGL i obsługę bibliotek, aby przetłumaczyć przestrzenie kolorów OpenGL na przestrzenie danych HAL. Wymagane rozszerzenia OpenGL obejmują:

  • EGL_EXT_pixel_format_float . Umożliwia aplikacjom tworzenie reprezentacyjnych powierzchni EGLSurface z 16-bitowymi składnikami kolorów zmiennoprzecinkowych. Priorytet: wysoki (spodziewaj się, że jest to domyślny format pikseli dla aplikacji obsługujących szeroką gamę kolorów). Wymaga wsparcia ze strony kierowcy.
  • EGL_KHR_gl_colorspace . W przypadku aplikacji, które chcą używać domyślnych buforów ramki w formacie sRGB, aby łatwiej uzyskać renderowanie sRGB na urządzeniach wyświetlających, to rozszerzenie umożliwia tworzenie EGLSurfaces, które będą renderowane w sRGB przez konteksty OpenGL obsługujące tę funkcję. Wymaga obsługi sterownika dla zachowania sRGB.

Android udostępnia także następujące opcjonalne rozszerzenia:

  • EGL_EXT_colorspace_scrgb_linear . To rozszerzenie zapewnia nową opcję przestrzeni kolorów, scRGB, którą aplikacje mogą wybrać podczas tworzenia EGLSurface. Przestrzeń kolorów scRGB definiuje przestrzeń odniesienia wyświetlacza liniowego z tym samym punktem bieli i kolorami podstawowymi co sRGB (a zatem jest wstecznie kompatybilna z sRGB). Nie powinno to wymagać obsługi sterowników i można je zaimplementować w opakowaniu Androida EGL. Aby rozszerzenie to było przydatne, wymaga obsługi 16-bitowego formatu zmiennoprzecinkowego (FP16).
  • EGL_EXT_gl_colorspace_display_p3 i EGL_EXT_gl_colorspace_display_p3_linear . W przypadku aplikacji, które chcą używać domyślnych buforów ramki w formacie Display-P3, aby łatwiej uzyskać renderowanie sRGB na urządzeniach wyświetlających, to rozszerzenie umożliwia tworzenie EGLSurfaces, które będą renderowane w Display-P3 przez konteksty OpenGL obsługujące tę funkcję. Można to zaimplementować w opakowaniu sterownika EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Umożliwia aplikacjom oznaczanie łańcuchów wymiany używaną przestrzenią kolorów. Obejmuje wiele popularnych przestrzeni kolorów, takich jak DCI-P3, Display-P3, AdobeRGB i BT2020.

Dostosowywanie

Funkcję zarządzania kolorami można dostosować, włączając obsługę różnych standardów kolorów, takich jak DCI-P3, AdobeRGB, Rec709 i Rec2020. Inne dostosowania obejmują:

  • Sprzętowa obsługa konwersji kolorów w potoku wyświetlania. Umożliwia obsługę wielu transformacji kolorów w sprzęcie.
  • Obsługa niezależnej transformacji kolorów na wielu warstwach (na przykład niektóre warstwy mogą być w formacie sRGB, a inne w rozszerzonym sRGB, każda z własnym potokiem kolorów). Jeśli widoczna jest więcej niż jedna przestrzeń kolorów, niektóre przestrzenie kolorów należy przekonwertować na przestrzeń kolorów wyświetlacza. W idealnym przypadku tę transformację najlepiej zapewnia silnik wyświetlania (w przeciwnym razie Android musi wykonać kompozycję GPU).

Testowanie

Aby przetestować zarządzanie kolorami, użyj następujących zasobów w opengl/tests :

  • gl2_basic to proste demo OpenGL, które żąda przestrzeni kolorów Display-P3.
  • EGL_test testuje niezbędną obsługę rozszerzeń i konfiguracji (10:10:10:2 i FP16).
  • test_wide_color tworzy powierzchnię w taki sam sposób jak SurfaceFlinger (na przykład konfiguracja, przestrzeń kolorów i format pikseli).

Implementacja referencyjna

Aby zapoznać się z implementacją referencyjną, zobacz frameworks/native . Aby zapoznać się z nagłówkami, zobacz: