اندروید شامل ویژگیهایی است که به کلاینتهای دوربین اجازه میدهد جریانهای دوربین بهینه را برای موارد استفاده خاص انتخاب کنند و اطمینان حاصل کنند که ترکیبهای خاصی از جریان توسط دستگاه دوربین پشتیبانی میشوند. پیکربندی جریان به یک جریان دوربین واحد پیکربندی شده در دستگاه دوربین اشاره دارد و ترکیب جریان به یک یا چند مجموعه از جریانهای پیکربندی شده در دستگاه دوربین اشاره دارد. برای اطلاعات بیشتر در مورد این ویژگیها، به پیکربندیهای جریان توصیه شده و API برای جستجوی ترکیبهای ویژگی مراجعه کنید.
پیادهسازی مرجع
یک پیادهسازی مرجع سمت فروشنده از جریانهای پیکربندی پیشنهادی و API برای جستجوی ویژگیهای ترکیب جریان وجود دارد. میتوانید این پیادهسازی را در QCamera3HWI.cpp پیدا کنید.
پیکربندیهای پیشنهادی برای استریم
فروشندگان دوربین میتوانند پیکربندیهای جریان پیشنهادی را برای موارد استفاده خاص به مشتریان دوربین تبلیغ کنند. این پیکربندیهای جریان پیشنهادی، که زیرمجموعههایی از StreamConfigurationMap هستند، میتوانند به مشتریان دوربین در انتخاب پیکربندیهای بهینه کمک کنند.
اگرچه StreamConfigurationMap اطلاعات جامعی در مورد پیکربندی جریان به کلاینتهای دوربین ارائه میدهد، اما هیچ اطلاعاتی در مورد کارایی، قدرت یا تأثیرات عملکرد در انتخاب یک جریان بر دیگری ارائه نمیدهد. کلاینتهای دوربین میتوانند آزادانه از بین تمام پیکربندیهای جریان ممکن انتخاب کنند، اما در بسیاری از موارد، این امر منجر به استفاده کلاینتها از پیکربندیهای دوربین غیربهینه و انجام جستجوهای جامع و زمانبر توسط برنامهها میشود.
برای مثال، اگرچه برخی از فرمتهای YUV پردازششده مورد نیاز هستند و باید پشتیبانی شوند، اما ممکن است دستگاه دوربین پشتیبانی بومی برای این فرمتها نداشته باشد. این امر منجر به یک مرحله پردازش اضافی برای تبدیل فرمت میشود و کارایی را کاهش میدهد. اندازه و نسبت ابعاد مربوطه نیز میتوانند تأثیر مشابهی داشته باشند و ابعاد خاصی را از نظر قدرت و عملکرد ترجیح دهند.
نقشههای پیکربندی جریان پیشنهادی شما در مقایسه با StreamConfigurationMap نیازی به جامع بودن ندارند. نقشههای پیکربندی پیشنهادی باید الزامات بخش پیادهسازی را رعایت کنند و میتوانند شامل هر یک از فرمتها، اندازهها یا سایر مقادیر موجود در StreamConfigurationMap باشند. فرمتها، اندازهها یا سایر مقادیر پنهان که در StreamConfigurationMap یافت نمیشوند، نمیتوانند در نقشههای پیکربندی جریان پیشنهادی گنجانده شوند.
تمام آزمایشها بدون تغییر باقی میمانند و بسته به پیکربندیهای جریان توصیهشده، آسانتر نمیشوند.
پیکربندیهای جریان پیشنهادی ارائه شده توسط پیادهسازی دوربین اختیاری هستند و کلاینت دوربین میتواند آنها را نادیده بگیرد.
پیادهسازی
برای پیادهسازی این قابلیت، مراحل زیر را دنبال کنید.
ورودیهای فراداده
برای فعال کردن این ویژگی، دوربین HAL باید ورودیهای ابرداده استاتیک زیر را پر کند:
android.scaler.availableRecommendedStreamConfigurations: زیرمجموعه پیشنهادی از پیکربندیهای جریان برای موارد استفاده خاص. این اعلان از بیتمپها استفاده میکند که موارد استفاده پیشنهادی را به شکل[1 << PREVIEW | 1 << RECORD..]نشان میدهد. موارد استفاده، تاپل معمولی (format, width, height, input) را با یک ورودی اضافی گسترش میدهند. موارد استفاده عمومی که وجود ندارند یا هر بیت دیگری که در محدوده[PUBLIC_END, VENDOR_START]تنظیم شده باشد، ممنوع است.این اطلاعات در تگ فراداده
availableRecommendedStreamConfigurationsذخیره میشود.مثال زیر آرایهای را برای پیکربندی جریان پیشنهادی برای یک دستگاه دوربین نشان میدهد که فقط از 4K و 1080p پشتیبانی میکند، که در آن هر دو وضوح برای ضبط ویدیو ترجیح داده میشوند اما فقط 1080p برای پیشنمایش پیشنهاد میشود.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]android.depth.availableRecommendedDepthStreamConfigurations(فقط در صورت پشتیبانی دستگاه در دسترس است): پیکربندیهای پیشنهادی جریان فضای داده عمق برای این دستگاه دوربین. مشابه ورودی فراداده بالا، یک نقشه بیتی مورد استفاده اضافی، موارد استفاده پیشنهادی را نشان میدهد.این اطلاعات در تگ فراداده
availableRecommendedInputOutputFormatsMapذخیره میشود.android.scaler.availableRecommendedInputOutputFormatsMap(فقط در صورت پشتیبانی دستگاه در دسترس است): نگاشت فرمتهای تصویر پیشنهادی که برای این دستگاه دوربین برای جریانهای ورودی پیشنهاد شدهاند، به فرمتهای خروجی مربوطه.این اطلاعات در تگ فراداده
availableRecommendedDepthStreamConfigurationsذخیره میشود.
این اطلاعات از طریق API مربوط به RecommendedStreamConfigurationMap در اختیار کلاینتهای دوربین قرار میگیرد.
موارد استفاده مورد نیاز
پیکربندیهای جریان پیشنهادی باید برای موارد استفاده زیر ارائه شوند و الزامات مربوطه را برآورده کنند:
| مورد استفاده | مورد نیاز |
|---|---|
PREVIEW | پیشنمایش فقط باید شامل پیکربندیهای جریان پردازششدهی بدون نیاز به نصب با فرمتهای خروجی مانند YUV_420_888 و IMPLEMENTATION_DEFINED باشد. |
RECORD | یک رکورد ویدیویی باید شامل پیکربندیهای جریانی باشد که با پروفایلهای رسانهای پشتیبانیشدهی تبلیغشده با فرمت IMPLEMENTATION_DEFINED مطابقت داشته باشند. |
VIDEO_SNAPSHOT | یک اسنپشات ویدیویی باید شامل پیکربندیهای جریانی باشد که حداقل به بزرگی حداکثر رزولوشن RECORD باشند و فقط با ترکیب فرمت/فضای داده BLOB + DATASPACE_JFIF (JPEG) باشند. این پیکربندیها نباید باعث ایجاد اشکال در پیشنمایش شوند و باید بتوانند با سرعت 30 فریم در ثانیه اجرا شوند. |
SNAPSHOT | پیکربندیهای جریان Snapshot باید حداقل شامل یکی با اندازهای نزدیک به android.sensor.info.activeArraySize با ترکیب فرمت/فضای داده BLOB + DATASPACE_JFIF (JPEG) باشد. با در نظر گرفتن محدودیتهای نسبت ابعاد، ترازبندی و سایر محدودیتهای خاص فروشنده، مساحت حداکثر اندازه پیشنهادی نباید کمتر از ۹۷٪ مساحت اندازه آرایه حسگر باشد. |
ZSL (در صورت پشتیبانی) | در صورت پشتیبانی توسط دستگاه دوربین، پیکربندیهای پیشنهادی جریان ورودی فقط باید همراه با سایر فرمتهای خروجی پردازششده یا متوقفشده اعلام شوند. |
RAW (در صورت پشتیبانی) | در صورت پشتیبانی توسط دستگاه دوربین، پیکربندیهای پیشنهادی جریان خام فقط باید شامل فرمتهای خروجی مبتنی بر RAW باشند. |
موارد استفاده دیگر
شما میتوانید جریانهای پیکربندی پیشنهادی بیشتری را برای موارد استفاده خاص پیادهسازی خود ارائه دهید.
اعتبارسنجی
برای آزمایش پیادهسازی جریانهای پیکربندی توصیهشده، آزمایشهای CTS و VTS زیر را اجرا کنید:
API برای جستجوی ترکیب ویژگیها
از اندروید ۱۵ به بعد، پلتفرم اندروید یک API برای جستجوی ترکیب ویژگیها ارائه میدهد. این API به کلاینتهای دوربین اجازه میدهد تا بررسی کنند که آیا ترکیب مشخصی از ویژگیها میتواند توسط دستگاه پشتیبانی شود یا خیر. این API ضروری است زیرا API دوربین۲ ویژگیهای مختلفی مانند ۴k، ۶۰ فریم بر ثانیه، ویدیوی HDR، UltraHDR، زوم Ultrawide و تثبیتکننده را به عنوان کنترلهای متعامد مدلسازی میکند.
الزامات
برای پشتیبانی از API برای جستجوی ترکیب ویژگیها، دوربین HAL باید نسخه ۳ رابط ICameraDevice را پیادهسازی کند. برای جزئیات بیشتر، به بخش پیادهسازی مراجعه کنید.
وقتی از API پشتیبانی میشود، تثبیت پیشنمایش باید متعامد با سایر ویژگیها باشد. این بدان معناست که برای یک دستگاه دوربین که از تثبیت پیشنمایش پشتیبانی میکند، مقدار بازگشتی isStreamCombinationWithSettingsSupported برای یک ترکیب خاص باید هنگام روشن یا خاموش بودن تثبیت پیشنمایش، همان مقدار باشد. این امر فضای جستجو برای پرسوجوهای ترکیب ویژگی را کاهش میدهد.
علاوه بر این، برای عملکرد رسانهای کلاس ۱۵، دوربین اصلی عقب باید از تثبیتکننده پیشنمایش با پیشنمایش ۱۰ بیتی HLG10 برای پیشنمایش ۱۰۸۰p و ۷۲۰p و حداکثر اندازه JPEG پشتیبانی کند. برای جزئیات بیشتر در مورد این الزامات، به بخش ۲.۲.۷.۲ دوربین CDD مراجعه کنید.
پیادهسازی
برای پشتیبانی از API برای پرسوجوی ترکیب ویژگیها، APIهای پرسوجوی ترکیب ویژگی زیر را در نسخه ۳ ICameraDevice پیادهسازی کنید:
constructDefaultRequestSettings: تنظیمات پیشفرض را برای یک نوعCaptureRequestمشخصشده ایجاد میکند. HAL میتواند از پیادهسازیICameraDeviceSession::constructDefaultRequestSettingsاستفاده کند.isStreamCombinationWithSettingsSupported: پشتیبانی دستگاه از ترکیب جریان دوربین مشخص شده با پارامترهای جلسه و کلیدهایCaptureRequestاضافی را بررسی میکند. باید برای ترکیبهای پشتیبانی شدهtrueو برای ترکیبهای ویژگی پشتیبانی نشدهfalseرا برگرداند. HAL میتواند از پیادهسازیisStreamCombinationSupportedاستفاده کند و پشتیبانی را برای بررسی تنظیماتCaptureRequestکه درsessionParamsمنتقل میشوند، اضافه کند.getSessionCharacteristics: ترکیبی از جریانهای پشتیبانیشده با پارامترهای جلسه را دریافت کرده و ویژگیهای مختص جلسه را برمیگرداند.INFO_SESSION_CONFIGURATION_QUERY_VERSION: فهرستی از تمام پیکربندیهای رایج session. این پیکربندیها با آزمایش انطباق تأیید شدهاند.
برای نسخههای پایینتر از نسخه ۳ رابط ICameraDevice ، HAL باید متد isStreamCombinationSupported پیادهسازی کند.
برای اطلاعات بیشتر در مورد ترکیب ویژگیهای مورد پرسش توسط API، به مستندات مربوط به sessionConfigurationQueryVersion در system/media/camera/docs/metadata_definitions.xml مراجعه کنید.
برای پیادهسازی مرجع این ویژگی، به hardware/google/camera/devices/EmulatedCamera/hwl/ مراجعه کنید.
API های عمومی
برنامهها میتوانند از APIهای عمومی زیر برای جستجوی ترکیب ویژگیهای پشتیبانیشده برای دستگاه استفاده کنند:
CameraDevice.CameraDeviceSetup: یک نمایش محدود ازCameraDeviceکه میتواند برای جستجوی ترکیب ویژگیها بدون نیاز به نمونهای ازCameraDeviceاستفاده شود.getCameraDeviceSetup: یک شیءCameraDeviceSetupرا برای یک شناسه دوربین داده شده دریافت میکند، اگرisCameraDeviceSetupSupportedtrueرا برگرداند.INFO_SESSION_CONFIGURATION_QUERY_VERSION: از کوئریهای ترکیبی ویژگی پشتیبانی میکند اگر این مقدارVANILLA_ICE_CREAMیا بالاتر باشد.OutputConfiguration: کلاسی که خروجی دوربین را توصیف میکند، که میتواند شامل یک سطح معوق برای اهداف پرسوجوهای ترکیبی ویژگی با تأخیر کم باشد.SessionConfiguration: یک کلاس کاربردی که پیکربندی جلسه شامل ترکیب جریانها و پارامترهای جلسه را توصیف میکند و میتواند برای پرسوجوهای ترکیب ویژگیها مورد استفاده قرار گیرد.
اعتبارسنجی
برای اعتبارسنجی پیادهسازی این ویژگی، از آزمونهای VTS، CTS و Camera ITS (تأییدکننده CTS) زیر استفاده کنید:
وی تی اس
سی تی اس
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
دوربین ITS