การจัดการสี

Android 8.1 ขึ้นไปรองรับการจัดการสีซึ่งสามารถใช้เพื่อให้ประสบการณ์การใช้งานที่สอดคล้องกันสำหรับเทคโนโลยีการแสดงผลต่างๆ แอปที่ทำงานบน Android สามารถเข้าถึงความสามารถทั้งหมดของจอแสดงผลแบบช่วงสีกว้างเพื่อใช้อุปกรณ์แสดงผลให้ได้ประโยชน์สูงสุด

Android รุ่นก่อนหน้าไม่รองรับการจัดการสี แต่อาศัยความเข้ากันได้ของเนื้อหาและจอแสดงผลแทน (เป้าหมายที่อุตสาหกรรมทีวีมักให้ความช่วยเหลือ) อย่างไรก็ตาม เทคโนโลยีการแสดงผลล่าสุดช่วยให้มีจอแสดงผลที่ช่วงสีกว้างขึ้นมาก ซึ่งไม่แสดงเนื้อหาที่มีอยู่ตามที่คาดไว้ เมื่อใช้ Android 8.1 ขึ้นไป อุปกรณ์ที่ใช้จอแสดงผลแบบช่วงสีกว้าง (เช่น จอแสดงผลแบบ Active-Matrix Organic Light-Emitting Diode หรือ AMOLED, LCD บางรุ่น) จะดูเนื้อหาแบบช่วงสีกว้างจากแอปได้

ตรวจสอบการรองรับอุปกรณ์

อุปกรณ์ที่มีจอแสดงผลแบบสีกว้างที่ใช้ Android 8.1 ขึ้นไปควรรองรับการจัดการสี (แบบสีกว้าง) ก่อนเปิดใช้ฟีเจอร์นี้ โปรดตรวจสอบว่าอุปกรณ์มีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • จอแสดงผลของอุปกรณ์เป็นไปตามข้อกำหนดด้านฮาร์ดแวร์ ซึ่งรวมถึงจอแสดงผลที่มีลักษณะเฉพาะซึ่งรองรับพื้นที่สี Display-P3 หากจอแสดงผลไม่เป็นไปตามข้อกำหนดนี้ อย่าเปิดใช้การจัดการสี การรองรับ sRGB แบบขยายและ HDR10 ในไปป์ไลน์การแสดงผลเป็นสิ่งจําเป็นเพื่อลดผลกระทบต่อ CPU และ GPU
  • อุปกรณ์รองรับกระบวนการปรับเทียบจากโรงงานซึ่งจะสร้างข้อมูลการปรับเทียบ (จัดเก็บไว้ในอุปกรณ์) เพื่อปรับความแปรปรวนของการผลิตในลักษณะการแสดงผล ข้อมูลการปรับเทียบควรช่วยให้จอแสดงผลแสดงเนื้อหา 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 สําหรับแอปที่ต้องการใช้ Framebuffer เริ่มต้นรูปแบบ sRGB เพื่อให้แสดงผล sRGB ไปยังอุปกรณ์แสดงผลได้ง่ายขึ้น ส่วนขยายนี้ช่วยให้สร้าง EGLSurface ที่จะแสดงผลเป็น sRGB โดยบริบท OpenGL ที่รองรับความสามารถดังกล่าว ต้องใช้ไดรเวอร์ที่รองรับลักษณะการทำงาน sRGB

นอกจากนี้ Android ยังมีส่วนขยายที่ไม่บังคับต่อไปนี้ด้วย

  • EGL_EXT_colorspace_scrgb_linear ส่วนขยายนี้ให้ตัวเลือกพื้นที่สีใหม่ scRGB ที่แอปสามารถเลือกได้เมื่อสร้าง EGLSurface พื้นที่สี scRGB จะกำหนดพื้นที่สีแบบเชิงเส้นที่อ้างอิงการแสดงผลซึ่งมีจุดขาวและแม่สีเดียวกับ sRGB (จึงใช้งานร่วมกับ sRGB ได้) ซึ่งไม่ควรต้องใช้การรองรับของไดรเวอร์และสามารถติดตั้งใช้งานใน EGL Wrapper ของ Android ได้ ส่วนขยายนี้จำเป็นต้องรองรับเลขทศนิยม 16 บิต (FP16) จึงจะมีประโยชน์
  • EGL_EXT_gl_colorspace_display_p3 และ EGL_EXT_gl_colorspace_display_p3_linear สําหรับแอปที่ต้องการใช้เฟรมบ buffer เริ่มต้นรูปแบบ Display-P3 เพื่อให้แสดงผล sRGB ไปยังอุปกรณ์แสดงผลได้ง่ายขึ้น ส่วนขยายนี้ช่วยให้สร้าง EGLSurfaces ที่แสดงผลเป็น Display-P3 ได้โดยบริบท OpenGL ที่รองรับความสามารถดังกล่าว ซึ่งสามารถติดตั้งใช้งานใน EGL driver wrapper
  • VK_EXT_swapchain_colorspace (Vulkan) ช่วยให้แอปติดแท็กเชนการแลกเปลี่ยนด้วยพื้นที่สีที่ใช้ ประกอบด้วยพื้นที่สีทั่วไปหลายแห่ง เช่น DCI-P3, Display-P3, AdobeRGB และ BT2020

การปรับแต่ง

คุณปรับแต่งฟีเจอร์การจัดการสีได้โดยรองรับมาตรฐานสีที่หลากหลาย เช่น DCI-P3, AdobeRGB, Rec709 และ Rec2020 การปรับแต่งอื่นๆ ได้แก่

  • การรองรับฮาร์ดแวร์สำหรับการแปลงสีในไปป์ไลน์การแสดงผล เปิดใช้การรองรับการเปลี่ยนสีหลายรูปแบบในฮาร์ดแวร์
  • รองรับการเปลี่ยนรูปแบบสีอิสระในหลายเลเยอร์ (เช่น บางเลเยอร์อาจเป็น sRGB และเลเยอร์อื่นๆ เป็น sRGB แบบขยาย ซึ่งแต่ละเลเยอร์จะมีไปป์ไลน์สีของตัวเอง) เมื่อเห็นพื้นที่สีมากกว่า 1 รายการ ระบบจะต้องแปลงพื้นที่สีบางรายการเป็นพื้นที่สีของจอแสดงผล โดยหลักการแล้ว การแสดงผลเอนจินควรเป็นผู้จัดเตรียมการเปลี่ยนรูปแบบนี้ (มิเช่นนั้น Android จะต้องดำเนินการคอมโพสิชัน GPU)

การทดสอบ

หากต้องการทดสอบการจัดการสี ให้ใช้แหล่งข้อมูลต่อไปนี้ใน opengl/tests

  • gl2_basic คือเดโม OpenGL แบบง่ายที่ขอพื้นที่สี Display-P3
  • EGL_test การทดสอบการรองรับส่วนขยายและการกำหนดค่าที่จำเป็น (10:10:10:2 และ FP16)
  • test_wide_color สร้างพื้นผิวในลักษณะเดียวกับ SurfaceFlinger (เช่น การกําหนดค่า พื้นที่สี และรูปแบบพิกเซล)

การใช้งานอ้างอิง

ดูการใช้งานอ้างอิงได้ที่ frameworks/native ดูส่วนหัวได้ที่