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