Android ویژگیهایی دارد که به مشتریان دوربین امکان میدهد جاریسازیهای دوربین بهینه را برای موارد استفاده خاص انتخاب کنند و مطمئن شوند که دستگاه دوربین از ترکیبهای جاریسازی خاصی پشتیبانی میکند. پیکربندی جاریسازی به یک جاریسازی دوربین تکی پیکربندیشده در دستگاه دوربین اشاره دارد و ترکیب جاریسازی به یک یا چند مجموعه از جاریسازیهای پیکربندیشده در دستگاه دوربین اشاره دارد. برای اطلاعات بیشتر درباره این ویژگیها، پیکربندیهای جاریسازی توصیهشده و میانای برنامهسازی کاربردی برای پُرسمان ترکیبهای ویژگی را ببینید.
پیادهسازی مرجع
پیادهسازی مرجع طرف فروشنده از پیکربندی توصیهشده جاریسازیها و میانای برنامهسازی کاربردی برای پُرسمان ویژگیهای ترکیب جاریسازی وجود دارد. میتوانید این پیادهسازی را در QCamera3HWI.cpp پیدا کنید
پیکربندیهای جاریسازی توصیهشده
فروشندگان دوربین میتوانند پیکربندیهای جاریسازی پیشنهادی را برای موارد استفاده خاص به مشتریان دوربین تبلیغ کنند. این پیکربندیهای جاریسازی توصیهشده، که زیرمجموعههایی از StreamConfigurationMap هستند، میتوانند به مشتریان دوربین کمک کنند پیکربندیهای بهینه را انتخاب کنند.
اگرچه StreamConfigurationMap اطلاعات پیکربندی جاریسازی جامعی را به مشتریان دوربین ارائه میدهد، اما هیچ اطلاعاتی درباره کارایی، توان، یا تأثیرات عملکردی انتخاب یک جاریسازی نسبتبه جاریسازی دیگر ارائه نمیدهد. کاربران دوربین میتوانند آزادانه از بین همه پیکربندیهای جاریسازی ممکن انتخاب کنند، اما در بسیاری از موارد، این امر منجر به استفاده کاربران از پیکربندیهای دوربین زیربهینه و برنامهها به انجام جستجوهای جامع زمانبر میشود.
برای مثال، اگرچه برخیاز قالبهای YUV پردازششده الزامی هستند و باید پشتیبانی شوند، ممکن است دستگاه دوربین از این قالبها بهطور بومی پشتیبانی نکند. این کار منجر به یک مرحله پردازش اضافی برای تبدیل قالب میشود و کارایی را کاهش میدهد. اندازه و نسبت ابعادی مربوطه نیز میتواند تأثیر مشابهی داشته باشد و ابعاد خاصی را از نظر قدرت و عملکرد ترجیحپذیر کند.
نقشههای پیکربندی جاریسازی توصیهشده شما در مقایسه با StreamConfigurationMap نیازی به جامع بودن ندارند. نقشههای پیکربندی پیشنهادی باید از الزامات بخش پیادهسازی پیروی کنند و میتوانند شامل هریک از قالبها، اندازهها، یا مقادیر موجود در StreamConfigurationMap باشند. قالبها، اندازهها، یا مقادیر پنهان دیگری که در StreamConfigurationMap پیدا نمیشوند نمیتوانند در نقشههای پیکربندی جاریسازی توصیهشده اضافه شوند.
همه آزمایشها بدون تغییر باقی میمانند و بسته به پیکربندیهای جاری توصیهشده، آسانتر نمیشوند.
پیکربندیهای جاریسازی توصیهشده که توسط پیادهسازی دوربین ارائه میشود اختیاری است و کارخواه دوربین میتواند آنها را نادیده بگیرد.
پیادهسازی
برای پیادهسازی این ویژگی، این مراحل را دنبال کنید.
ورودیهای فراداده
برای فعال کردن این ویژگی، Camera HAL باید ورودیهای فراداده ثابت زیر را پر کند:
android.scaler.availableRecommendedStreamConfigurations: زیرمجموعه توصیهشده پیکربندیهای جاریسازی برای موارد استفاده خاص. اعلامیه از بیتمپهایی استفاده میکند که موارد استفاده پیشنهادی را بهشکل[1 << PREVIEW | 1 << RECORD..]نشان میدهد. موارد استفاده، چندتایی معمولی (قالب، عرض، ارتفاع، ورودی) را با یک ورودی اضافی گسترش میدهند. موارد استفاده عمومی غیرموجود یا هر بیت دیگری که در محدوده[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ذخیره میشود.
این اطلاعات ازطریق RecommendedStreamConfigurationMap API برای مشتریان دوربین دردسترس است.
موارد استفاده الزامی
پیکربندیهای جاریسازی توصیهشده باید برای موارد استفاده زیر ارائه شود و الزامات مربوطه را برآورده کند:
| کاربرد | الزام |
|---|---|
PREVIEW |
پیشنمایش باید فقط شامل پیکربندیهای جاریسازی پردازششده بدون توقف با قالبهای برونداد مثل YUV_420_888 و IMPLEMENTATION_DEFINED باشد. |
RECORD |
یک ویدیو ضبطشده باید شامل پیکربندیهای جاریسازی باشد که با
رسانههای پشتیبانیشده تبلیغشده نمایهها
با قالب IMPLEMENTATION_DEFINED مطابقت داشته باشد. |
VIDEO_SNAPSHOT |
عکس فوری ویدیو باید شامل پیکربندیهای جاریسازی باشد که حداقل به بزرگی حداکثر وضوح «ضبط» باشد و فقط با ترکیب قالب/فضای داده BLOB + DATASPACE_JFIF (JPEG) باشد. پیکربندیها نباید باعث ایجاد اشکال در پیشنمایش شوند و باید بتوانند با سرعت ۳۰ فریم در ثانیه اجرا شوند. |
SNAPSHOT |
پیکربندیهای جاری عکس آنی باید حداقل یک مورد با اندازه نزدیک به android.sensor.info.activeArraySize با ترکیب قالب/فضای داده BLOB + DATASPACE_JFIF (JPEG) داشته باشد. با درنظر گرفتن محدودیتهای نسبت ابعادی، تراز، و دیگر محدودیتهای خاص فروشنده، مساحت حداکثر اندازه پیشنهادی نباید کمتر از ۹۷٪ مساحت اندازه آرایه حسگر باشد. |
ZSL (درصورت پشتیبانی) |
اگر دستگاه دوربین از آن پشتیبانی کند، پیکربندیهای جاریسازی ورودی توصیهشده باید فقط همراه با دیگر قالبهای خروجی پردازششده یا متوقفشده تبلیغ شود. |
RAW (درصورت پشتیبانی) |
اگر دستگاه دوربین پشتیبانی کند، پیکربندیهای جاریسازی خام توصیهشده باید فقط شامل قالبهای برونداد مبتنی بر RAW باشد. |
موارد استفاده دیگر
میتوانید جاریسازیهای پیکربندی توصیهشده اضافی برای موارد استفاده خاص پیادهسازیتان ارائه دهید.
اعتبارسنجی
برای آزمایش پیادهسازی جاریسازیهای پیکربندی توصیهشده، آزمایشهای CTS و VTS زیر را اجرا کنید:
میانای برنامهسازی کاربردی برای پُرسمان ترکیبهای ویژگی
از Android 15، پلاتفرم Android میانای برنامهسازی کاربردیای برای پُرسمان کردن ترکیبهای ویژگی ارائه میدهد. این API به مشتریان دوربین اجازه میدهد تا پرسوجو کنند که آیا ترکیب مشخصی از ویژگیها میتواند توسط دستگاه پشتیبانی شود یا خیر. این API ضروری است زیرا API دوربین ۲ ویژگیهای مختلفی مانند 4k، ۶۰ فریم در ثانیه، ویدیو HDR، UltraHDR، بزرگنمایی Ultrawide، و لرزشگیر را بهعنوان کنترلهای متعامد مدلسازی میکند.
الزامات
برای پشتیبانی از API برای پُرسمان ترکیبهای ویژگی، دوربین HAL باید نسخه ۳ رابط ICameraDevice را پیادهسازی کند. برای جزئیات، به بخش
پیادهسازی مراجعه کنید.
وقتی API پشتیبانی میشود، تثبیت پیشنمایش باید نسبتبه
ویژگیهای دیگر متعامد باشد. این یعنی برای دستگاه دوربینی که از پایدارسازی پیشنمایش پشتیبانی میکند، مقدار برگشتی isStreamCombinationWithSettingsSupported
برای ترکیب خاص باید وقتی پایدارسازی پیشنمایش
روشن یا خاموش است یکسان باشد. این کار فضای جستجو را برای پُرسمانهای ترکیب ویژگی کاهش میدهد.
علاوهبراین، برای کلاس عملکرد رسانه ۱۵، دوربین پشتی اصلی باید از تثبیت پیشنمایش با پیشنمایش ۱۰ بیتی HLG10 برای پیشنمایش ۱۰۸۰ پیکسل و ۷۲۰ پیکسل و JPEG با حداکثر اندازه پشتیبانی کند. برای جزئیات بیشتر درباره این الزامات، به بخش ۲.۲.۷.۲ مراجعه کنید. «دوربین» از CDD.
پیادهسازی
برای پشتیبانی از «میانای برنامهسازی کاربردی» برای پُرسمان ترکیبهای ویژگی، «میاناهای برنامهسازی کاربردی» پُرسمان ترکیب ویژگی زیر را در نسخه ۳
ICameraDevice پیادهسازی کنید:
constructDefaultRequestSettings: تنظیمات پیشفرض را برای نوعCaptureRequestمشخصشده ایجاد میکند. HAL میتواند از پیادهسازیICameraDeviceSession::constructDefaultRequestSettingsاستفاده کند.isStreamCombinationWithSettingsSupported: ترکیب جاریسازی دوربین مشخصشده را با پارامترهای جلسه و کلیدهای اضافیCaptureRequestبررسی میکند تا ببیند دستگاه از آن پشتیبانی میکند یا نه. باید برای ترکیبهای پشتیبانیشدهtrueو برای ترکیبهای ویژگی پشتیبانینشدهfalseبرگرداند. «لایه انتزاعی سختافزار» میتواند ازisStreamCombinationSupportedپیادهسازی استفاده کند و پشتیبانی را برای بررسی تنظیماتCaptureRequestکه درsessionParamsارسال میشود اضافه کند.getSessionCharacteristics: ترکیب جاریسازی پشتیبانیشده را با پارامترهای جلسه میگیرد و ویژگیهای مختص جلسه را برمیگرداند.INFO_SESSION_CONFIGURATION_QUERY_VERSION: همه پیکربندیهای جلسه پرکاربرد را فهرست میکند. این پیکربندیها با آزمایش انطباق درستیسنجی میشوند.
برای نسخههای پایینتر از نسخه ۳ رابط ICameraDevice،
«لایه انتزاعی سختافزار» باید
روش
isStreamCombinationSupported
را پیادهسازی کند.
برای کسب اطلاعات بیشتر درباره ترکیبهای ویژگی که ازطریق API پُرسمان میشوند، به اسناد sessionConfigurationQueryVersion در
system/media/camera/docs/metadata_definitions.xml مراجعه کنید.
برای پیادهسازی مرجع این ویژگی، به
hardware/google/camera/devices/EmulatedCamera/hwl/ مراجعه کنید.
میاناهای برنامهسازی کاربردی عمومی
برنامهها میتوانند از میاناهای برنامهسازی کاربردی عمومی زیر برای پُرسمان کردن ترکیبهای ویژگی پشتیبانیشده برای دستگاه استفاده کنند:
CameraDevice.CameraDeviceSetup: نمایشی محدود ازCameraDeviceکه میتواند برای پُرسمان ترکیبهای ویژگی بدون نیاز به نمونهCameraDeviceاستفاده شود.getCameraDeviceSetup: یک شیءCameraDeviceSetupرا برای شناسه دوربین دادهشده دریافت میکند اگرisCameraDeviceSetupSupportedمقدارtrueرا برگرداند.INFO_SESSION_CONFIGURATION_QUERY_VERSION: اگر این مقدارVANILLA_ICE_CREAMیا بالاتر باشد، از پُرسمانهای ترکیب ویژگی پشتیبانی میکند.OutputConfiguration: کلاسی که خروجی دوربین را توصیف میکند و میتواند حاوی سطح معوقی برای پرسوجوهای ترکیب ویژگی با تأخیر کم باشد.SessionConfiguration: کلاس کاربردی که پیکربندی جلسه را توصیف میکند، ازجمله ترکیبهای جاریسازی و پارامترهای جلسه، که میتواند برای پُرسمانهای ترکیب ویژگی استفاده شود.
اعتبارسنجی
برای اعتبارسنجی پیادهسازی این ویژگی، از آزمونهای زیر در VTS، CTS، و Camera ITS (درستیسنج CTS) استفاده کنید:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Camera ITS