Android 8.1 ขึ้นไปรองรับการจัดการสี ซึ่งใช้เพื่อมอบประสบการณ์การใช้งานที่สอดคล้องกันในเทคโนโลยีการแสดงผลต่างๆ ได้ แอปที่ทำงานบน Android สามารถเข้าถึงความสามารถทั้งหมดของจอแสดงผลแบบไวด์แกมมาเพื่อ ใช้ประโยชน์จากอุปกรณ์แสดงผลให้ได้มากที่สุด
Android รุ่นก่อนๆ ไม่รองรับการจัดการสี และ แทนที่จะเป็นเช่นนั้น ก็อาศัยการทำงานร่วมกันของเนื้อหาและจอแสดงผล (เป้าหมายที่มักได้รับความช่วยเหลือจาก อุตสาหกรรมทีวี) อย่างไรก็ตาม เทคโนโลยีการแสดงผลล่าสุดช่วยให้จอแสดงผลมีช่วงสีที่กว้างขึ้นมาก ซึ่งแสดงเนื้อหาที่มีอยู่ไม่เป็นไปตามที่คาดไว้ ใน Android 8.1 ขึ้นไป อุปกรณ์ที่ใช้จอแสดงผลแบบ Wide Gamut (เช่น Active-Matrix Organic Light-Emitting Diode หรือ AMOLED, LCD บางรุ่น) จะดูเนื้อหาแบบ Wide Gamut จากแอปได้
ตรวจสอบว่าอุปกรณ์รองรับหรือไม่
อุปกรณ์ที่มีจอแสดงผลแบบช่วงสีแบบกว้างที่ใช้ Android 8.1 ขึ้นไปควรรองรับการจัดการสี (ช่วงสีแบบกว้าง) ก่อนเปิดใช้ฟีเจอร์นี้ โปรดตรวจสอบว่าอุปกรณ์มีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้
- จอแสดงผลของอุปกรณ์เป็นไปตามข้อกำหนดด้านฮาร์ดแวร์ ซึ่งรวมถึง จอแสดงผลที่มีลักษณะเฉพาะที่รองรับพื้นที่สี Display-P3 หากจอแสดงผลไม่เป็นไปตามข้อกำหนดนี้ อย่าเปิดใช้การจัดการสี เพื่อ ลดผลกระทบต่อ CPU และ GPU เราขอแนะนำให้รองรับ sRGB แบบขยายและ HDR10 ในไปป์ไลน์การแสดงผล
- อุปกรณ์รองรับกระบวนการปรับเทียบจากโรงงานที่สร้างข้อมูลการปรับเทียบ (จัดเก็บไว้ในอุปกรณ์) เพื่อปรับความแปรปรวนในการผลิตลักษณะการแสดงผล ข้อมูลการปรับเทียบควรช่วยให้จอแสดงผลแสดงเนื้อหา sRGB รวมถึงจุดสีขาว D65 และ D73 ได้อย่างถูกต้องเป็นอย่างน้อย
หากมีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ คุณจะเปิดใช้ฟีเจอร์การจัดการสี สำหรับอุปกรณ์ได้
ใช้การจัดการสี
หากต้องการใช้การจัดการสี ให้อัปเดตไดรเวอร์ Hardware Composer 2 (HWC2) ก่อน
เพื่อทำความเข้าใจโหมดสีและใช้โหมดเหล่านั้นกับฮาร์ดแวร์
โดยเฉพาะอย่างยิ่ง คอมโพสเซอร์ HWC2 ต้องรายงานโหมดสี Display-P3 และ sRGB
โดยใช้ HWCDisplay::GetColorModes
จากนั้นเปิดใช้ส่วนขยาย OpenGL และการรองรับไลบรารีที่จำเป็นเพื่อ แปลงพื้นที่สี OpenGL เป็นพื้นที่ข้อมูล HAL ส่วนขยาย OpenGL ที่จำเป็น ได้แก่
-
EGL_EXT_pixel_format_float
อนุญาตให้แอปสร้าง EGLSurface ที่นำเสนอได้ด้วยคอมโพเนนต์สีแบบลอยจุด 16 บิต ลำดับความสำคัญ: สูง (คาดว่านี่คือรูปแบบพิกเซลเริ่มต้นสำหรับแอปที่รองรับสีแบบกว้าง) ต้องได้รับการสนับสนุนจากไดรเวอร์ -
EGL_KHR_gl_colorspace
สำหรับแอปที่ต้องการใช้เฟรมบัฟเฟอร์เริ่มต้นในรูปแบบ sRGB เพื่อให้แสดงผล sRGB ในอุปกรณ์แสดงผลได้ง่ายขึ้น ส่วนขยายนี้จะช่วยให้สร้าง EGLSurface ที่จะแสดงผลใน sRGB โดยบริบท OpenGL ที่รองรับความสามารถนั้นได้ ต้องรองรับไดรเวอร์สำหรับลักษณะการทำงานของ sRGB
นอกจากนี้ Android ยังมีส่วนขยายที่ไม่บังคับต่อไปนี้ด้วย
-
EGL_EXT_colorspace_scrgb_linear
ส่วนขยายนี้มีตัวเลือกพื้นที่สีใหม่คือ scRGB ซึ่งแอปสามารถ เลือกได้เมื่อสร้าง EGLSurface พื้นที่สี scRGB กำหนดพื้นที่อ้างอิงของจอแสดงผลเชิงเส้น ที่มีจุดสีขาวและแม่สีเดียวกันกับ sRGB (จึงเข้ากันได้แบบย้อนหลังกับ sRGB) ซึ่งไม่จำเป็นต้องมีการรองรับไดรเวอร์ และสามารถติดตั้งใช้งานใน Wrapper ของ EGL ใน Android ได้ ส่วนขยายนี้ต้องรองรับจุดทศนิยมแบบ 16 บิต (FP16) จึงจะมีประโยชน์ -
EGL_EXT_gl_colorspace_display_p3
และEGL_EXT_gl_colorspace_display_p3_linear
สำหรับแอปที่ต้องการใช้ Framebuffer เริ่มต้นในรูปแบบ Display-P3 เพื่อให้การแสดงผล sRGB ในอุปกรณ์แสดงผลทำได้ง่ายขึ้น ส่วนขยายนี้จะช่วยสร้าง EGLSurface ที่จะแสดงผลใน Display-P3 โดยบริบท OpenGL ที่รองรับความสามารถดังกล่าว ซึ่งนำไปใช้ได้ใน Wrapper ของไดรเวอร์ EGL -
VK_EXT_swapchain_colorspace
(Vulkan) ช่วยให้แอปติดแท็กเชนการสลับด้วยพื้นที่สีที่ใช้ได้ มีพื้นที่สีทั่วไปหลายรายการ เช่น DCI-P3, Display-P3, AdobeRGB และ BT2020
การปรับแต่ง
คุณปรับแต่งฟีเจอร์การจัดการสีได้โดยเพิ่มการรองรับ มาตรฐานด้านสีที่หลากหลาย เช่น DCI-P3, AdobeRGB, Rec709 และ Rec2020 การปรับแต่งอื่นๆ ได้แก่
- การรองรับฮาร์ดแวร์สำหรับการแปลงสีในไปป์ไลน์การแสดงผล เปิดใช้การรองรับการเปลี่ยนสีหลายรายการในฮาร์ดแวร์
- รองรับการแปลงสีแบบอิสระในหลายเลเยอร์ (เช่น บางเลเยอร์อาจเป็น sRGB และบางเลเยอร์อาจเป็น extended-sRGB โดยแต่ละเลเยอร์จะมี ไปป์ไลน์สีของตัวเอง) เมื่อมี Color Space มากกว่า 1 รายการที่มองเห็นได้ ระบบจะต้องแปลง Color Space บางรายการเป็น Color Space ของจอแสดงผล ในอุดมคติ การแปลงนี้ควรมาจากเครื่องมือแสดงผล (มิฉะนั้น Android จะต้อง ทำการคอมโพสิต GPU)
การทดสอบ
หากต้องการทดสอบการจัดการสี ให้ใช้แหล่งข้อมูลต่อไปนี้ใน
opengl/tests
gl2_basic
เป็นเดโม OpenGL อย่างง่ายที่ขอพื้นที่สี Display-P3-
EGL_test
ทดสอบการรองรับส่วนขยายและการกำหนดค่าที่จำเป็น (10:10:10:2 และ FP16) test_wide_color
สร้างพื้นผิวในลักษณะเดียวกับ SurfaceFlinger (เช่น การกำหนดค่า พื้นที่สี และรูปแบบพิกเซล)
การใช้งานอ้างอิง
ดูการติดตั้งใช้งานอ้างอิงได้ที่ frameworks/native
สำหรับ
ส่วนหัว โปรดดูที่
system/core/include/system/graphics.h
system/core/include/system/graphics-base.h
HAL_DATASPACE_*
HAL_COLOR_MODE_*