Android 8.1 dan yang lebih baru 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 tampilan gamut lebar untuk memaksimalkan perangkat tampilan.
Rilis Android sebelumnya tidak menyertakan dukungan pengelolaan warna dan bergantung pada kompatibilitas konten dan tampilan (tujuan yang sering dibantu oleh industri TV). Namun, teknologi tampilan terbaru memungkinkan tampilan gamut yang jauh lebih besar yang tidak menampilkan konten yang ada seperti yang diharapkan. Dengan Android 8.1 dan yang lebih baru, perangkat yang menggunakan tampilan 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 baru harus mendukung pengelolaan warna (warna lebar). Sebelum mengaktifkan fitur ini, pastikan perangkat memenuhi persyaratan berikut:
- Tampilan perangkat memenuhi persyaratan hardware, yang mencakup tampilan yang dikarakterisasi dengan baik yang mendukung ruang warna Display-P3. Jika tampilan tidak memenuhi persyaratan ini, jangan aktifkan pengelolaan warna. Untuk mengurangi dampak CPU dan GPU, dukungan untuk sRGB dan HDR10 yang diperluas dalam pipeline tampilan diinginkan.
- Perangkat mendukung proses kalibrasi pabrik yang menghasilkan data kalibrasi (disimpan di perangkat) untuk menyesuaikan varian manufaktur dalam perilaku tampilan. Setidaknya, data kalibrasi harus memungkinkan tampilan menampilkan konten sRGB dan titik putih D65 dan D73 secara akurat.
Jika persyaratan ini terpenuhi, Anda dapat mengaktifkan fitur pengelolaan warna untuk perangkat.
Mengimplementasikan pengelolaan warna
Untuk mengimplementasikan pengelolaan warna, pertama-tama perbarui driver
Hardware Composer 2 (HWC2)
untuk memahami mode warna dan menerapkan mode tersebut ke hardware.
Secara khusus, composer 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 EGLSurfaces 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 untuk lebih mudah mencapai rendering sRGB ke perangkat tampilan, 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 menentukan ruang yang dirujuk tampilan linear dengan titik putih dan primer warna yang sama dengan sRGB (dan dengan demikian kompatibel dengan sRGB). Hal ini tidak memerlukan dukungan driver dan dapat diimplementasikan dalam wrapper EGL Android. Agar berguna, ekstensi ini memerlukan dukungan untuk floating point 16-bit (FP16). -
EGL_EXT_gl_colorspace_display_p3danEGL_EXT_gl_colorspace_display_p3_linear. Untuk aplikasi yang ingin menggunakan framebuffer default format Display-P3 untuk lebih mudah mencapai rendering sRGB ke perangkat tampilan, ekstensi ini memungkinkan pembuatan EGLSurfaces yang akan dirender dalam Display-P3 oleh konteks OpenGL yang mendukung kemampuan tersebut. Hal ini dapat diimplementasikan dalam wrapper driver EGL. -
VK_EXT_swapchain_colorspace(Vulkan). Memungkinkan aplikasi menandai 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 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 sRGB yang diperluas, 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_basicadalah demo OpenGL sederhana yang meminta ruang warna Display-P3.-
EGL_testmenguji dukungan ekstensi dan konfigurasi yang diperlukan (10:10:10:2 dan FP16). test_wide_colormembuat 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:
system/core/include/system/graphics.hsystem/core/include/system/graphics-base.hHAL_DATASPACE_*HAL_COLOR_MODE_*