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

יכולות ה-HDR משתנות בין מכשירי Android, ולכן פלט ה-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. המסגרת תומכת בטבלאות מיפוי חד-ממדיות, בטבלאות מיפוי תלת-ממדיות או בשילוב של טבלאות מיפוי חד-ממדיות ותלת-ממדיות.
  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 שנבחר.