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 tampilan. 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 kompatibilitas konten dan tampilan (tujuan yang sering dibantu oleh industri TV). Namun, teknologi layar terbaru memungkinkan layar 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, dioda pemancar cahaya organik matriks aktif atau AMOLED, beberapa LCD) dapat melihat konten gamut lebar dari aplikasi.

Menentukan dukungan perangkat

Perangkat dengan tampilan 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 dikalibrasi 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 dan HDR10 yang diperluas dalam pipeline tampilan sangat diperlukan.
  • Perangkat mendukung proses kalibrasi pabrik yang menghasilkan data kalibrasi (disimpan di perangkat) untuk menyesuaikan variasi manufaktur dalam perilaku tampilan. 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, pertama-tama update driver Hardware Composer 2 (HWC2) 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 dukungan library dan ekstensi OpenGL yang diperlukan untuk menerjemahkan ruang warna OpenGL ke ruang data HAL. Ekstensi OpenGL yang diperlukan mencakup:

  • EGL_EXT_pixel_format_float. Memungkinkan aplikasi membuat EGLSurface yang dapat ditampilkan dengan komponen warna float 16-bit. Prioritas: tinggi (diharapkan 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 ke perangkat tampilan, 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 tampilan linear dengan titik putih dan warna primer yang sama seperti sRGB (dan dengan demikian kompatibel mundur dengan sRGB). Hal ini tidak memerlukan dukungan driver dan dapat diterapkan di wrapper EGL Android. Agar bermanfaat, 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 EGLSurface yang akan dirender dalam Display-P3 oleh konteks OpenGL yang mendukung kemampuan tersebut. Hal ini dapat diterapkan dalam wrapper driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Memungkinkan aplikasi menandai rantai pertukaran dengan ruang warna yang mereka gunakan. 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 meliputi:

  • Dukungan hardware untuk konversi warna dalam pipeline tampilan. Mengaktifkan dukungan untuk beberapa transformasi warna di hardware.
  • Dukungan untuk transformasi warna independen pada 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 tampilan. 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).

Implementasi referensi

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