Manajemen Warna

Android 8.1 dan yang lebih tinggi menyertakan dukungan untuk manajemen warna yang dapat digunakan untuk memberikan pengalaman yang konsisten di seluruh teknologi tampilan. Aplikasi yang berjalan di Android dapat mengakses kemampuan penuh layar wide-gamut untuk mendapatkan hasil maksimal dari perangkat layar.

Rilis Android sebelumnya tidak menyertakan dukungan manajemen warna dan sebaliknya mengandalkan konten dan tampilan yang kompatibel (tujuan yang sering kali dibantu oleh industri TV). Namun, teknologi tampilan terkini memungkinkan tampilan gamut yang jauh lebih besar yang tidak menampilkan konten yang ada seperti yang diharapkan. Dengan Android 8.1 dan lebih tinggi, perangkat yang menggunakan layar wide-gamut (misalnya, dioda pemancar cahaya organik matriks aktif atau AMOLED, beberapa LCD) dapat melihat konten wide-gamut dari aplikasi.

Menentukan dukungan perangkat

Perangkat dengan layar lebar berwarna yang menjalankan Android 8.1 atau lebih tinggi harus mendukung manajemen warna (warna lebar). Sebelum mengaktifkan fitur ini, pastikan perangkat memenuhi persyaratan berikut:

  • Tampilan perangkat memenuhi persyaratan perangkat keras, yang mencakup tampilan berkarakter baik yang mendukung ruang warna Display-P3. Jika tampilan tidak memenuhi persyaratan ini, jangan aktifkan manajemen warna. Untuk mengurangi dampak CPU dan GPU, dukungan untuk sRGB dan HDR10 yang diperluas dalam saluran tampilan sangat diinginkan.
  • Perangkat mendukung proses kalibrasi pabrik yang menghasilkan data kalibrasi (disimpan di perangkat) untuk menyesuaikan variasi manufaktur dalam perilaku tampilan. Minimal, data kalibrasi harus memungkinkan layar menampilkan konten sRGB secara akurat dan titik putih D65 dan D73.

Jika persyaratan ini terpenuhi, Anda dapat mengaktifkan fitur manajemen warna untuk perangkat.

Menerapkan manajemen warna

Untuk menerapkan manajemen warna, perbarui terlebih dahulu driver Hardware Composer 2 (HWC2) untuk memahami mode warna dan untuk menerapkan mode tersebut ke perangkat keras. Secara khusus, komposer HWC2 harus melaporkan mode warna Display-P3 dan sRGB menggunakan HWCDisplay::GetColorModes .

Selanjutnya, aktifkan ekstensi OpenGL dan dukungan library yang diperlukan untuk menerjemahkan ruang warna OpenGL ke ruang data HAL. Ekstensi OpenGL yang diperlukan meliputi:

  • EGL_EXT_pixel_format_float . Mengizinkan aplikasi membuat EGLSurfaces yang rapi dengan komponen warna float 16-bit. Prioritas: tinggi (harap ini adalah format piksel default untuk aplikasi yang peka terhadap warna lebar). Membutuhkan dukungan pengemudi.
  • EGL_KHR_gl_colorspace . Untuk aplikasi yang ingin menggunakan framebuffer default format sRGB agar lebih mudah mencapai rendering sRGB untuk menampilkan perangkat, ekstensi ini memungkinkan pembuatan EGLSurfaces yang akan dirender dalam sRGB oleh konteks OpenGL yang mendukung kemampuan tersebut. Memerlukan dukungan driver untuk perilaku sRGB.

Android juga menyediakan ekstensi opsional berikut:

  • EGL_EXT_colorspace_scrgb_linear . Ekstensi ini menyediakan opsi ruang warna baru, scRGB, yang dapat dipilih aplikasi saat membuat EGLSurface. Ruang warna scRGB mendefinisikan ruang rujukan tampilan linier dengan titik putih dan warna primer yang sama seperti sRGB (dan dengan demikian kompatibel dengan sRGB). Ini seharusnya tidak memerlukan dukungan driver dan dapat diimplementasikan di pembungkus Android EGL. Agar berguna, ekstensi ini memerlukan dukungan untuk floating point 16-bit (FP16).
  • EGL_EXT_gl_colorspace_display_p3 dan EGL_EXT_gl_colorspace_display_p3_linear . Untuk aplikasi yang ingin menggunakan framebuffer default format Display-P3 agar lebih mudah mencapai rendering sRGB ke perangkat display, ekstensi ini memungkinkan pembuatan EGLSurfaces yang akan dirender di Display-P3 oleh konteks OpenGL yang mendukung kemampuan tersebut. Ini dapat diimplementasikan dalam pembungkus driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Memungkinkan aplikasi untuk menandai rantai swap dengan ruang warna yang mereka gunakan. Mencakup sejumlah ruang warna umum seperti DCI-P3, Display-P3, AdobeRGB, dan BT2020.

Menyesuaikan

Anda dapat menyesuaikan fitur manajemen warna dengan menyertakan dukungan untuk berbagai standar warna seperti DCI-P3, AdobeRGB, Rec709, dan Rec2020. Kustomisasi lainnya termasuk:

  • Dukungan perangkat keras untuk konversi warna di saluran tampilan. Mengaktifkan dukungan untuk beberapa transformasi warna di perangkat keras.
  • Dukungan untuk transformasi warna independen pada beberapa lapisan (misalnya, beberapa lapisan dapat berupa sRGB dan lainnya diperpanjang-sRGB, masing-masing dengan saluran warnanya sendiri). Bila ada lebih dari satu ruang warna yang terlihat, beberapa ruang warna perlu diubah menjadi ruang warna tampilan. Idealnya, transformasi ini paling baik disediakan oleh mesin tampilan (jika tidak, Android harus melakukan komposisi GPU).

Pengujian

Untuk menguji manajemen warna, gunakan sumber daya berikut di opengl/tests :

  • gl2_basic adalah demo OpenGL sederhana yang meminta ruang warna Display-P3.
  • Tes EGL_test untuk ekstensi yang diperlukan dan dukungan konfigurasi (10:10:10:2 dan FP16).
  • test_wide_color membuat permukaan dengan cara yang sama seperti SurfaceFlinger (misalnya, konfigurasi, ruang warna, dan format piksel).

Implementasi referensi

Untuk implementasi referensi, lihat frameworks/native . Untuk header, lihat: