ویژگی پارامترهای جلسه با فعال کردن کلاینتهای دوربین برای پیکربندی فعال زیرمجموعهای از پارامترهای درخواست پرهزینه، یعنی پارامترهای جلسه، به عنوان بخشی از مرحله اولیهسازی جلسه ضبط، تأخیرها را کاهش میدهد. با این ویژگی، پیادهسازیهای HAL شما پارامترهای مشتری را در طول مرحله پیکربندی جریان به جای اولین درخواست ضبط دریافت میکنند و میتوانند بسته به مقادیر آنها، خط لوله داخلی را با کارایی بیشتری آماده و بسازند.
در اندروید ۱۰، میتوانید با استفاده از ویژگی اختیاری پرسوجوی پیکربندی مجدد جلسه (session reconfiguration query) برای کنترل بیشتر بر منطق پیکربندی مجدد پارامترهای داخلی جلسه، عملکرد را بهبود بخشید. برای اطلاعات بیشتر، به پرسوجوی پیکربندی مجدد جلسه (Session reconfiguration query ) مراجعه کنید.
مثالها و منابع
پیادهسازی پارامتر جلسه مرجع از قبل بخشی از CameraHal است. این HAL از رابط برنامهنویسی قدیمی Hal استفاده میکند. CameraHal بایندری شده که رابط برنامهنویسی HIDL دوربین را پیادهسازی میکند، باید از ورودی HIDL sessionParams مربوطه برای دسترسی به هر پارامتر جلسه ورودی جدید در طول پیکربندی جریان استفاده کند.
کلاینتهای دوربین میتوانند با فراخوانی تابع getAvailableSessionKeys() کلیدهای تمام پارامترهای پشتیبانیشدهی session را جستجو کنند و در نهایت مقادیر اولیهی آنها را از طریق 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 شود.
پرس و جو برای پیکربندی مجدد جلسه
اندروید ۱۰ یک ویژگی اختیاری پرسوجوی پیکربندی مجدد جلسه را برای بهبود عملکرد معرفی میکند، زیرا پیکربندی مجدد جریان داخلی ناشی از تغییرات مقدار پارامتر جلسه میتواند عملکرد را کاهش دهد. برای رفع این نگرانی، HIDL ICameraDeviceSession نسخه ۳.۵ و بالاتر از روش isReconfigurationRequired پشتیبانی میکند که کنترل دقیقی بر منطق پیکربندی مجدد پارامتر جلسه داخلی ارائه میدهد. با استفاده از این روش، پیکربندی مجدد جریان میتواند دقیقاً در صورت نیاز انجام شود.
آرگومانهای isReconfigurationRequired اطلاعات مورد نیاز در مورد هر تغییر پارامتر جلسه در حال انتظار را ارائه میدهند و امکان انواع مختلف سفارشیسازیهای خاص دستگاه را فراهم میکنند.
این ویژگی فقط در سرویس دوربین و HAL دوربین پیادهسازی شده است. هیچ API عمومی وجود ندارد. در صورت پیادهسازی این ویژگی، کلاینتهای دوربین باید هنگام کار با پارامترهای جلسه، بهبود عملکرد را مشاهده کنند.
پیادهسازی
برای پشتیبانی از کوئریهای پیکربندی مجدد جلسه، باید متد isReconfigurationRequired را پیادهسازی کنید تا بررسی شود که آیا پیکربندی مجدد کامل جریان برای مقادیر جدید پارامترهای جلسه مورد نیاز است یا خیر.
اگر کلاینت مقدار هر پارامتر جلسه اعلانشده را تغییر دهد، چارچوب دوربین متد isReconfigurationRequired را فراخوانی میکند. بسته به مقادیر خاص، HAL تصمیم میگیرد که آیا پیکربندی مجدد کامل جریان مورد نیاز است یا خیر. اگر HAL مقدار false را برگرداند، چارچوب دوربین از پیکربندی مجدد داخلی صرفنظر میکند. اگر HAL true را برگرداند، چارچوب جریانها را مجدداً پیکربندی میکند و مقادیر پارامتر جلسه جدید را بر این اساس ارسال میکند.
متد isReconfigurationRequired میتواند مدتی قبل از ارسال درخواست با پارامترهای جدید به HAL توسط چارچوب فراخوانی شود و درخواست میتواند قبل از ارسال لغو شود. بنابراین، HAL نباید از این فراخوانی متد برای تغییر رفتار خود به هیچ وجه استفاده کند.
پیادهسازی HAL باید الزامات زیر را برآورده کند:
- چارچوب باید بتواند متد
isReconfigurationRequiredرا در هر زمانی پس از پیکربندی فعال session فراخوانی کند. - نباید هیچ تاثیری بر عملکرد درخواستهای دوربین در حال بررسی وجود داشته باشد. به طور خاص، نباید هیچ گونه قطعی یا تاخیری در جریان عادی دوربین وجود داشته باشد.
دستگاه و پیادهسازی HAL باید الزامات عملکرد زیر را برآورده کنند:
- تنظیمات سختافزاری و نرمافزاری دوربین نباید تغییر داده شوند.
- نباید هیچ تأثیر قابل مشاهدهای از نظر کاربر بر عملکرد دوربین وجود داشته باشد.
متد isReconfigurationRequired آرگومانهای زیر را دریافت میکند:
-
oldSessionParams: پارامترهای جلسه از جلسه قبلی. معمولاً پارامترهای جلسه موجود. -
newSessionParams: پارامترهای جدید جلسه که توسط کلاینت تنظیم میشوند.
کدهای وضعیت بازگشتی مورد انتظار عبارتند از:
-
OK: پرسوجوی مورد نیاز برای پیکربندی مجدد موفقیتآمیز. -
METHOD_NOT_SUPPORTED: دستگاه دوربین از درخواست پیکربندی مجدد پشتیبانی نمیکند. -
INTERNAL_ERROR: به دلیل یک خطای داخلی، درخواست پیکربندی مجدد نمیتواند تکمیل شود.
مقادیر برگشتی عبارتند از:
-
true: پیکربندی مجدد جریان مورد نیاز است. -
false: پیکربندی مجدد جریان لازم نیست.
برای نادیده گرفتن یک درخواست پیکربندی مجدد جلسه، HAL مقدار METHOD_NOT_SUPPORTED یا false را برمیگرداند. این منجر به رفتار پیشفرض سرویس دوربین میشود که در آن پیکربندی مجدد جریان با هر تغییر پارامتر جلسه آغاز میشود.
اعتبارسنجی
قابلیت پرسوجوی پیکربندی مجدد جلسه را میتوان با استفاده از مورد آزمایشی VTS در CameraHidlTest#configureStreamsWithSessionParameters اعتبارسنجی کرد.