Android 13 เปิดตัวภาพนิ่งที่ผู้ให้บริการกำหนดค่าได้
ไลบรารีที่ชื่อว่า libtonemap
ซึ่งกำหนดการดำเนินการแมปโทนสีและแชร์
ผ่านกระบวนการ SurfaceFlinger และการติดตั้ง Hardware Composer (HWC)
ฟีเจอร์นี้ช่วยให้ OEM กำหนดและแชร์การแมปโทนสีในการแสดงผลได้
ระหว่างเฟรมเวิร์กและผู้ให้บริการ ซึ่งช่วยลดข้อมูลที่ไม่ตรงกัน
การแมป
ก่อน Android 13 การแมปโทนสีเฉพาะสำหรับจอแสดงผล จะไม่มีการแชร์การดำเนินการระหว่าง HWC, SurfaceFlinger และแอป แล้วแต่กรณี เส้นทางการแสดงผลสำหรับเนื้อหา HDR ทำให้คุณภาพของรูปไม่ตรงกัน ที่มีการแมปโทนสีเนื้อหา HDR กับพื้นที่เอาต์พุตด้วยวิธีต่างๆ ช่วงเวลานี้ รับรู้ได้ในสถานการณ์ต่างๆ เช่น การหมุนหน้าจอ กลยุทธ์การเปลี่ยนแปลงระหว่าง GPU และ DPU และมีความแตกต่างในการแสดงผล ระหว่าง TextureView และ SurfaceView
หน้านี้จะอธิบายถึงรายละเอียดเกี่ยวกับอินเทอร์เฟซ การกำหนดค่า และการตรวจสอบความถูกต้องของ
คลัง libtonemap
อินเทอร์เฟซไปยังไลบรารีการแมปโทนสี
libtonemap
ไลบรารีมีการใช้งานที่ CPU สนับสนุนและตัวปรับแสงเงา SkSL
ที่เสียบปลั๊กโดย SurfaceFlinger สำหรับองค์ประกอบแบ็กเอนด์ของ GPU และโดย HWC สำหรับ
สร้างตารางค้นหาการแมปโทนสี (LUT) จุดแรกเข้าไปยัง libtonemap
คือ android::tonemap::getToneMapper()
ซึ่งแสดงผลออบเจ็กต์ที่
ใช้อินเทอร์เฟซ ToneMapper
อินเทอร์เฟซของ ToneMapper
รองรับความสามารถต่อไปนี้
สร้าง LUT การแมปโทนสี
อินเทอร์เฟซ
ToneMapper::lookupTonemapGain
เป็น CPU การใช้งานตัวปรับแสงเงาที่กำหนดไว้ในlibtonemap_LookupTonemapGain()
ช่วงเวลานี้ ใช้โดยการทดสอบหน่วยในเฟรมเวิร์ก และพาร์ทเนอร์สามารถใช้สำหรับ ในการสร้าง LUT การทำแผนที่โทนสีภายในไปป์ไลน์สีlibtonemap_LookupTonemapGain()
จะใช้ค่าสีแบบสัมบูรณ์ ปริภูมิเชิงเส้นแบบไม่ปกติ ทั้งใน RGB เชิงเส้นและใน XYZ และแสดงผลแบบลอย เพื่ออธิบายปริมาณการคูณสีอินพุตในพื้นที่เชิงเส้นสร้างตัวปรับแสงเงา SkSL
อินเทอร์เฟซ
ToneMapper::generateTonemapGainShaderSkSL()
แสดง สตริงตัวปรับแสงเงา SkSL ที่ระบุพื้นที่ของข้อมูลต้นทางและปลายทาง เครื่องมือปรับแสงเงา SkSL คือ เมื่อมีการติดตั้งใช้งาน Skia สำหรับRenderEngine
คอมโพเนนต์การประสานที่ใช้ GPU เร่งการแสดงผลสำหรับ SurfaceFlinger นอกจากนี้ ตัวปรับแสงเงายัง ซึ่งเสียบเข้ากับlibhwui
เพื่อให้การแมปโทนสี HDR เป็น SDR ทำได้อย่างมีประสิทธิภาพสำหรับTextureView
เนื่องจากสตริงที่สร้างขึ้นจะอยู่ใน เครื่องมือสร้างเฉดสี SkSL อื่นๆ ที่ Skia ใช้ ตัวปรับแสงเงาต้องเป็นไปตามกฎต่อไปนี้- สตริงตัวปรับแสงเงาต้องมีจุดแรกเข้าที่มี
ลายเซ็น
float libtonemap_LookupTonemapGain(vec3 linearRGB, vec3 xyz)
โดยที่linearRGB
คือค่านิตสัมบูรณ์ของพิกเซล RGB ในพื้นที่เชิงเส้น และxyz
คือlinearRGB
ที่แปลงเป็น XYZ - เมธอดตัวช่วยใดๆ ที่สตริงตัวปรับแสงใช้ต้องมีคำนำหน้าด้วย
สตริง
libtonemap_
เพื่อให้คําจํากัดความของตัวปรับเฟรมเฟรมเวิร์กไม่ขัดแย้งกัน ในทำนองเดียวกัน เครื่องแบบอินพุตต้องมีin_libtonemap_
นำหน้า
- สตริงตัวปรับแสงเงาต้องมีจุดแรกเข้าที่มี
ลายเซ็น
สร้างเครื่องแบบ SkSL
อินเทอร์เฟซ
ToneMapper::generateShaderSkSLUniforms()
จะแสดงแอตทริบิวต์ ต่อจากนั้น โดยมีข้อมูลเมตาstruct
ที่อธิบายข้อมูลเมตาจาก HDR ที่แตกต่างกัน มาตรฐานและเงื่อนไขการแสดงรายการเครื่องแบบที่เชื่อมโยงกับเครื่องมือเฉดสี SkSL
ค่าแบบเดียวกัน
in_libtonemap_displayMaxLuminance
และin_libtonemap_inputMaxLuminance
ค่าเหล่านี้จะใช้โดยตัวปรับแสงเงาเฟรมเวิร์ก เมื่อปรับขนาดอินพุตเป็นlibtonemap
และปรับเอาต์พุตให้เป็นมาตรฐาน ที่เกี่ยวข้อง
ในปัจจุบัน กระบวนการสร้างเครื่องแบบนั้นไม่เกี่ยวข้องกับการป้อนข้อมูลและ เพื่อจัดเก็บข้อมูลเอาต์พุต
การปรับแต่ง
การใช้ข้อมูลอ้างอิงไลบรารี libtonemap
จะให้ผลลัพธ์ที่ยอมรับได้ อย่างไรก็ตาม
เนื่องจากอัลกอริทึมการแมปโทนสีที่องค์ประกอบของ GPU ใช้อาจแตกต่างจากนี้
ที่ใช้โดยองค์ประกอบ DPU การใช้การอ้างอิงอาจทำให้เกิด
ภาพสั่นไหวในบางสถานการณ์ เช่น ภาพเคลื่อนไหวแบบหมุน สามารถปรับแต่งได้
แก้ไขปัญหาด้านคุณภาพของรูปเฉพาะผู้ให้บริการ
ขอแนะนำให้ OEM ลบล้างการติดตั้งใช้งาน libtonemap
เพื่อ
กำหนดคลาสย่อย ToneMapper
ของตนเอง ซึ่งจะแสดงผลโดย getToneMapper()
เมื่อปรับแต่งการติดตั้งใช้งาน พาร์ทเนอร์จะต้องดำเนินการอย่างใดอย่างหนึ่ง
ดังต่อไปนี้:
- แก้ไขการใช้งาน
libtonemap
โดยตรง - กำหนดไลบรารีแบบคงที่ของตนเอง รวบรวมไลบรารีเป็นสแตนด์อโลน และ
แทนที่ไฟล์
.a
ของไลบรารีlibtonemap
ด้วยไฟล์ที่สร้างจากไฟล์ที่กำหนดเอง ไลบรารี
ผู้ให้บริการไม่จำเป็นต้องแก้ไขโค้ดเคอร์เนล แต่ผู้ให้บริการหลายรายจะต้อง สื่อสารรายละเอียดเกี่ยวกับอัลกอริทึมการแมปโทนของ DPU เพื่อ การใช้งานของคุณ
การตรวจสอบความถูกต้อง
โปรดทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบการติดตั้งใช้งาน
เล่นวิดีโอ HDR บนหน้าจอมาตรฐาน HDR ที่ระบบแสดงผลรองรับ เช่น HLG, HDR10, HDR10+ หรือ DolbyVision
สลับองค์ประกอบของ GPU เพื่อให้แน่ใจว่าไม่มีการกะพริบที่ผู้ใช้รับรู้ได้
ใช้คำสั่ง
adb
ต่อไปนี้เพื่อสลับองค์ประกอบ GPUadb shell service call SurfaceFlinger 1008 i32 <0 to enable HWC composition, 1 to force GPU composition>
ปัญหาทั่วไป
ปัญหาต่อไปนี้อาจเกิดขึ้นเมื่อติดตั้งใช้งาน
แถบสีเกิดขึ้นเมื่อเป้าหมายการแสดงผลที่ใช้โดยองค์ประกอบ GPU ต่ำกว่า แม่นยำกว่าค่าปกติของเนื้อหา HDR ตัวอย่างเช่น แถบสีอาจ เกิดขึ้นเมื่อการใช้งาน HWC รองรับรูปแบบ 10 บิตทึบแสงสำหรับ HDR เช่น RGBA1010102 หรือ P010 แต่กำหนดให้เขียนองค์ประกอบ GPU เป็นรูปแบบ 8 บิต เช่น RGBA8888 เพื่อรองรับรุ่นอัลฟ่า
การเปลี่ยนแปลงของสีที่เล็กน้อยเกิดจากความแตกต่างในการวัดปริมาณ หาก DPU ทำงานด้วยความแม่นยำที่แตกต่างจาก GPU
ปัญหาแต่ละปัญหาจะเกี่ยวข้องกับความแตกต่างด้านความแม่นยำสัมพัทธ์ของ ฮาร์ดแวร์ที่เกี่ยวข้อง วิธีหลีกเลี่ยงปัญหาทั่วไปคือ ต้องแน่ใจว่ามี ในเส้นทางที่มีความแม่นยำต่ำ ทำให้ความแตกต่างของความแม่นยำเกิดขึ้นได้น้อยกว่ามนุษย์ รับรู้ได้