התכונה 'פרמטרים של סשן' מפחיתה את העיכובים על ידי מתן אפשרות ללקוחות המצלמה להגדיר באופן פעיל את קבוצת המשנה של פרמטרים יקרים של בקשות, כלומר פרמטרים של סשן, כחלק משלב האתחול של סשן הצילום. בעזרת התכונה הזו, הטמעות ה-HAL מקבלות את הפרמטרים של הלקוח בשלב הגדרת השידור במקום בבקשת הלכידה הראשונה. בהתאם לערכים שלהן, הן יכולות להכין ולפתח את צינור עיבוד הנתונים הפנימי בצורה יעילה יותר.
ב-Android 10, אפשר לשפר את הביצועים באמצעות התכונה האופציונלית של שאילתות לשינוי תצורה של סשנים, כדי לקבל יותר שליטה על הלוגיקה הפנימית של שינוי תצורת הפרמטרים של הסשנים. מידע נוסף זמין במאמר שאילתת הגדרה מחדש של סשן.
דוגמאות ומקור
הטמעת פרמטר של סשן עזר כבר כלולה ב-CameraHal. ב-HAL הזה נעשה שימוש ב-Hal API הקודם. ב-cameraHal המקושר שמוטמעת בו ה-HIDL API של המצלמה, צריך להשתמש ברשומת 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 גלויים לכולם. אם התכונה הזו תיושם, לקוחות המצלמה אמורים לראות שיפור בביצועים כשהם עובדים עם פרמטרים של סשנים.
הטמעה
כדי לתמוך בשאילתות של הגדרה מחדש של הסשן, צריך להטמיע את ה-method isReconfigurationRequired
כדי לבדוק אם נדרשת הגדרה מלאה של השידור בשביל ערכי פרמטרים חדשים של סשנים.
אם הלקוח משנה את הערך של פרמטר סשן שפורסם, מסגרת המצלמה קוראת לשיטה isReconfigurationRequired
. בהתאם לערכים הספציפיים, ה-HAL מחליט אם נדרשת הגדרה מלאה של השידור. אם ה-HAL מחזיר את הערך false
, מסגרת המצלמה מדלגת על ההגדרה מחדש הפנימית. אם ה-HAL מחזיר את הערך true
, המסגרת מגדירה מחדש את הזרמים ומעבירה את ערכי הפרמטרים החדשים של הסשן בהתאם.
אפשר להפעיל את ה-method isReconfigurationRequired
על ידי המסגרת זמן מה לפני שליחת בקשה עם פרמטרים חדשים ל-HAL, ואפשר לבטל את הבקשה לפני שהיא נשלחת. לכן, אסור ל-HAL להשתמש בקריאה ל-method הזו כדי לשנות את ההתנהגות שלו בשום צורה.
הטמעת HAL חייבת לעמוד בדרישות הבאות:
- המסגרת צריכה להיות מסוגלת להפעיל את השיטה
isReconfigurationRequired
בכל שלב אחרי הגדרת הסשן הפעיל. - לא צריכה להיות השפעה על הביצועים של בקשות בהמתנה למצלמה. במיוחד, אסור שיהיו תקלות או עיכובים במהלך סטרימינג רגיל של המצלמה.
המכשיר וההטמעה של HAL צריכים לעמוד בדרישות הביצועים הבאות:
- אסור לשנות את הגדרות המצלמה בחומרה ובתוכנה.
- אסור שמשתמשים יוכלו לראות את ביצועי המצלמה.
השיטה isReconfigurationRequired
מקבלת את הארגומנטים הבאים:
oldSessionParams
: פרמטרים של סשן מהסשן הקודם. בדרך כלל הפרמטרים הקיימים של הסשן.newSessionParams
: פרמטרים חדשים של סשן שמוגדרים על ידי הלקוח.
קודי הסטטוס הצפויים שחוזרים הם:
OK
: השאילתה שנדרשת להגדרה מחדש הושלמה.METHOD_NOT_SUPPORTED
: מכשיר המצלמה לא תומך בשאילתה של הגדרת ההגדרות מחדש.INTERNAL_ERROR
: אי אפשר להשלים את שאילתת ההגדרה מחדש בגלל שגיאה פנימית.
ערכי ההחזרה הם:
true
: צריך להגדיר מחדש את מקור הנתונים.false
: לא נדרשת הגדרה מחדש של הסטרימינג.
כדי להתעלם משאילתה של הגדרה מחדש של סשן, ה-HAL מחזיר את הערך METHOD_NOT_SUPPORTED
או false
. התוצאה היא התנהגות ברירת המחדל של שירות המצלמה, שבה ההגדרה של השידור מופעלת בכל שינוי בפרמטר של סשן.
אימות
אפשר לאמת את התכונה של שאילתות להגדרה מחדש של סשנים באמצעות תרחיש הבדיקה של VTS בקובץ CameraHidlTest#configureStreamsWithSessionParameters
.