تنظیمات جریان

Android دارای ویژگی‌هایی است که به مشتریان دوربین اجازه می‌دهد تا جریان‌های دوربین بهینه را برای موارد استفاده خاص انتخاب کنند و اطمینان حاصل کنند که ترکیب‌های جریان خاصی توسط دستگاه دوربین پشتیبانی می‌شوند. پیکربندی جریان به یک جریان دوربین منفرد که در دستگاه دوربین پیکربندی شده است و ترکیب جریان به یک یا چند مجموعه از جریان های پیکربندی شده در دستگاه دوربین اشاره دارد. برای اطلاعات بیشتر در مورد این ویژگی‌ها، به پیکربندی‌های جریان توصیه‌شده و API برای پرس‌وجو ترکیب ویژگی‌ها مراجعه کنید.

پیاده سازی مرجع

یک پیاده سازی مرجع در سمت فروشنده از جریان های پیکربندی توصیه شده و API برای پرس و جو ویژگی های ترکیبی جریان وجود دارد. می توانید این پیاده سازی را در QCamera3HWI.cpp پیدا کنید

فروشندگان دوربین می توانند تنظیمات پخش جریانی توصیه شده را برای موارد استفاده خاص به مشتریان دوربین تبلیغ کنند. این پیکربندی‌های جریان پیشنهادی، که زیرمجموعه‌های StreamConfigurationMap هستند، می‌توانند به مشتریان دوربین در انتخاب پیکربندی‌های بهینه کمک کنند.

اگرچه StreamConfigurationMap اطلاعات پیکربندی استریم جامعی را در اختیار مشتریان دوربین قرار می دهد، اما هیچ اطلاعاتی در مورد کارایی، قدرت یا تأثیرات عملکرد انتخاب یک جریان نسبت به جریان دیگر ارائه نمی دهد. کلاینت‌های دوربین می‌توانند آزادانه از میان تمام تنظیمات جریان ممکن انتخاب کنند، اما در بسیاری از موارد، این امر منجر به استفاده مشتریان از پیکربندی‌های دوربین و برنامه‌های بهینه‌تر می‌شود که جستجوهای جامع زمان‌بر را انجام می‌دهند.

به عنوان مثال، اگرچه برخی از فرمت‌های YUV پردازش شده مورد نیاز هستند و باید پشتیبانی شوند، ممکن است دستگاه دوربین از فرمت‌ها پشتیبانی نکند. این منجر به یک پاس پردازش اضافی برای تبدیل فرمت می شود و کارایی را کاهش می دهد. اندازه و نسبت ابعاد متناظر نیز می تواند تأثیر مشابهی داشته باشد و ابعاد خاصی را از نظر قدرت و عملکرد ترجیح دهد.

نقشه های پیکربندی جریان پیشنهادی شما در مقایسه با StreamConfigurationMap نیازی به جامع بودن ندارند. نقشه‌های پیکربندی پیشنهادی باید از الزامات موجود در بخش پیاده‌سازی پیروی کنند و می‌توانند هر یک از قالب‌ها، اندازه‌ها یا سایر مقادیر موجود در StreamConfigurationMap را شامل شوند. قالب‌ها، اندازه‌ها یا سایر مقادیر پنهان که در StreamConfigurationMap یافت نمی‌شوند را نمی‌توان در نقشه‌های پیکربندی جریان پیشنهادی گنجاند.

همه آزمایش‌ها بدون تغییر باقی می‌مانند و بسته به پیکربندی‌های پخش جریانی توصیه‌شده، آرام نمی‌شوند.

تنظیمات جریان پیشنهادی ارائه شده توسط اجرای دوربین اختیاری هستند و مشتری دوربین می تواند آنها را نادیده بگیرد.

پیاده سازی

برای پیاده سازی این ویژگی مراحل زیر را دنبال کنید.

ورودی های فراداده

برای فعال کردن این ویژگی، دوربین 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 یک عکس فوری ویدیویی باید شامل پیکربندی‌های جریانی باشد که حداقل به اندازه حداکثر وضوح RECORD و فقط با فرمت/فضای داده ترکیبی BLOB + DATASPACE_JFIF (JPEG) باشد. تنظیمات نباید باعث اشکال در پیش نمایش شوند و باید بتوانند با سرعت 30 فریم در ثانیه اجرا شوند.
SNAPSHOT پیکربندی‌های جریان فوری باید حداقل یکی با اندازه نزدیک به android.sensor.info.activeArraySize با فرمت BLOB + DATASPACE_JFIF/ترکیب فضای داده (JPEG) باشد. با در نظر گرفتن محدودیت‌های مربوط به نسبت ابعاد، تراز، و سایر محدودیت‌های خاص فروشنده، مساحت حداکثر اندازه پیشنهادی نباید کمتر از 97 درصد مساحت اندازه آرایه حسگر باشد.
ZSL (در صورت پشتیبانی) اگر توسط دستگاه دوربین پشتیبانی می‌شود، پیکربندی‌های جریان ورودی توصیه‌شده فقط باید همراه با سایر فرمت‌های خروجی پردازش شده یا متوقف شده تبلیغ شوند.
RAW (در صورت پشتیبانی) اگر توسط دستگاه دوربین پشتیبانی می‌شود، پیکربندی‌های جریان خام توصیه‌شده باید فقط شامل فرمت‌های خروجی مبتنی بر RAW باشند.

موارد استفاده دیگر

می‌توانید جریان‌های پیکربندی توصیه‌شده اضافی را برای موارد استفاده خاص به پیاده‌سازی خود ارائه دهید.

اعتبار سنجی

برای آزمایش اجرای جریان‌های پیکربندی توصیه‌شده، آزمایش‌های CTS و VTS زیر را اجرا کنید:

API برای پرس و جو از ترکیب ویژگی ها

با شروع اندروید 15، پلتفرم اندروید یک API برای پرس و جو از ترکیب ویژگی ها ارائه می دهد. این API به مشتریان دوربین امکان می‌دهد بپرسند که آیا ترکیب مشخصی از ویژگی‌ها می‌تواند توسط دستگاه پشتیبانی شود یا خیر. این API ضروری است زیرا camera2 API ویژگی های مختلفی مانند 4k، 60fps، ویدیوی HDR، UltraHDR، زوم فوق عریض و تثبیت را به عنوان کنترل های متعامد مدل می کند.

الزامات

برای پشتیبانی از API برای پرس و جو از ترکیب ویژگی ها، دوربین HAL باید نسخه 3 رابط ICameraDevice را پیاده سازی کند. برای جزئیات بیشتر به بخش پیاده سازی مراجعه کنید.

هنگامی که API پشتیبانی می شود، تثبیت پیش نمایش باید متعامد با سایر ویژگی ها باشد. این بدان معنی است که برای دستگاه دوربینی که از تثبیت پیش‌نمایش پشتیبانی می‌کند، مقدار بازگشتی isStreamCombinationWithSettingsSupported برای یک ترکیب خاص باید زمانی که تثبیت‌کننده پیش‌نمایش روشن یا خاموش است، یکسان باشد. این باعث کاهش فضای جستجو برای عبارت‌های ترکیبی از ویژگی‌ها می‌شود.

علاوه بر این، برای کلاس عملکرد رسانه 15، دوربین اصلی عقب باید از تثبیت پیش نمایش با پیش نمایش 10 بیتی HLG10 برای پیش نمایش 1080p و 720p و حداکثر اندازه JPEG پشتیبانی کند. برای جزئیات بیشتر در مورد این الزامات، به بخش 2.2.7.2 مراجعه کنید. دوربین CDD.

پیاده سازی

برای پشتیبانی از ترکیب‌های ویژگی‌های API برای پرس‌وجو، APIهای کوئری ترکیب ویژگی‌های زیر را در نسخه 3 ICameraDevice پیاده‌سازی کنید:

  • constructDefaultRequestSettings : تنظیمات پیش فرض را برای یک نوع CaptureRequest مشخص ایجاد می کند. HAL می تواند از پیاده سازی ICameraDeviceSession::constructDefaultRequestSettings استفاده کند.

  • isStreamCombinationWithSettingsSupported : پشتیبانی دستگاه از ترکیب جریان دوربین مشخص شده با پارامترهای جلسه و کلیدهای CaptureRequest اضافی را بررسی می کند. برای ترکیبات پشتیبانی شده باید true و برای ترکیبات ویژگی پشتیبانی نشده false برگرداند. HAL می‌تواند از پیاده‌سازی isStreamCombinationSupported استفاده کند و برای بررسی تنظیمات CaptureRequest در sessionParams ، پشتیبانی اضافه کند.

  • getSessionCharacteristics : یک ترکیب جریان پشتیبانی شده با پارامترهای جلسه را می گیرد و ویژگی های خاص جلسه را برمی گرداند.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION : تمام پیکربندی‌های جلسه رایج را فهرست می‌کند. این تنظیمات با آزمایش انطباق تأیید می شوند.

برای نسخه های پایین تر از نسخه 3 رابط 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 : اگر isCameraDeviceSetupSupported true برگرداند، یک شی CameraDeviceSetup برای شناسه دوربین معین دریافت می کند.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION : اگر این مقدار VANILLA_ICE_CREAM یا بالاتر باشد، از عبارت های ترکیبی از ویژگی ها پشتیبانی می کند.

  • OutputConfiguration : کلاسی که خروجی دوربین را توصیف می‌کند، که می‌تواند شامل یک سطح معوق به منظور کوئری‌های ترکیبی ویژگی تاخیر کم باشد.

  • SessionConfiguration : یک کلاس کاربردی که پیکربندی جلسه شامل ترکیبات جریان و پارامترهای جلسه را توصیف می کند، که می تواند برای پرس و جوهای ترکیب ویژگی استفاده شود.

اعتبار سنجی

برای تأیید اعتبار اجرای این ویژگی، از آزمایش‌های VTS، CTS و Camera ITS (CTS Verifier) ​​زیر استفاده کنید:

VTS

سی تی اس

دوربین ITS