ניהול צבעים

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

גרסאות קודמות של Android לא כללו תמיכה בניהול צבעים, ובמקום זאת הסתמכו על תאימות בין התוכן למסכים (מטרה שענף הטלוויזיה עוזר להשיג לעיתים קרובות). עם זאת, טכנולוגיות התצוגה החדשות מאפשרות להציג צבעים רחבים יותר, אבל התוכן הקיים לא מוצג כצפוי. במכשירים עם Android מגרסה 8.1 ואילך, שמשתמשים במסך עם מגוון רחב של צבעים (לדוגמה, נורית LED אורגנית במטריצה פעילה או AMOLED, מסכי LCD מסוימים), אפשר לראות תוכן עם מגוון רחב של צבעים מאפליקציות.

בדיקת התמיכה במכשיר

מכשירים עם מסכים בצבעים רחבים שפועלים עם Android מגרסה 8.1 ומעלה אמורים לתמוך בניהול צבעים (צבעים רחבים). לפני שמפעילים את התכונה הזו, צריך לוודא שהמכשיר עומד בדרישות הבאות:

  • מסך המכשיר עומד בדרישות החומרה, כולל מסך עם מאפיינים טובים שתומך במרחב הצבעים Display-P3. אם המסך לא עומד בדרישות האלה, אל תפעילו את ניהול הצבעים. כדי לצמצם את ההשפעה על המעבד (CPU) ועל המעבד הגרפי (GPU), מומלץ לכלול תמיכה ב-sRGB מורחב וב-HDR10 בצינור עיבוד הנתונים של המסך.
  • המכשיר תומך בתהליך כיול מקור שמייצר נתוני כיול (שנשמרים במכשיר) כדי להתאים את התנהגות המסך לשינויים בייצור. נתוני ההתאמה צריכים לאפשר למסך להציג תוכן sRGB ותווית לבנה D65 ו-D73 בצורה מדויקת.

אם הדרישות האלה מתקיימות, תוכלו להפעיל את התכונה של ניהול הצבעים במכשיר.

הטמעת ניהול צבע

כדי להטמיע ניהול צבעים, קודם צריך לעדכן את מנהל ה-Hardware Composer 2‏ (HWC2) כדי להבין את מצבי הצבעים ולהחיל את המצבים האלה על החומרה. באופן ספציפי, המלחין של HWC2 צריך לדווח על מצבי הצבעים Display-P3 ו-sRGB באמצעות HWCDisplay::GetColorModes.

לאחר מכן, מפעילים את התוספים הנדרשים של OpenGL ואת התמיכה בספריות כדי לתרגם את מרחבי הצבעים של OpenGL למרחבי נתונים של HAL. תוספי OpenGL הנדרשים כוללים:

  • EGL_EXT_pixel_format_float. מאפשר לאפליקציות ליצור EGLSurfaces שניתנים להצגה עם רכיבי צבע של 16 ביט. תעדוף: גבוה (זהו פורמט הפיקסלים שמוגדר כברירת מחדל באפליקציות שתומכות בצבעים רחבים). נדרשת תמיכה בדרייבר.
  • EGL_KHR_gl_colorspace. באפליקציות שרוצות להשתמש בפורמט ברירת המחדל של framebuffers ב-sRGB כדי להשיג בקלות רבה יותר עיבוד ב-sRGB למכשירי תצוגה, התוסף הזה מאפשר ליצור EGLSurfaces שיעובדו ב-sRGB על ידי הקשרי OpenGL שתומכים ביכולת הזו. נדרש מנהל התקן עם תמיכה בהתנהגות sRGB.

ב-Android יש גם את התוספים האופציונליים הבאים:

  • EGL_EXT_colorspace_scrgb_linear. התוסף הזה מספק אפשרות חדשה למרחב צבעים, scRGB, שאפליקציות יכולות לבחור כשיוצרים EGLSurface. מרחב הצבעים scRGB מגדיר מרחב לינארי שמתייחס לתצוגה, עם אותה נקודה לבנה וצבעי בסיס כמו ב-sRGB (ולכן הוא תואם לאחור ל-sRGB). הפעולה הזו לא אמורה לדרוש תמיכה במנהל התקן, וניתן להטמיע אותה ב-Android EGL wrapper. כדי להשתמש בתוסף הזה, צריך תמיכה בנקודת צפה של 16 ביט (FP16).
  • EGL_EXT_gl_colorspace_display_p3 ו-EGL_EXT_gl_colorspace_display_p3_linear. באפליקציות שרוצות להשתמש בפורמט ברירת המחדל של framebuffers ב-Display-P3 כדי להשיג בקלות רבה יותר עיבוד גרפי ב-sRGB למכשירי תצוגה, התוסף הזה מאפשר ליצור EGLSurfaces שיועברו לעיבוד ב-Display-P3 על ידי הקשרי OpenGL שתומכים ביכולת הזו. אפשר להטמיע את זה ב-EGL driver wrapper.
  • VK_EXT_swapchain_colorspace (Vulkan). מאפשרת לאפליקציות לתייג שרשרות החלפה במרחב הצבעים שבו הן משתמשות. כולל מספר מרחבי צבעים נפוצים כמו DCI-P3,‏ Display-P3,‏ AdobeRGB ו-BT2020.

התאמה אישית

אפשר להתאים אישית את התכונה של ניהול הצבעים כך שתכלול תמיכה במגוון סטנדרטים של צבעים, כמו DCI-P3, ‏ AdobeRGB, ‏ Rec709 ו-Rec2020. אפשרויות נוספות להתאמה אישית:

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

בדיקה

כדי לבדוק את ניהול הצבעים, אפשר להיעזר במקורות המידע הבאים ב-opengl/tests:

  • gl2_basic היא הדגמה פשוטה של OpenGL שמבקשת מרחב צבעים של Display-P3.
  • EGL_test בודק אם יש תמיכה בתוספים ובתצורות הנדרשים (10:10:10:2 ו-FP16).
  • test_wide_color יוצרת משטח באותו אופן כמו SurfaceFlinger (לדוגמה, הגדרה, מרחב צבעים ופורמט פיקסלים).

הטמעת הפניה

להטמעה לדוגמה, אפשר לעיין במאמר frameworks/native. למידע נוסף על כותרות, אפשר לעיין במאמרים הבאים: