การจัดการสี

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 สำหรับ ส่วนหัว โปรดดูที่