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

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

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

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

הטמעה של LUT

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

  1. יוצרים מכונה מסוג DisplayLuts.
  2. יוצרים מופע אחד או יותר של DisplayLuts.Entry עם מאגר נתוני טבלת המיפוי, מאפיין טבלת המיפוי ומפתח הדגימה של טבלת המיפוי. מידע נוסף זמין במאמרי העזרה בנושא LutProperties.
  3. מתקשרים אל DisplayLuts#set(DisplayLuts.Entry luts) או אל DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) כדי להגדיר רשומות של טבלת 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 שנבחר.