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

اندروید 10 ویژگی‌هایی را معرفی می‌کند که به مشتریان دوربین اجازه می‌دهد تا جریان‌های دوربین بهینه را برای موارد استفاده خاص انتخاب کنند و اطمینان حاصل کنند که ترکیب‌های جریان خاصی توسط دستگاه دوربین پشتیبانی می‌شوند. پیکربندی جریان به یک جریان دوربین منفرد که در دستگاه دوربین پیکربندی شده است و ترکیب جریان به یک یا چند مجموعه از جریان های پیکربندی شده در دستگاه دوربین اشاره دارد. برای اطلاعات بیشتر در مورد این ویژگی‌ها، پیکربندی‌های جریان پیشنهادی و 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 برای پرس و جو از ترکیبات جریان

پلت فرم اندروید از یک API برای پرس و جو از ترکیبات جریان پشتیبانی می کند. پیاده‌سازی این API به مشتریان دوربین اجازه می‌دهد تا پس از دریافت یک نمونه CameraDevice معتبر، به طور ایمن از ترکیب‌های جریان در هر نقطه پرس و جو کنند، سربار اولیه‌سازی یک جلسه ضبط دوربین و پتانسیل داشتن استثناهای بعدی دوربین از جمله شکستن دوربین را حذف می‌کند و امکان درخواست‌های سریع‌تر را فراهم می‌کند.

این ویژگی همچنین به مشتریان دوربین اجازه می‌دهد تا لیستی از ترکیب‌های جریانی را که مطابق دستورالعمل‌های CameraDevice و سطح HW پشتیبانی شده گردآوری شده است، دریافت کنند. تست‌های CTS برای اعمال صحت نتایج پرس و جو تا حد امکان در دسترس هستند و زیرمجموعه‌ای کوچک از رایج‌ترین ترکیب‌های جریان را پوشش می‌دهند.

می‌توانید با اجرای یک تماس HIDL API اضافی در Camera HAL، از این ویژگی پشتیبانی کنید.

پیاده سازی

برای پشتیبانی از یک API برای پرس‌وجو از ترکیب‌های جریان، دوربین HAL باید یک پیاده‌سازی برای واسط isStreamCombinationSupported HIDL API ارائه کند. این رابط بررسی می کند که آیا دستگاه دوربین از ترکیب جریان دوربین مشخصی پشتیبانی می کند یا خیر.

هنگام فراخوانی، API باید یکی از کدهای وضعیت زیر را برگرداند:

  • OK : پرس و جو ترکیب جریان موفقیت آمیز بود.
  • METHOD_NOT_SUPPORTED : دستگاه دوربین از عبارت ترکیبی جریان پشتیبانی نمی کند.
  • INTERNAL_ERROR : درخواست ترکیب جریان به دلیل یک خطای داخلی نمی تواند تکمیل شود.

اگر ترکیب جریان پشتیبانی شود، API true را برمی‌گرداند. در غیر این صورت، false برمی گردد.

این چارچوب از API عمومی isSessionConfigurationSupported استفاده می کند تا بررسی کند که آیا پیکربندی جلسه خاص توسط دستگاه دوربین پشتیبانی می شود یا خیر.

تماس با API نباید هیچ گونه عوارض جانبی در عملکرد عادی دوربین داشته باشد. تماس‌های API نباید هیچ‌یک از حالت‌های داخلی را تغییر دهند یا عملکرد دوربین را کاهش دهند. مطمئن شوید که بعد از اینکه Camera HAL با موفقیت ترکیبی از جریان را تأیید کرد، مشتریان دوربین می‌توانند با موفقیت ترکیب استریم را پیکربندی کنند. برای جلوگیری از مشکلات، مطمئن شوید که پیاده‌سازی هیچ اطلاعاتی را در طول کوئری‌های ترکیبی جریان ذخیره نمی‌کند، وضعیت داخلی آن را تغییر نمی‌دهد، یا درگیر عملیات وقت‌گیر نیست.

اعتبار سنجی

برای تایید این ویژگی، موارد تست دوربین CTS و VTS زیر را اجرا کنید:

ماژول های دوربین CTS:

دوربین VTS:

VtsHalCameraProviderV2_4TargetTest.cpp