התכונה 'פרמטרים של סשן' מאפשרת ללקוחות של המצלמה להגדיר באופן פעיל את קבוצת המשנה של פרמטרים יקרים של בקשות, כלומר פרמטרים של סשן, כחלק משלב האתחול של סשן הצילום, וכך מצמצמת את העיכובים. התכונה הזו מאפשרת להטמעות של HAL לקבל את פרמטרי הלקוח במהלך שלב הגדרת הסטרימינג, במקום במהלך בקשת הצילום הראשונה. כך, בהתאם לערכים של הפרמטרים, אפשר להכין ולבנות את הצינור הפנימי בצורה יעילה יותר.
ב-Android 10, אפשר לשפר את הביצועים באמצעות התכונה האופציונלית של שאילתת הגדרה מחדש של סשן, כדי לקבל שליטה רבה יותר על הלוגיקה של ההגדרה מחדש של פרמטרים פנימיים של סשן. מידע נוסף זמין במאמר בנושא שאילתה להגדרה מחדש של סשן.
דוגמאות ומקור
הטמעה של פרמטר הפעלה של הפניה כבר כלולה ב-CameraHal. ה-HAL הזה משתמש ב-Hal API מדור קודם. CameraHal binderized שמטמיע את ה-API של המצלמה HIDL חייב להשתמש ברשומה המתאימה של sessionParams ב-HIDL כדי לגשת לפרמטרים חדשים של סשן נכנס במהלך הגדרת הזרם.
לקוחות המצלמה יכולים לשלוח שאילתה לגבי המפתחות של כל הפרמטרים הנתמכים של הסשן באמצעות הקריאה ל-getAvailableSessionKeys()
, ובסופו של דבר להגדיר את הערכים הראשוניים שלהם באמצעות setSessionParameters()
.
הטמעה
ההטמעה של CameraHal צריכה לאכלס את הערך
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
במטא-נתונים הסטטיים של המצלמה, ולספק קבוצת משנה של
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
שמכילה רשימה של מפתחות שקשה להחיל אותם לכל פריים, ושיכולים לגרום לעיכובים לא צפויים אם משנים אותם במהלך חיי הסשן של הצילום.
דוגמאות טיפוסיות כוללות פרמטרים שדורשים הגדרה מחדש של חומרה שלוקחת זמן או שינוי פנימי בצינור של המצלמה. עדיין אפשר לשלוט בפרמטרים של הסשן בבקשות לתיעוד, אבל הלקוחות צריכים להיות מודעים לעיכובים באפליקציה שלהם ולצפות להם.
המסגרת עוקבת אחרי כל הבקשות הנכנסות, ואם היא מזהה שינוי בערך של פרמטר של סשן, היא מגדירה מחדש את המצלמה באופן פנימי. הגדרת הסטרימינג החדשה שמועברת אל CameraHal כוללת את ערכי הפרמטרים המעודכנים של הסשן, שמשמשים להגדרה יעילה יותר של צינור המצלמה.
התאמה אישית
אפשר להגדיר תגים ברשימת הפרמטרים הזמינה של הסשן, שמאוכלסת בצד CameraHal. התכונה הזו לא פעילה אם רשימת הפרמטרים הזמינים של הסשן שמוחזרת על ידי CameraHal ריקה.
אימות
חבילת ה-CTS כוללת את מקרי הבדיקה החדשים הבאים לבדיקת פרמטרים של סשנים:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
באופן כללי, אחרי שפרמטר מסוים נכלל ברשימת מפתחות הסשן, הערך הנוכחי שלו נכלל כחלק מפרמטרי הסשן שמועברים במהלך הגדרת הסטרימינג בשכבת HAL.
חשוב לבחור בקפידה את הפרמטרים של הסשן. הערכים לא אמורים להשתנות לעיתים קרובות, אם בכלל, בין הגדרות הסטרימינג. פרמטרים שמשתנים לעיתים קרובות, כמו כוונת הרכישה, לא מתאימים, והוספה שלהם לרשימת פרמטרים של סשן עלולה לגרום לכשלים ב-CTS בגלל הגדרה מחדש פנימית מוגזמת.
שאילתה להגדרה מחדש של סשן
ב-Android 10 נוספה תכונה אופציונלית של שאילתת הגדרה מחדש של סשן, כדי לשפר את הביצועים. הסיבה לכך היא שהגדרות מחדש פנימיות של סטרימינג שנובעות משינויים בערכי הפרמטרים של הסשן עלולות להפחית את הביצועים. כדי לפתור את הבעיה הזו, גרסה 3.5 ואילך של HIDL ICameraDeviceSession
תומכת בשיטה isReconfigurationRequired
, שמאפשרת שליטה מדויקת על הלוגיקה של הגדרה מחדש של פרמטר ההפעלה הפנימי. באמצעות השיטה הזו, אפשר להגדיר מחדש את הזרם בדיוק כשצריך.
הארגומנטים של isReconfigurationRequired
מספקים את המידע הנדרש על כל שינוי בהמתנה של פרמטר של סשן, ומאפשרים התאמות אישיות שונות שספציפיות למכשיר.
התכונה הזו מיושמת רק בשירות המצלמה וב-HAL של המצלמה. אין ממשקי API שפונים לציבור. אם התכונה הזו מיושמת, לקוחות המצלמה אמורים לראות שיפורים בביצועים כשהם עובדים עם פרמטרים של סשן.
הטמעה
כדי לתמוך בשאילתות של הגדרה מחדש של סשן, צריך להטמיע את השיטה isReconfigurationRequired
כדי לבדוק אם נדרשת הגדרה מחדש מלאה של הסטרימינג בשביל ערכים חדשים של פרמטרים של סשן.
אם הלקוח משנה את הערך של פרמטר כלשהו של סשן שפורסם, פלטפורמת המצלמה קוראת לשיטה isReconfigurationRequired
. בהתאם לערכים הספציפיים, שכבת ה-HAL מחליטה אם נדרשת הגדרה מחדש מלאה של הזרם. אם HAL מחזיר false
, מסגרת המצלמה מדלגת על ההגדרה מחדש הפנימית. אם HAL מחזירה true
, המסגרת מגדירה מחדש את הזרמים ומעבירה את הערכים החדשים של פרמטר הסשן בהתאם.
אפשר לקרוא למתודה isReconfigurationRequired
במסגרת זמן מסוימת לפני ששולחים בקשה עם פרמטרים חדשים ל-HAL, ואפשר לבטל את הבקשה לפני השליחה. לכן, ה-HAL לא יכול להשתמש בקריאה לשיטה הזו כדי לשנות את ההתנהגות שלו בשום צורה.
ההטמעה של HAL צריכה לעמוד בדרישות הבאות:
- המסגרת צריכה להיות מסוגלת לקרוא לשיטה
isReconfigurationRequired
בכל שלב אחרי הגדרת סשן פעיל. - השינוי לא ישפיע על הביצועים של בקשות מצלמה בהמתנה. בפרט, אסור שיהיו תקלות או עיכובים במהלך סטרימינג רגיל מהמצלמה.
המכשיר והטמעת ה-HAL צריכים לעמוד בדרישות הביצועים הבאות:
- אסור לשנות את הגדרות המצלמה בחומרה ובתוכנה.
- לא צריכה להיות השפעה על ביצועי המצלמה שגלויים למשתמשים.
השיטה isReconfigurationRequired
מקבלת את הארגומנטים הבאים:
-
oldSessionParams
: פרמטרים של סשן מהסשן הקודם. בדרך כלל הפרמטרים הקיימים של הסשן. -
newSessionParams
: פרמטרים חדשים של סשן שהוגדרו על ידי הלקוח.
קודי הסטטוס הצפויים של ההחזרה הם:
-
OK
: שאילתה שנדרשת כדי להגדיר מחדש את המערכת. -
METHOD_NOT_SUPPORTED
: מכשיר המצלמה לא תומך בשאילתת ההגדרה מחדש. -
INTERNAL_ERROR
: שאילתת ההגדרה מחדש לא יכולה להסתיים בגלל שגיאה פנימית.
ערכי ההחזרה הם:
-
true
: צריך להגדיר מחדש את השידור. -
false
: אין צורך להגדיר מחדש את השידור.
כדי להתעלם משאילתה להגדרה מחדש של סשן, ה-HAL מחזיר את הערך
METHOD_NOT_SUPPORTED
או false
. התוצאה היא התנהגות ברירת המחדל של שירות המצלמה, שבה מופעלת הגדרה מחדש של הסטרימינג בכל שינוי של פרמטר ההפעלה.
אימות
אפשר לאמת את התכונה של שאילתת הגדרה מחדש של סשן באמצעות מקרה הבדיקה VTS ב-CameraHidlTest#configureStreamsWithSessionParameters
.