Renk yönetimi

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ş gamlı ekran kullanan cihazlar (ör. aktif matris organik ışık yayan diyot veya AMOLED, bazı LCD'ler) uygulamalardaki geniş gamlı içerikleri görebilir.

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 işlem hattında 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 önce 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 (Bunun, geniş renkli uygulamalar için varsayılan piksel biçimi olduğunu unutmayın). Sürücü desteği gerektirir.
  • EGL_KHR_gl_colorspace. sRGB biçimini kullanarak varsayılan çerçeve arabelleklerini kullanmak isteyen uygulamalar, bu uzantı sayesinde bu özelliği destekleyen OpenGL bağlamları tarafından sRGB olarak oluşturulacak EGLSurface'ler oluşturabilir. Böylece, sRGB oluşturma işlemi görüntüleme cihazlarında daha kolay gerçekleştirilir. 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 (scRGB) sunar. scRGB renk alanı, sRGB ile aynı beyaz noktaya ve renk primerlerine sahip doğrusal bir görüntüleme alanı tanımlar (bu nedenle sRGB ile geriye dönük olarak uyumludur). 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_p3 ve EGL_EXT_gl_colorspace_display_p3_linear. Bu uzantı, Display-P3 biçimini kullanmak isteyen uygulamaların, görüntüleme cihazlarında sRGB oluşturmayı daha kolay elde etmek için varsayılan çerçeve arabelleklerini kullanmasına olanak tanır. 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 işlem hattında 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 kendi renk işlem hattına sahip extended-sRGB olabilir). 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üşüm 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_test testleri.
  • test_wide_color, SurfaceFlinger ile aynı şekilde 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 makaleyi inceleyin: