Manajemen warna

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

Rilis Android sebelumnya tidak menyertakan dukungan manajemen warna dan malah 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 gamut lebar (misalnya, dioda pemancar cahaya organik matriks aktif atau AMOLED, beberapa LCD) dapat melihat konten gamut lebar dari aplikasi.

Tentukan dukungan perangkat

Perangkat dengan layar warna lebar 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 pada saluran tampilan sangat diharapkan.
  • Perangkat mendukung proses kalibrasi pabrik yang menghasilkan data kalibrasi (disimpan di perangkat) untuk menyesuaikan varian produksi dalam perilaku tampilan. Minimal, data kalibrasi harus memungkinkan tampilan menampilkan konten sRGB dan titik putih D65 dan D73 secara akurat.

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

Menerapkan manajemen warna

Untuk menerapkan manajemen warna, pertama-tama perbarui driver Hardware Composer 2 (HWC2) untuk memahami mode warna dan 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 pustaka 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 (perkirakan ini adalah format piksel default untuk aplikasi dengan kesadaran warna lebar). Membutuhkan dukungan pengemudi.
  • EGL_KHR_gl_colorspace . Untuk aplikasi yang ingin menggunakan framebuffer default berformat sRGB agar lebih mudah mencapai rendering sRGB ke perangkat tampilan, ekstensi ini memungkinkan pembuatan EGLSurfaces yang akan dirender dalam sRGB dengan 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 referensi tampilan linier dengan titik putih dan warna primer yang sama dengan sRGB (sehingga kompatibel dengan sRGB). Ini tidak memerlukan dukungan driver dan dapat diterapkan di wrapper 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 tampilan, ekstensi ini memungkinkan pembuatan EGLSurfaces yang akan dirender di Display-P3 dengan konteks OpenGL yang mendukung kemampuan tersebut. Ini dapat diimplementasikan dalam pembungkus driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Memungkinkan aplikasi menandai rantai pertukaran dengan ruang warna yang digunakan. Menyertakan sejumlah ruang warna umum seperti DCI-P3, Display-P3, AdobeRGB, dan BT2020.

Kustomisasi

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

  • 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 lapisan lainnya dapat berupa sRGB yang diperluas, masing-masing dengan saluran warnanya sendiri). Jika terdapat 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.
  • EGL_test menguji 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: