Renk yönetimi

Android 8.1 ve sonraki sürümler, ekran teknolojileri arasında tutarlı bir deneyim sağlamak için kullanılabilecek renk yönetimi desteği içerir. Android'de çalışan uygulamalar, ekran cihazından en iyi şekilde yararlanmak için geniş renk gamına sahip ekranın tüm özelliklerine erişebilir.

Önceki Android sürümleri renk yönetimi desteği içermiyordu ve bunun yerine içerik ile ekranların uyumlu olmasına (genellikle TV sektörünün yardım ettiği bir hedef) dayanıyordu. Ancak son görüntü teknolojilerinde, mevcut içeriği beklendiği gibi göstermeyen çok daha geniş kapsamlı ekranlar kullanılmaktadır. Android 8.1 ve sonraki sürümlerde, geniş renk yelpazesine sahip ekran kullanan cihazlar (ör. aktif matris organik ışık yayan diyot veya AMOLED, bazı LCD'ler) uygulamalardaki geniş renk yelpazesine sahip içerikleri görebilir.

Cihaz desteğini belirleme

Android 8.1 veya sonraki sürümleri çalıştıran geniş renk ekranlı 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 şartlarını karşılamalıdır. Ekran bu koşulu karşılamıyorsa renk yönetimini etkinleştirmeyin. CPU ve GPU etkisini azaltmak için ekran ardışık düzeninde genişletilmiş sRGB ve HDR10 desteği istenmektedir.
  • Cihaz, ekran davranışındaki üretim varyansını ayarlamak için kalibrasyon verileri (cihazda depolanır) oluşturan bir fabrika kalibrasyon işlemini destekler. En azından kalibrasyon verileri, ekranın sRGB içeriğini, D65 ve D73 beyaz noktalarını doğru şekilde göstermesine olanak tanımalıdır.

Bu koşullar karşılanırsa 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 amacıyla Donanım Bestecisi 2 (HWC2) sürücüsünü güncelleyin. Daha açık belirtmek gerekirse HWC2 derleyicisi, Display-P3 ve sRGB renk modlarını HWCDisplay::GetColorModes kullanarak bildirmelidir.

Ardından, OpenGL renk alanlarını HAL veri alanlarına dönüştürmek 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 sunulacak EGLSurface'ler oluşturmasına olanak tanır. Öncelik: yüksek (geniş renk farkında uygulamalar için varsayılan piksel biçimi budur). Sürücü desteği gerekir.
  • EGL_KHR_gl_colorspace. Ekran cihazlarında sRGB oluşturmayı daha kolay hale getirmek için sRGB biçiminde varsayılan çerçeve ardışık düzenlerini kullanmak isteyen uygulamalar için bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından sRGB olarak oluşturulacak EGLSurface'ler oluşturmaya olanak tanır. sRGB davranışı için sürücü desteği gerekir.

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 (scRGB) sunar. scRGB renk alanı, sRGB ile aynı beyaz noktaya ve renk primerlerine sahip doğrusal bir ekran referanslı alan tanımlar (ve bu nedenle sRGB ile geriye dönük 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ı olabilmesi için 16 bit kayan nokta (FP16) desteği gerekir.
  • EGL_EXT_gl_colorspace_display_p3 ve EGL_EXT_gl_colorspace_display_p3_linear. Görüntüleme cihazlarında sRGB oluşturmayı daha kolay hale getirmek için Display-P3 biçimindeki varsayılan çerçeve ardışık düzenlerini kullanmak isteyen uygulamalar için bu uzantı, bu özelliği destekleyen OpenGL bağlamları tarafından Display-P3'te oluşturulacak EGLSurface'ler oluşturmaya olanak tanır. Bu, EGL sürücü sarmalayıcısında uygulanabilir.
  • VK_EXT_swapchain_colorspace (Vulkan). Uygulamaların, takas zincirlerini kullandıkları renk alanıyla etiketlemelerini 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ına 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üştürme işlemini destekler.
  • Birden fazla katmanda bağımsız renk dönüştürme desteği (örneğin, bazı katmanlar sRGB, bazıları ise her biri kendi renk ardışık düzenine sahip olan genişletilmiş sRGB olabilir). 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 olarak bu dönüştürme işlemi en iyi şekilde görüntü motoru tarafından sağlanır (aksi takdirde Android'in GPU oluşturması gerekir).

Test

Renk yönetimini test etmek için opengl/tests'teki aşağıdaki kaynakları kullanın:

  • gl2_basic, Display-P3 renk alanı isteyen basit bir OpenGL demosudur.
  • EGL_test gerekli uzantı ve yapılandırma desteğini (10:10:10:2 ve FP16) test eder.
  • 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 bölümüne bakın. Başlıklar için şu makaleleri inceleyin: