תיקון צבעים באמצעות טבלאות בדיקה (LUT)

במכשירי Android יש יכולות HDR שונות, ולכן יכולים להיות הבדלים בפלט של תצוגת ה-HDR. טבלת בדיקת ערכים (LUT) היא פתרון חדש לתיקון צבעים שנועד לפתור את חוסר העקביות הזה. כדי לפתור את חוסר העקביות הזה, מגדירים דרך לתיקון צבע, במקום להקצות מנגנון תיקון צבע לא מוגדר לכל מכשיר.

דרישות מוקדמות ל-SDK

כדי להטמיע טבלאות LUT, גרסת ה-SDK צריכה להיות 36 ומעלה.

הטמעת LUT

כדי להחיל LUT על SurfaceControl:

  1. יוצרים מכונה של DisplayLuts.
  2. יוצרים מופעים של DisplayLuts.Entry עם מאגר הנתונים הזמני של ה-LUT, המאפיין של ה-LUT ומפתח הדגימה של ה-LUT. מידע נוסף זמין במאמרי העזרה של LutProperties.
  3. קוראים לפונקציה DisplayLuts#set(DisplayLuts.Entry luts) או DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) כדי להגדיר רשומות LUT. ה-framework תומך ב-LUT חד-ממדי, ב-LUT תלת-ממדי או בשילוב של LUT חד-ממדי ותלת-ממדי.
  4. שולחים קריאה אל SurfaceControl.Transaction#setLuts כדי להחיל את טבלאות ה-LUT על השכבה.

Kotlin

val sc = SurfaceControl.Builder().build()
val luts = DisplayLuts()
val entry = DisplayLuts.Entry(
    floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),
    LutProperties.ONE_DIMENSION,
    LutProperties.SAMPLING_KEY_MAX_RGB
)
luts.set(entry)
SurfaceControl.Transaction().setLuts(sc, luts).apply()

Java

SurfaceControl sc = new SurfaceControl.Builder().build();
DisplayLuts luts = new DisplayLuts();
DisplayLuts.Entry entry = new DisplayLuts.Entry(
  new float[]{0.5f, 0.5f, 0.5f, 0.5f},
  LutProperties.ONE_DIMENSION,
  LutProperties.SAMPLING_KEY_MAX_RGB
);
luts.set(entry);
new SurfaceControl.Transaction().setLuts(sc, luts).apply();

אפשר גם להשתמש ב-OverlayProperties.getLutProperties() כדי להבין את מאפייני ה-LUT של המכשיר, ולקבוע אם ה-Hardware Composer יכול לטפל ב-LUT שנבחר.