Android 8.1 ve üzeri, ekran teknolojilerinde tutarlı bir deneyim sağlamak için kullanılabilecek renk yönetimi desteğini içerir. Android'de çalışan uygulamalar, bir görüntüleme cihazından en iyi şekilde yararlanmak için geniş gamlı bir ekranın tüm özelliklerine erişebilir.
Önceki Android sürümleri renk yönetimi desteğini içermiyordu ve bunun yerine içerik ve ekranların uyumlu olmasına güveniyordu (bu amaç genellikle TV endüstrisi tarafından destekleniyordu). Ancak yeni görüntüleme teknolojileri, mevcut içeriği beklendiği gibi görüntülemeyen çok daha geniş gamlı ekranlara olanak tanıyor. Android 8.1 ve üzeri sürümlerde, geniş gamlı ekran kullanan cihazlar (örneğin, aktif matrisli organik ışık yayan diyot veya AMOLED, bazı LCD'ler) uygulamalardaki geniş gamlı içeriği görebilir.
Cihaz desteğini belirleyin
Android 8.1 veya üzerini çalıştıran geniş renkli ekranlara sahip cihazlar, renk yönetimini (geniş renk) desteklemelidir. Bu özelliği etkinleştirmeden önce cihazın aşağıdaki gereksinimleri karşıladığından emin olun:
- Cihaz ekranı, Display-P3 renk alanını destekleyen, iyi tanımlanmış bir ekran içeren donanım gereksinimlerini karşılar. Ekran bu gereksinimi karşılamıyorsa renk yönetimini etkinleştirmeyin. CPU ve GPU etkisini azaltmak için ekran hattında genişletilmiş sRGB ve HDR10 desteği arzu edilir.
- Cihaz, ekran davranışındaki üretim farklılığını ayarlamak için kalibrasyon verilerini (cihazda depolanan) üreten bir fabrika kalibrasyon sürecini destekler. Kalibrasyon verileri en azından ekranın sRGB içeriğini ve D65 ve D73 beyaz noktalarını doğru şekilde görüntülemesine olanak sağlamalıdır.
Bu gereksinimler karşılanırsa aygıt için renk yönetimi özelliğini etkinleştirebilirsiniz.
Renk yönetimini uygulayın
Renk yönetimini uygulamak için öncelikle renk modlarını anlamak ve bu modları donanıma uygulamak amacıyla Hardware Composer 2 (HWC2) sürücüsünü güncelleyin. Özellikle, HWC2 oluşturucusunun HWCDisplay::GetColorModes
kullanarak Display-P3 ve sRGB renk modlarını raporlaması gerekir.
Daha sonra, OpenGL renk uzaylarını HAL veri alanlarına çevirmek için gerekli OpenGL uzantılarını ve kitaplık desteğini etkinleştirin. Gerekli OpenGL uzantıları şunları içerir:
-
EGL_EXT_pixel_format_float
. Uygulamaların, 16 bit kayan renk bileşenleriyle sunulabilir EGL Yüzeyleri oluşturmasına olanak tanır. Öncelik: yüksek (bunun geniş renk uyumlu uygulamalar için varsayılan piksel biçimi olmasını bekleyin). Sürücü desteği gerektirir. -
EGL_KHR_gl_colorspace
. Görüntüleme cihazlarında sRGB oluşturma işlemini daha kolay gerçekleştirmek için sRGB biçimindeki varsayılan çerçeve arabelleklerini kullanmak isteyen uygulamalar için bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından sRGB'de işlenecek EGLSurface'lerin oluşturulmasına olanak tanır. sRGB davranışı için sürücü desteği gerektirir.
Android ayrıca aşağıdaki isteğe bağlı uzantıları da sağlar:
-
EGL_EXT_colorspace_scrgb_linear
. Bu uzantı, uygulamaların EGLSurface oluştururken seçebileceği yeni bir renk alanı seçeneği olan scRGB'yi sağlar. ScRGB renk alanı, sRGB ile aynı beyaz noktaya ve renk ana renklerine sahip doğrusal bir ekran olarak adlandırılan alanı tanımlar (ve dolayısıyla sRGB ile geriye dönük olarak uyumludur). Bu, sürücü desteği gerektirmez ve Android EGL sarmalayıcısında uygulanabilir. Yararlı olması için bu uzantının 16 bitlik kayan nokta (FP16) desteğine ihtiyacı vardır. -
EGL_EXT_gl_colorspace_display_p3
veEGL_EXT_gl_colorspace_display_p3_linear
. Görüntüleme cihazlarında sRGB oluşturma işlemini daha kolay gerçekleştirmek için Display-P3 biçimindeki varsayılan çerçeve arabelleklerini kullanmak isteyen uygulamalar için bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından Display-P3'te işlenecek EGLSurfaces'in oluşturulmasına olanak tanır. Bu, EGL sürücü paketinde uygulanabilir. -
VK_EXT_swapchain_colorspace
(Vulkan). Uygulamaların takas zincirlerini kullandıkları renk alanıyla etiketlemesine olanak tanır. DCI-P3, Display-P3, AdobeRGB ve BT2020 gibi bir dizi ortak renk alanını içerir.
Özelleştirme
DCI-P3, AdobeRGB, Rec709 ve Rec2020 gibi çeşitli renk standartlarını destekleyerek renk yönetimi özelliğini özelleştirebilirsiniz. Diğer özelleştirmeler şunları içerir:
- Ekran hattında renk dönüşümü için donanım desteği. Donanımda birden fazla renk dönüşümü desteğini etkinleştirir.
- Birden çok katmanda bağımsız renk dönüşümü desteği (örneğin, bazı katmanlar sRGB olabilir ve diğerleri genişletilmiş sRGB olabilir; her biri kendi renk hattına sahiptir). Birden fazla renk alanı göründüğünde, bazı renk alanlarının ekranın renk alanına dönüştürülmesi gerekir. İdeal durumda, bu dönüşüm en iyi şekilde görüntü motoru tarafından sağlanır (aksi takdirde Android'in GPU kompozisyonunu gerçekleştirmesi gerekir).
Test yapmak
Renk yönetimini test etmek için opengl/tests
aşağıdaki kaynakları kullanın:
-
gl2_basic
, Display-P3 renk alanı isteyen basit bir OpenGL demosudur. - Gerekli genişletme ve yapılandırma desteği için
EGL_test
testleri (10:10:10:2 ve FP16). -
test_wide_color
SurfaceFlinger ile aynı şekilde bir yüzey oluşturur (örneğin, yapılandırma, renk alanı ve piksel biçimi).
Referans uygulaması
Referans uygulaması için frameworks/native
bakın. Başlıklar için şuraya bakın:
-
system/core/include/system/graphics.h
-
system/core/include/system/graphics-base.h
-
HAL_DATASPACE_*
-
HAL_COLOR_MODE_*
-