Android 8.1 ve sonraki sürümlerde, ekran teknolojilerinde tutarlı bir deneyim sağlamak için kullanılabilecek renk yönetimi desteği bulunur. Android'de çalışan uygulamalar, ekran cihazından en iyi şekilde yararlanmak için geniş gamlı ekranın tüm özelliklerine erişebilir.
Önceki Android sürümlerinde renk yönetimi desteği yoktu ve bunun yerine içerik ile ekranların uyumlu olması sağlanıyordu (bu hedef genellikle TV sektörü tarafından destekleniyordu). Ancak son zamanlarda geliştirilen ekran teknolojileri, mevcut içeriği beklendiği gibi göstermeyen çok daha geniş gamutlu ekranlara olanak tanımaktadır. Android 8.1 ve sonraki sürümlerde, geniş renk gamı ekranı (ör. aktif matris organik ışık yayan diyot veya AMOLED, bazı LCD'ler) kullanan cihazlarda uygulamalardaki geniş renk gamı içerikleri görülebilir.
Cihaz desteğini belirleme
Android 8.1 veya sonraki sürümlerin yüklü olduğu, geniş renkli ekranlara sahip cihazlar renk yönetimini (geniş renk) desteklemelidir. Bu özelliği etkinleştirmeden önce cihazın aşağıdaki koşulları karşıladığından emin olun:
- Cihaz ekranı, Display-P3 renk alanını destekleyen iyi karakterize edilmiş bir ekran da dahil olmak üzere donanım gereksinimlerini karşılıyor. Ekran bu koşulu karşılamıyorsa renk yönetimini etkinleştirmeyin. CPU ve GPU üzerindeki etkiyi azaltmak için ekran ardışık düzeninde genişletilmiş sRGB ve HDR10 desteği olması önerilir.
- Cihaz, ekran davranışındaki üretim varyansını ayarlamak için kalibrasyon verileri (cihazda depolanır) oluşturan bir fabrika kalibrasyon sürecini destekler. Kalibrasyon verileri, ekranın sRGB içeriğini ve D65 ile D73 beyaz noktalarını doğru şekilde göstermesine olanak tanımalıdır.
Bu şartlar karşılanıyorsa cihazda renk yönetimi özelliğini etkinleştirebilirsiniz.
Renk yönetimini uygulama
Renk yönetimini uygulamak için öncelikle renk modlarını anlamak ve bu modları donanıma uygulamak üzere Hardware Composer 2 (HWC2) sürücüsünü güncelleyin.
Özellikle HWC2 birleştiricinin, HWCDisplay::GetColorModes kullanarak Display-P3 ve sRGB renk modlarını bildirmesi gerekir.
Ardından, OpenGL renk alanlarını HAL veri alanlarına çevirmek için gerekli OpenGL uzantılarını ve kitaplık desteğini etkinleştirin. Gerekli OpenGL uzantıları şunlardır:
-
EGL_EXT_pixel_format_float. Uygulamaların, 16 bit kayan nokta renk bileşenleriyle sunulabilir EGLSurface'ler oluşturmasına izin verir. Öncelik: yüksek (geniş renkli uygulamalar için varsayılan piksel biçiminin bu olması beklenir). Sürücü desteği gerektirir. -
EGL_KHR_gl_colorspace. sRGB biçimindeki varsayılan çerçeve arabelleklerini kullanarak ekran cihazlarında sRGB oluşturmayı daha kolay elde etmek isteyen uygulamalar için bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından sRGB'de oluşturulacak 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 sunar:
-
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 sunar. scRGB renk alanı, sRGB ile aynı beyaz noktaya ve renk primerlerine sahip (bu nedenle sRGB ile geriye dönük olarak uyumludur) doğrusal bir görüntüleme alanı tanımlar. Bu işlem için sürücü desteği gerekmez ve Android EGL sarmalayıcısında uygulanabilir. Bu uzantının yararlı olması için 16 bit kayan nokta (FP16) desteği gerekir. -
EGL_EXT_gl_colorspace_display_p3veEGL_EXT_gl_colorspace_display_p3_linear. Display-P3 biçimini kullanmak isteyen uygulamalar, sRGB oluşturmayı görüntüleme cihazlarında daha kolay elde etmek için varsayılan çerçeve arabelleklerini kullanabilir. Bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından Display-P3'te oluşturulacak EGLSurface'lerin oluşturulmasına olanak tanır. Bu, EGL sürücü sarmalayıcısında uygulanabilir. -
VK_EXT_swapchain_colorspace(Vulkan). Uygulamaların, kullandıkları renk alanıyla takas zincirlerini etiketlemesini sağlar. DCI-P3, Display-P3, AdobeRGB ve BT2020 gibi yaygın renk alanlarını içerir.
Özelleştirme
DCI-P3, AdobeRGB, Rec709 ve Rec2020 gibi çeşitli renk standartları için destek ekleyerek renk yönetimi özelliğini özelleştirebilirsiniz. Diğer özelleştirmeler şunlardır:
- Ekran ardışık düzeninde renk dönüştürme için donanım desteği Donanımda birden fazla renk dönüşümü desteğini etkinleştirir.
- Birden fazla katmanda bağımsız renk dönüşümü desteği (örneğin, bazı katmanlar sRGB, diğerleri ise genişletilmiş sRGB olabilir ve her katmanın kendi renk işlem hattı vardır). Birden fazla renk alanı görünür olduğunda bazı renk alanlarının ekranın renk alanına dönüştürülmesi gerekir. İdeal olarak bu dönüştürme, en iyi şekilde ekran motoru tarafından sağlanır (aksi takdirde Android, GPU bileşimi gerçekleştirmelidir).
Test
Renk yönetimini test etmek için opengl/tests bölümünde aşağıdaki kaynakları kullanın:
gl2_basic, Display-P3 renk alanı isteyen basit bir OpenGL demosudur.-
Gerekli uzantı ve yapılandırma desteği (10:10:10:2 ve FP16) için
EGL_testtestleri. test_wide_color, SurfaceFlinger ile aynı şekilde bir yüzey oluşturur (ör. yapılandırma, renk alanı ve piksel biçimi).
Referans uygulama
Referans uygulama için frameworks/native başlıklı makaleyi inceleyin. Başlıklar için şu makaleye bakın:
system/core/include/system/graphics.hsystem/core/include/system/graphics-base.hHAL_DATASPACE_*HAL_COLOR_MODE_*