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