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

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

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

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

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

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

אפשר לקרוא לשיטה 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.