Manajemen warna

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

Rilis Android sebelumnya tidak menyertakan dukungan pengelolaan warna dan sebaliknya mengandalkan konten dan layar yang kompatibel (sasaran yang sering kali dibantu oleh industri TV). Namun, teknologi layar terbaru memungkinkan tampilan gamut yang jauh lebih besar yang tidak menampilkan konten yang ada seperti yang diharapkan. Dengan Android 8.1 dan yang lebih tinggi, perangkat yang menggunakan layar gamut lebar (misalnya, active-matrix organic light-emitting diode atau AMOLED, beberapa LCD) dapat melihat konten gamut lebar dari aplikasi.

Menentukan dukungan perangkat

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

  • Layar perangkat memenuhi persyaratan hardware, yang mencakup layar yang dikarakterisasi dengan baik yang mendukung ruang warna Display-P3. Jika layar tidak memenuhi persyaratan ini, jangan aktifkan pengelolaan warna. Untuk mengurangi dampak CPU dan GPU, dukungan untuk sRGB yang diperluas dan HDR10 dalam pipeline layar sangatlah diinginkan.
  • Perangkat mendukung proses kalibrasi pabrik yang menghasilkan data kalibrasi (disimpan di perangkat) untuk menyesuaikan varian manufaktur dalam perilaku layar. Setidaknya, data kalibrasi harus memungkinkan layar menampilkan konten sRGB dan titik putih D65 dan D73 secara akurat.

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

Menerapkan pengelolaan warna

Untuk menerapkan pengelolaan warna, update driver Hardware Composer 2 (HWC2) terlebih dahulu untuk memahami mode warna dan menerapkan mode tersebut ke hardware. 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. Memungkinkan aplikasi membuat EGLSurfaces yang dapat ditampilkan dengan komponen warna float 16-bit. Prioritas: tinggi (perkirakan ini adalah format piksel default untuk aplikasi yang mendukung warna lebar). Memerlukan dukungan driver.
  • 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 EGLSurface 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 menentukan ruang yang dirujuk tampilan linear dengan titik putih dan primer warna yang sama seperti sRGB (sehingga kompatibel dengan sRGB). Hal ini tidak memerlukan dukungan driver dan dapat diterapkan di wrapper EGL Android. 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 layar, ekstensi ini memungkinkan pembuatan EGLSurface yang akan dirender di Display-P3 oleh konteks OpenGL yang mendukung kemampuan tersebut. Hal ini dapat diterapkan dalam wrapper driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Memungkinkan aplikasi memberi tag pada rantai swap dengan ruang warna yang digunakan. Mencakup sejumlah ruang warna umum seperti DCI-P3, Display-P3, AdobeRGB, dan BT2020.

Penyesuaian

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

  • Dukungan hardware untuk konversi warna dalam pipeline layar. Mengaktifkan dukungan untuk beberapa transformasi warna di hardware.
  • Dukungan untuk transformasi warna independen di beberapa lapisan (misalnya, beberapa lapisan dapat berupa sRGB dan yang lainnya extended-sRGB, masing-masing dengan pipeline warnanya sendiri). Jika ada lebih dari satu ruang warna yang terlihat, beberapa ruang warna perlu dikonversi ke ruang warna layar. Idealnya, transformasi ini paling baik disediakan oleh mesin tampilan (jika tidak, Android harus melakukan komposisi GPU).

Pengujian

Untuk menguji pengelolaan warna, gunakan resource berikut di opengl/tests:

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

Penerapan referensi

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