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