פרמטרים של סשנים

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

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

דוגמאות ומקור

הטמעת פרמטר של סשן עזר כבר היא חלק מ-CameraHal. ב-HAL הזה נעשה שימוש ב-Hal API הקודם. רכיב CameraHal המקושר שמטמיע את ה-API של HIDL למצלמה חייב להשתמש ברשומה sessionParams של HIDL כדי לגשת לכל פרמטר סשן חדש שנכנס במהלך הגדרת הסטרימינג.

לקוחות מצלמה יכולים לשלוח שאילתות למפתחות של כל הפרמטרים הנתמכים של הסשן באמצעות קריאה ל-getAvailableSessionKeys(), ובסופו של דבר להגדיר את הערכים הראשוניים שלהם באמצעות setSessionParameters().

הטמעה

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

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

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

התאמה אישית

אפשר להגדיר תגים ברשימת הפרמטרים של הסשן שזמינה ומתמלאת בצד CameraHal. התכונה הזו לא פעילה אם CameraHal משאיר את רשימת הפרמטרים הזמינים של הסשן ריקה.

אימות

CTS כולל את התרחישים החדשים הבאים לבדיקה של פרמטרים של סשנים:

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

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

שאילתה של הגדרה מחדש של סשן

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

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

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

הטמעה

כדי לתמוך בשאילתות של הגדרה מחדש של סשן, צריך להטמיע את השיטה 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.