ویژگی پارامترهای جلسه با فعال کردن کارخواههای دوربین برای پیکربندی فعال زیرمجموعه پارامترهای درخواست پرهزینه، یعنی پارامترهای جلسه، بهعنوان بخشی از مرحله مقداردهی اولیه جلسه ضبط، تأخیرها را کاهش میدهد. با این ویژگی، پیادهسازیهای HAL شما پارامترهای کارخواه را درطول فاز پیکربندی جاریسازی بهجای اولین درخواست ضبط دریافت میکنند و میتوانند، بسته به مقادیرشان، خط لوله داخلی را بهطور کارآمدتری آماده کنند و بسازند.
در Android 10، میتوانید بااستفاده از ویژگی اختیاری پُرسمان پیکربندی مجدد جلسه، عملکرد را بهبود دهید تا کنترل بیشتری بر منطق پیکربندی مجدد پارامتر جلسه داخلی داشته باشید. برای اطلاعات بیشتر، به پرسش بازپیکربندی جلسه مراجعه کنید.
مثالها و منبع
پیادهسازی پارامتر جلسه مرجع ازقبل بخشی از CameraHal است. این HAL از Hal API قدیمی استفاده میکند. binderized CameraHal که HIDL API دوربین را پیادهسازی میکند باید از ورودی HIDL sessionParams مربوطه برای دسترسی به هر پارامتر جلسه ورودی جدید درطول پیکربندی جاریسازی استفاده کند.
کاربران دوربین میتوانند با فراخوانی
getAvailableSessionKeys()
کلیدهای همه پارامترهای جلسه پشتیبانیشده را پُرسمان کنند و درنهایت مقادیر اولیه آنها را ازطریق
setSessionParameters() تنظیم کنند.
پیادهسازی
پیادهسازی CameraHal شما باید
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
را در فراداده دوربین ایستا مربوطه تکمیل کند و زیرمجموعهای از
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
را ارائه دهد که حاوی فهرستی از کلیدهایی است که اعمال آنها در هر فریم دشوار است و میتواند
درصورت اصلاح درطول عمر جلسه ضبط، منجر به تأخیرهای غیرمنتظره شود.
نمونههای معمول شامل پارامترهایی است که نیاز به پیکربندی مجدد سختافزار زمانبر یا تغییر خط لوله دوربین داخلی دارند. کنترل بر پارامترهای جلسه همچنان میتواند در درخواستهای ضبط اعمال شود، اما مشتریان باید از تأخیرهای موجود در برنامه خود آگاه باشند و انتظار آن را داشته باشند.
این چارچوب همه درخواستهای ورودی را پایش میکند و اگر تغییری در مقدار پارامتر جلسه تشخیص دهد، دوربین را بهصورت داخلی پیکربندی مجدد میکند. پیکربندی جاریسازی جدید که به CameraHal ارسال میشود شامل مقادیر پارامتر جلسه بهروزشده است که برای پیکربندی کارآمدتر خط لوله دوربین استفاده میشود.
سفارشیسازی
میتوانید برچسبها را در فهرست پارامتر جلسه دردسترس که در سمت CameraHal تکمیل میشود تعریف کنید. اگر CameraHal فهرست پارامترهای جلسه دردسترس را خالی بگذارد، این ویژگی فعال نیست.
اعتبارسنجی
CTS شامل موارد جدید زیر برای آزمایش پارامترهای جلسه است:
CameraDeviceTest#testSessionConfigurationCameraDeviceTest#testCreateSessionWithParametersCameraDeviceTest#testSessionParametersStateLeakNativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
بهطورکلی، پساز اینکه پارامتر خاصی به فهرست کلید جلسه اضافه شد، مقدار فعلی آن بهعنوان بخشی از پارامترهای جلسه که درطول پیکربندی جاریسازی در لایه HAL ارسال میشوند، اضافه میشود.
پارامترهای جلسه باید با دقت انتخاب شوند. مقادیر نباید بین پیکربندیهای جاریسازی بهطور مکرر تغییر کنند، یا اصلاً نباید تغییر کنند. پارامترهایی که بهطور مکرر تغییر میکنند، مانند هدف ضبط، مناسب نیستند و افزودن آنها به فهرست پارامتر جلسه میتواند باعث خرابیهای CTS بهدلیل پیکربندی مجدد داخلی بیشازحد شود.
پیکربندی مجدد پرسمان جلسه
Android 10 ویژگی اختیاری پُرسمان پیکربندی مجدد جلسه را معرفی میکند تا عملکرد را بهبود بخشد، زیرا پیکربندیهای مجدد جاریسازی داخلی ناشی از تغییرات مقدار پارامتر جلسه میتواند عملکرد را کاهش دهد. برای رفع این نگرانی،
HIDL
ICameraDeviceSession
نسخه ۳.۵ و بالاتر از روش
isReconfigurationRequired
پشتیبانی میکند که کنترل دقیق بر منطق پیکربندی مجدد پارامتر جلسه داخلی را فراهم میکند. بااستفاده از این روش، پیکربندی مجدد جاریسازی میتواند دقیقاً در زمان نیاز انجام شود.
متغیرهای مستقل isReconfigurationRequired
اطلاعات لازم را درباره هر تغییر پارامتر جلسه معلقه ارائه میدهد
و امکان سفارشیسازیهای مختلف مختص دستگاه را فراهم میکند.
این ویژگی فقط در سرویس دوربین و HAL دوربین پیادهسازی شده است. هیچ میانای برنامهسازی کاربردی عمومی وجود ندارد. اگر این ویژگی پیادهسازی شود، مشتریان دوربین باید هنگام کار با پارامترهای جلسه شاهد بهبود عملکرد باشند.
پیادهسازی
برای پشتیبانی از پُرسمانهای پیکربندی مجدد جلسه، باید روش
isReconfigurationRequired
را پیادهسازی کنید تا بررسی کنید آیا پیکربندی مجدد جاریسازی کامل برای مقادیر پارامتر جلسه جدید لازم است یا نه.
اگر کلاینت مقدار هر پارامتر جلسه تبلیغشده را تغییر دهد، چارچوب دوربین
متد isReconfigurationRequired را فراخوانی میکند. بسته به مقادیر خاص، «لایه انتزاعی سختافزار» تصمیم میگیرد که آیا پیکربندی مجدد کامل جاریسازی لازم است یا نه. اگر HAL مقدار false را برگرداند، چارچوب دوربین از پیکربندی مجدد داخلی صرفنظر میکند. اگر HAL مقدار true را برگرداند، چارچوب جریانها را دوباره پیکربندی میکند و مقادیر پارامتر جلسه جدید را براساس آن ارسال میکند.
چارچوب میتواند روش isReconfigurationRequired را مدتی قبلاز ارسال درخواست با پارامترهای جدید به HAL فراخوانی کند و درخواست میتواند قبلاز ارسال لغو شود. بنابراین، «لایه انتزاع سختافزار» نباید از این فراخوانی روش برای تغییر رفتار خود به هیچوجه استفاده کند.
پیادهسازی HAL باید الزامات زیر را برآورده کند:
- چارچوب باید بتواند روش
isReconfigurationRequiredرا در هر زمانی پساز پیکربندی جلسه فعال فراخوانی کند. - نباید هیچ تأثیری بر عملکرد درخواستهای معلق دوربین داشته باشد. بهطور خاص، نباید هیچگونه اشکال یا تأخیری در حین جاریسازی دوربین معمولی وجود داشته باشد.
دستگاه و پیادهسازی HAL باید الزامات عملکرد زیر را برآورده کنند:
- تنظیمات سختافزار و نرمافزار دوربین نباید تغییر کند.
- نباید هیچ تأثیر قابلمشاهدهای برای کاربر بر عملکرد دوربین وجود داشته باشد.
متد isReconfigurationRequired
آرگومانهای زیر را میگیرد:
oldSessionParams: پارامترهای جلسه از جلسه قبلی. معمولاً پارامترهای جلسه موجود.-
newSessionParams: پارامترهای جلسه جدید که توسط مشتری تنظیم شده است.
کدهای وضعیت برگشتی موردانتظار عبارتاند از:
-
OK: پُرسمان موردنیاز برای پیکربندی مجدد موفقیتآمیز بود. METHOD_NOT_SUPPORTED: دستگاه دوربین از پُرسمان پیکربندی مجدد پشتیبانی نمیکند.INTERNAL_ERROR: پرسمان پیکربندی مجدد بهدلیل خطای داخلی تکمیل نمیشود.
مقادیر برگشتی عبارتاند از:
-
true: پیکربندی مجدد جاریسازی لازم است. -
false: پیکربندی مجدد جاریسازی لازم نیست.
برای نادیده گرفتن پُرسمان پیکربندی مجدد جلسه، HAL
METHOD_NOT_SUPPORTED یا false را برمیگرداند. این امر منجر به رفتار پیشفرض سرویس دوربین میشود که در آن پیکربندی مجدد جاریسازی با هر تغییر پارامتر جلسه راهاندازی میشود.
اعتبارسنجی
ویژگی پرسمان پیکربندی مجدد جلسه را میتوان بااستفاده از چارچوب تست VTS در
CameraHidlTest#configureStreamsWithSessionParameters اعتبارسنجی کرد.