HDR ในภาพหน้าจอ Android

ตั้งแต่เปิดตัววิดีโอ High Dynamic Range (HDR) บริการสตรีมมิง ได้เริ่มสตรีมวิดีโอ HDR โดยมุ่งเน้นที่ประสบการณ์แบบเต็มหน้าจอ ล่าสุดแอปโซเชียลมีเดีย ได้เปิดตัวการรองรับวิดีโอ HDR และ Ultra HDR ซึ่งแสดงให้เห็นถึงความสนใจที่เพิ่มขึ้นในการนำ HDR มาใช้ในแอปต่างๆ

การรองรับ HDR ใน Android

ต่อไปนี้คือเหตุการณ์สำคัญในการรองรับเทคโนโลยี HDR ของ Android ในช่วงหลายปีที่ผ่านมา

Android 7

  • รองรับการถอดรหัสและการแสดงผลวิดีโอ HDR ในเบื้องต้น
  • ความสามารถของ HDR ที่ได้รับการพัฒนาอย่างต่อเนื่อง

Android 13

  • รองรับการจับภาพ การเข้ารหัส และการแสดงวิดีโอ HDR ตั้งแต่ต้นจนจบ
  • การเปิดตัวการจัดองค์ประกอบ SDR และ HDR แบบผสม ซึ่งกำหนดช่วงความสว่างที่แสดงได้แตกต่างกันระหว่าง SDR และ HDR

Android 14

  • รองรับรูปภาพ HDR ด้วย Ultra HDR

การรองรับภาพหน้าจอด้วย HDR ก็ได้รับการพัฒนาและมีการเปลี่ยนแปลงหลายอย่าง ในช่วงหลายปีที่ผ่านมาเช่นกัน

ความสามารถในการถ่ายภาพหน้าจอ HDR ที่ได้รับการปรับปรุง

ส่วนนี้จะติดตามความคืบหน้าของความสามารถในการถ่ายภาพหน้าจอ HDR ในการอัปเดต Android ล่าสุด

Android 9

SurfaceFlinger ซึ่งเป็นตัวจัดองค์ประกอบกราฟิกของ Android ได้เปิดตัวการรองรับวิดีโอ HDR การแสดงผลวิดีโอและภาพหน้าจอ HDR ด้วย GPU รองรับการใช้ตัวแมปโทนพหุนามที่ซับซ้อน เส้นโค้งการแมปโทนนี้ไม่ได้เทียบเท่ากับแมปเปอร์โทนของจอแสดงผลเสมอไป ดังนั้นภาพหน้าจอจึงแตกต่างจากเนื้อหาบนหน้าจอ

Android 13

มีการเพิ่มปลั๊กอินการแมปโทนลงในบล็อกการแสดงผล GPU ของ SurfaceFlinger ซึ่งช่วยให้ OEM สามารถจัดหาเชเดอร์ GPU เพื่อให้ตรงกับเส้นโค้งการแมปโทนของจอแสดงผล ภาพหน้าจอจะตรงกับสิ่งที่อยู่บนหน้าจอเกือบทั้งหมด แต่จะมีความแตกต่างดังนี้

  • ภาพหน้าจอจะยังคงอยู่ในรูปแบบ SDR ดังนั้น เมื่อดูควบคู่ไปกับฉาก HDR พื้นที่ HDR ภายในภาพหน้าจอจะดูสว่างน้อยลง
  • ระบบไม่ได้จัดการความสว่างของ SDR จึงทำให้เนื้อหา SDR ภายในภาพหน้าจอ ดูสว่างเท่ากับเนื้อหา HDR

กล่าวคือ ระบบจะแปลงวิดีโอ HDR ที่บันทึกในภาพหน้าจอเป็นวิดีโอ SDR

Android 14

Ultra HDR เป็นความท้าทายที่สำคัญในการถ่ายภาพหน้าจอ โดยทั่วไปแล้ว ระบบจะแสดงผลรูปภาพภายใน Framebuffer ของ UI ซึ่งมีผลกระทบหลัก 2 ประการ ดังนี้

  • รูปภาพต้องไม่มีการประมวลผลรูปภาพ ซึ่งรวมถึงการแมปโทน ที่แตกต่างจาก UI โดยรอบ
  • แอปมีหน้าที่รับผิดชอบในการแมปโทนตามแหล่งที่มาเมื่อแสดงผล UI

การแก้ปัญหานี้ทำได้ 3 วิธีในการใช้ภาพหน้าจอ

  • คงรายละเอียด HDR ของรูปภาพ Ultra HDR ไว้ ซึ่งจะส่งผลให้ UI ของแอปในภาพหน้าจอมืดลง
  • คงรายละเอียด UI ของแอปไว้ ซึ่งทำให้เกิดการครอบตัดรูปภาพ Ultra HDR
  • โดยการเพิ่มความสว่างให้กับ UI ของแอปขณะที่ตัดไฮไลต์ HDR

Android 14 ใช้แนวทางที่ 3 ในการทำให้ UI ของแอปสว่างขึ้นและตัด ไฮไลต์ HDR

Android 15-QPR1

SurfaceFlinger มีอัลกอริทึมการแมปโทนสีเฉพาะสำหรับภาพหน้าจอ กระบวนการนี้ประกอบด้วยขั้นตอนต่อไปนี้

  • การแบ่งรูปภาพอินพุตออกเป็นรูปภาพที่เล็กลง
  • คำนวณความสว่างสูงสุดในแต่ละภาพ และทิ้งค่าความสว่างต่ำ ในแต่ละส่วน
  • การประมาณค่าความสว่างที่คำนวณแล้วผ่านการเบลอและการสุ่มตัวอย่างใหม่
  • ใช้ตัวแมปโทน Reinhard ที่มีพารามิเตอร์กับรูปภาพอินพุตโดยอิงตามค่าความสว่างที่ประมาณ

อัลกอริทึมนี้แสดงการปรับปรุงภาพหน้าจอที่สำคัญระหว่าง Android 14 กับ Android 15-QPR1 ดังตัวอย่างต่อไปนี้

  • ตัวอย่างที่ 1 คือภาพหน้าจอของวิดีโอ HDR ที่ซ้อนทับอยู่บนหน้า Chrome ซึ่งมี Ultra HDR โดยสีของ UI ส่วนใหญ่จะยังคงอยู่ใน การติดตั้งใช้งานใหม่ และระบบจะไม่ครอบตัดรูปภาพอีกต่อไป

    Android 14 Android 15-QPR1
    ตัวอย่างที่ 1 ใน Android 14 ตัวอย่าง 1 ใน Android 15qpr

    รูปที่ 1 การเปรียบเทียบ Android 14 กับ Android 15-QPR1 สำหรับตัวอย่างที่ 1

  • ตัวอย่างที่ 2 คือภาพหน้าจอของวิดีโอ HDR ที่ซ้อนทับอยู่ด้านบนการตั้งค่า พร้อมภาพหน้าจอที่ตามมา ใน Android 14 สีของภาพหน้าจอจะ เข้มขึ้นเรื่อยๆ ใน Android 15-QPR1 ตัวทำแผนที่โทนจะจำลองและ รักษาค่าสีของ UI ได้อย่างถูกต้อง

    Android 14 Android 15-QPR1
    ตัวอย่างที่ 2 ใน Android 14 ตัวอย่างที่ 2 ใน Android 15qpr

    รูปที่ 2 การเปรียบเทียบ Android 14 กับ Android 15-QPR1 สำหรับตัวอย่างที่ 2

Android 16

ภาพหน้าจอ HDR จะจัดเก็บ Gainmap ไว้ในไฟล์ภาพหน้าจอเพื่อกู้คืนการแสดงผล HDR ระหว่างการเรนเดอร์ ซึ่งคล้ายกับ Ultra HDR อย่างไรก็ตาม ภาพหน้าจอจะยังคงอยู่ในรูปแบบ PNG เพื่อให้เข้ากันได้กับระบบที่รับภาพหน้าจอ PNG ซึ่งแตกต่างจาก Ultra HDR

รายละเอียดการสร้างภาพหน้าจอมีดังนี้

  • เมื่อแสดงเนื้อหา HDR บนอุปกรณ์ ระบบจะสร้างภาพหน้าจอโดยใช้ พิกเซล FP16
  • เครื่องมือแมปโทนในเครื่องที่อธิบายไว้ใน Android 15-QPR1 สร้างการแสดงผล SDR พื้นฐานแบบ 8 บิต
  • Gainmap 8 บิตเกิดจากการรวมการแสดงผลฐาน SDR กับการแสดงผล HDR
  • ระบบจะเข้ารหัสการแสดงผลพื้นฐาน SDR และ Gainmap เป็นไฟล์ PNG ไฟล์เดียว

รายละเอียดการเข้ารหัส PNG มีดังนี้

  • Gainmap จะได้รับการเข้ารหัสเป็นรูปภาพ PNG ซึ่งมี Chunk gmAP ที่มีข้อมูลเมตา ISO 21496-1 สำหรับ Gainmap
  • การแสดงผลพื้นฐานของ SDR จะได้รับการเข้ารหัสเป็นรูปภาพ PNG ซึ่งมี Chunk gmAP ที่มีข้อมูลเมตาเวอร์ชัน ISO 21496-1 รูปภาพ PNG นี้ยังมี Chunk gdAT ซึ่งมี PNG ของ Gainmap ที่เข้ารหัสทั้งหมด

รูปที่ 1 แสดงเลย์เอาต์ของ Chunk PNG

เลย์เอาต์ของ Chunk PNG

รูปที่ 3 เลย์เอาต์ของ Chunk PNG

ใน Android 16 ตัวแปลงรหัส PNG จะรองรับทั้งการเข้ารหัส และการถอดรหัส PNG เหล่านี้ แอปสามารถแสดง PNG ที่มี Gainmap ในลักษณะเดียวกับ Ultra HDR