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

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

תנאים מוקדמים לשימוש ב-SDK

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

הטמעה של טבלת מיפוי

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

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