ویژگی پارامترهای جلسه با فعال کردن مشتری های دوربین برای پیکربندی فعال زیرمجموعه پارامترهای درخواست پرهزینه، یعنی پارامترهای جلسه، به عنوان بخشی از مرحله اولیه سازی جلسه ضبط، تاخیرها را کاهش می دهد. با استفاده از این ویژگی، پیادهسازیهای HAL شما، پارامترهای کلاینت را در مرحله پیکربندی استریم بهجای اولین درخواست ضبط دریافت میکنند و بسته به مقادیرشان، میتوانند خط لوله داخلی را با کارایی بیشتری آماده کرده و بسازند.
در اندروید 10، برای کنترل بیشتر بر منطق پیکربندی مجدد پارامتر جلسه داخلی، میتوانید عملکرد را با استفاده از ویژگی جستجوی تنظیمات مجدد جلسه اختیاری بهبود بخشید. برای اطلاعات بیشتر، به جستجوی پیکربندی مجدد جلسه مراجعه کنید.
مثال ها و منبع
اجرای پارامتر جلسه مرجع در حال حاضر بخشی از CameraHal است. این HAL از Hal API قدیمی استفاده می کند. CameraHal بایندر شده که API دوربین HIDL را پیادهسازی میکند باید از ورودی HIDL sessionParams مربوطه برای دسترسی به هر پارامتر جلسه ورودی جدید در طول پیکربندی استریم استفاده کند.
کلاینتهای دوربین میتوانند با فراخوانی getAvailableSessionKeys()
کلیدهای تمام پارامترهای جلسه پشتیبانیشده را پرس و جو کنند و در نهایت مقادیر اولیه آنها را از طریق setSessionParameters()
تنظیم کنند.
پیاده سازی
پیادهسازی CameraHal شما باید ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
را در فراداده استاتیک دوربین مربوطه پر کند و زیرمجموعهای از ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
ارائه کند، که حاوی لیستی از کلیدهایی است که در صورت اعمال تغییرات در طول جلسه unexp، به سختی اعمال میشوند و میتوانند منجر به کاهش طول عمر فریم شوند.
نمونه های معمولی شامل پارامترهایی است که نیاز به پیکربندی مجدد سخت افزاری زمان بر یا تغییر خط لوله داخلی دوربین دارند. کنترل روی پارامترهای جلسه همچنان می تواند در درخواست های ضبط اعمال شود، اما مشتریان باید از تاخیر در برنامه خود آگاه باشند و انتظار داشته باشند.
این فریم ورک تمام درخواستهای دریافتی را کنترل میکند و اگر تغییری در مقدار پارامتر جلسه تشخیص دهد، دوربین را مجدداً پیکربندی میکند. پیکربندی استریم جدید به CameraHal ارسال میشود و سپس مقادیر پارامتر جلسه بهروزرسانی شده را شامل میشود که برای پیکربندی خط لوله دوربین بهطور مؤثرتر استفاده میشود.
سفارشی سازی
شما می توانید برچسب ها را در لیست پارامترهای جلسه موجود که در سمت CameraHal پر شده است تعریف کنید. اگر CameraHal لیست پارامترهای جلسه موجود را خالی بگذارد، این ویژگی فعال نیست.
اعتبار سنجی
CTS شامل موارد جدید زیر برای پارامترهای جلسه تست است:
-
CameraDeviceTest#testSessionConfiguration
-
CameraDeviceTest#testCreateSessionWithParameters
-
CameraDeviceTest#testSessionParametersStateLeak
-
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
به طور کلی، پس از اینکه یک پارامتر خاص بخشی از لیست کلید جلسه است، مقدار فعلی آن به عنوان بخشی از پارامترهای جلسه ارسال شده در طول پیکربندی جریان در لایه HAL گنجانده می شود.
پارامترهای جلسه باید با دقت انتخاب شوند. مقادیر نباید به طور مکرر، در صورتی که اصلاً، بین پیکربندیهای جریان تغییر کند. پارامترهایی که به طور مکرر تغییر می کنند، مانند هدف ضبط، مناسب نیستند و افزودن آنها به لیست پارامترهای جلسه می تواند باعث خرابی CTS به دلیل پیکربندی مجدد داخلی بیش از حد شود.
جستار پیکربندی مجدد جلسه
Android 10 یک ویژگی اختیاری پرس و جو پیکربندی مجدد جلسه را برای بهبود عملکرد معرفی می کند زیرا پیکربندی مجدد جریان داخلی ناشی از تغییرات مقدار پارامتر جلسه می تواند عملکرد را کاهش دهد. برای رفع این نگرانی، HIDL ICameraDeviceSession
نسخه 3.5 و بالاتر از روش 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
تأیید کرد.