יכולות תצוגה (כגון מצבי תצוגה וסוגי HDR נתמכים) יכולות להשתנות באופן דינמי במכשירים שיש להם צגים מחוברים חיצונית (עם HDMI או DisplayPort), כגון ממיר אנדרואיד TV (STBs) ו-Over-the-top (OTT) מכשירים. שינוי זה יכול לקרות כתוצאה מאות HDMI Hotplug, כגון כאשר המשתמש עובר מתצוגה אחת לאחרת או מאתחל את המכשיר ללא צג מחובר. אנדרואיד 12 ומעלה כולל שינויים במסגרת לטיפול בחיבור חם ויכולות תצוגה דינמית.
דף זה מתאר את הטיפול ב-hotplugs לתצוגה ושינויים ביכולות התצוגה ביישום Composer HAL. בנוסף הוא דן כיצד לנהל את ה-framebuffer המשויך ולמנוע תנאי מרוץ במצבים אלה.
עדכן את יכולות התצוגה
סעיף זה מתאר כיצד מסגרת Android מטפלת בשינויים ביכולות התצוגה שיזם Composer HAL.
לפני ש-Android יוכל לטפל בשינויים ביכולות התצוגה כראוי, ה-OEM חייב ליישם Composer HAL כך שישתמש ב- onHotplug(display, connection=CONNECTED)
כדי להודיע למסגרת על כל שינוי ביכולות התצוגה. לאחר יישום זה, אנדרואיד מטפל בשינויים ביכולות התצוגה באופן הבא:
- בזיהוי שינוי ביכולות התצוגה, המסגרת מקבלת הודעת
onHotplug(display, connection=CONNECTED)
. - עם קבלת ההודעה, המסגרת מורידה את מצב התצוגה שלה ויוצרת אותה מחדש עם היכולות החדשות מה-HAL על ידי שימוש בשיטות
getActiveConfig
,getDisplayConfigs
,getDisplayAttribute
,getColorModes
,getHdrCapabilities
ו-getDisplayCapabilities
. - לאחר שהמסגרת יוצרת מחדש מצב תצוגה חדש, היא שולחת את ה-
onDisplayChanged
השיחה חזרה לאפליקציות שמאזינות לאירועים כאלה.
המסגרת מקצה מחדש את ה-framebuffers באירועי onHotplug(display, connection=CONNECTED)
הבאים. ראה ניהול framebuffer של לקוח למידע נוסף על אופן ניהול נכון של זיכרון framebuffer כדי למנוע כשלים במהלך הקצאת מאגרי מסגרות חדשים.
טפל בתרחישי חיבור נפוצים
סעיף זה מכסה כיצד לטפל כראוי בתרחישי חיבור שונים ביישומים שלך כאשר התצוגה הראשית מחוברת ומתנתקת.
לאחר שנבנה למכשירים ניידים, למסגרת אנדרואיד אין תמיכה מובנית בתצוגה ראשית מנותקת. במקום זאת, ה-HAL חייב להחליף את התצוגה הראשית בתצוגת מציין מיקום באינטראקציות שלה עם המסגרת במקרה שבו תצוגה ראשית מנותקת פיזית.
התרחישים הבאים יכולים להתרחש ב-STBs ובדונגלים לטלוויזיה שיש להם צגים מחוברים חיצונית שניתנים לניתוק. כדי ליישם תמיכה בתרחישים אלה, השתמש במידע בטבלה שלהלן:
תַרחִישׁ | טיפול |
---|---|
אין תצוגה מחוברת בזמן האתחול |
|
התצוגה הראשית מחוברת פיזית |
|
התצוגה הראשית מנותקת פיזית |
|
השתמש במזהי תצורה עוקבים כדי למנוע תנאי מרוץ
תנאי מרוץ יכולים להיווצר אם ה-Composer HAL מעדכן את תצורות התצוגה הנתמכות במקביל למסגרת הקוראת setActiveConfig
או setActiveConfigWithConstraints
. הפתרון הוא ליישם את Composer HAL כדי להשתמש במזהים עוקבים ולמנוע בעיה זו.
סעיף זה מתאר כיצד תנאי המרוץ עשויים להתרחש, ולאחר מכן פרטים על אופן הטמעת Composer HAL כך שהוא ישתמש במזהים עוקבים כדי למנוע תנאים כאלה.
שקול את רצף האירועים הבא, כאשר מזהים חדשים עוקבים אינם מוקצים לתצורות התצוגה החדשות, מה שגורם למצב מירוץ:
מזהי תצורת התצוגה הנתמכים הם:
- id=1 , 1080x1920 60 הרץ
- id=2 , 1080x1920 50 הרץ
המסגרת קוראת
setActiveConfig(display, config=1)
.במקביל, ה-Composer HAL מעבד שינוי בתצורות התצוגה ומעדכן את המצב הפנימי שלו לסט חדש של תצורות תצוגה, המוצגות כדלקמן:
- id=1 , 2160x3840 60 הרץ
- id=2 , 2160x3840 50 הרץ
- id=3 , 1080x1920 60 הרץ
- id=4 , 1080x1920 50 הרץ
Composer HAL שולח אירוע
onHotplug
למסגרת, כדי להודיע שמערכת המצבים הנתמכים השתנתה.ה-Composer HAL מקבל
setActiveConfig(display, config=1)
(משלב 2).ה-HAL מפרש שהמסגרת ביקשה שינוי תצורה ל -2160x3840 60 הרץ , למרות שבמציאות 1080x1920 60 הרץ היה רצוי.
התהליך המשתמש בהקצאות מזהות לא עוקבות מסתיים כאן עם פרשנות שגויה של שינוי התצורה הרצוי.
הגדר את Composer HAL לשימוש במזהים עוקבים
כדי להימנע מתנאי מירוץ כאלה, על ה-OEM ליישם את Composer HAL באופן הבא:
- כאשר ה-Composer HAL מעדכן את תצורות התצוגה הנתמכות, הוא מקצה מזהים חדשים רציפים לתצורות התצוגה החדשות.
- כאשר המסגרת קוראת
setActiveConfig
אוsetActiveConfigWithConstraints
עם מזהה תצורה לא חוקי, ה-Composer HAL מתעלם מהקריאה.
צעדים אלה משמשים למניעת תנאי מרוץ כפי שמוצג בדיון הבא.
שקול את רצף האירועים הבא, כאשר מזהים חדשים עוקבים מוקצים לתצורות התצוגה החדשות:
מזהי תצורת התצוגה הנתמכים הם:
- id=1 , 1080x1920 60 הרץ
- id=2 , 1080x1920 50 הרץ
המסגרת קוראת
setActiveConfig(display, config=1)
.כאשר מעובד שינוי בתצורות התצוגה, הסט הבא של מזהי התצורה מוקצים החל מהמספר השלם הבא שאינו בשימוש, המוצג כדלקמן:
id=3 , 2160x3840 60 הרץ
id=4 , 2160x3840 50 הרץ
id=5 , 1080x1920 60 הרץ
id=6 , 1080x1920 50 הרץ
ה-Composer HAL שולח אירוע
onHotplug
למסגרת, כדי להודיע שמערכת המצבים הנתמכים השתנתה.ה-Composer HAL מקבל
setActiveConfig(display, config=1)
(משלב 2).ה-Composer HAL מתעלם מהשיחה שכן המזהה אינו תקף עוד.
המסגרת מקבלת ומעבדת את אירוע
onHotplug
משלב 4. היא קוראת ל-Composer HAL באמצעות הפונקציותgetDisplayConfigs
ו-getDisplayAttribute
. בעזרת פונקציות אלו המסגרת מזהה את המזהה החדש (5) עבור הרזולוציה וקצב הרענון הרצויים של 1080x1920 ו-60 הרץ.המסגרת שולחת אירוע
setActiveConfig
נוסף עם מזהה מעודכן של 5.ה-Composer HAL מקבל
setActiveConfig(display, config=5)
משלב 5.ה-HAL מפרש נכון שהמסגרת ביקשה שינוי תצורה ל-1080x1920 60 הרץ.
כפי שמוצג בדוגמה לעיל, התהליך המשתמש בהקצאות מזהות רציפות מבטיח שמצב המירוץ נמנע ושינוי תצורת התצוגה הנכון מתעדכן.