دوربین HAL

لایه انتزاعی سخت افزاری دوربین اندروید (HAL) APIهای چارچوب دوربین سطح بالاتر در android.hardware.camera2 را به درایور دوربین و سخت افزار زیرین شما متصل می کند. با شروع اندروید 13، توسعه رابط دوربین HAL از AIDL استفاده می کند. Android 8.0 Treble را معرفی کرد و Camera HAL API را به یک رابط پایدار که توسط زبان توصیف رابط HAL (HIDL) تعریف شده بود تغییر داد. اگر قبلا یک ماژول و درایور دوربین HAL برای اندروید 7.0 و پایین‌تر ایجاد کرده‌اید، از تغییرات قابل توجهی در خط لوله دوربین آگاه باشید.

دوربین AIDL HAL

برای دستگاه‌هایی که اندروید 13 یا بالاتر دارند، چارچوب دوربین شامل پشتیبانی از HAL‌های دوربین AIDL است. چارچوب دوربین همچنین از HIDL دوربین HIDL پشتیبانی می‌کند، اما ویژگی‌های دوربین اضافه‌شده در Android 13 یا بالاتر فقط از طریق رابط‌های HAL دوربین AIDL در دسترس هستند. برای اجرای چنین ویژگی‌هایی در دستگاه‌هایی که به Android 13 یا بالاتر ارتقا می‌یابند، سازندگان دستگاه باید فرآیند HAL خود را از استفاده از رابط‌های دوربین HIDL به رابط‌های دوربین AIDL منتقل کنند.

برای آشنایی با مزایای AIDL، به AIDL برای HAL مراجعه کنید.

پیاده سازی دوربین AIDL HAL

برای اجرای مرجع HAL دوربین AIDL، به hardware/google/camera/common/hal/aidl_service/ مراجعه کنید.

مشخصات دوربین AIDL HAL در مکان های زیر است:

برای دستگاه‌هایی که به AIDL مهاجرت می‌کنند، سازندگان دستگاه ممکن است نیاز داشته باشند که سیاست Android SELinux (سیاست سیاست) و فایل‌های RC را بسته به ساختار کد تغییر دهند.

اعتبار سنجی دوربین AIDL HAL

برای آزمایش اجرای HAL دوربین AIDL خود، مطمئن شوید که دستگاه تمام تست‌های CTS و VTS را پشت سر گذاشته است. اندروید 13 تست AIDL VTS، VtsAidlHalCameraProvider_TargetTest.cpp را معرفی می کند.

ویژگی های دوربین HAL3

هدف از طراحی مجدد دوربین Android API افزایش قابل ملاحظه توانایی برنامه‌ها برای کنترل زیرسیستم دوربین در دستگاه‌های Android و در عین حال سازماندهی مجدد API برای کارآمدتر کردن و نگهداری آن است. کنترل اضافی ساخت برنامه‌های دوربین با کیفیت بالا را در دستگاه‌های اندرویدی آسان‌تر می‌کند که می‌توانند به طور قابل اعتماد در چندین محصول کار کنند و در عین حال همچنان از الگوریتم‌های خاص دستگاه تا حد امکان برای به حداکثر رساندن کیفیت و عملکرد استفاده می‌کنند.

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

API زیرسیستم دوربین را به‌عنوان خط لوله‌ای مدل‌سازی می‌کند که درخواست‌های دریافتی برای عکس‌برداری از فریم را بر اساس 1:1 به فریم تبدیل می‌کند. درخواست‌ها تمام اطلاعات پیکربندی در مورد ضبط و پردازش یک فریم را در بر می‌گیرند. این شامل وضوح و فرمت پیکسل است. سنسور دستی، لنز و کنترل فلاش؛ حالت های عملیاتی 3A؛ RAW-> کنترل پردازش YUV؛ تولید آمار؛ و غیره

به عبارت ساده، چارچوب برنامه یک فریم از زیر سیستم دوربین درخواست می کند و زیرسیستم دوربین نتایج را به یک جریان خروجی برمی گرداند. علاوه بر این، ابرداده‌ای که حاوی اطلاعاتی مانند فضاهای رنگی و سایه‌زنی لنز است، برای هر مجموعه از نتایج تولید می‌شود. شما می توانید دوربین نسخه 3 را به عنوان خط لوله ای برای جریان یک طرفه دوربین نسخه 1 در نظر بگیرید. هر درخواست عکسبرداری را به یک تصویر گرفته شده توسط سنسور تبدیل می کند که به صورت زیر پردازش می شود:

  • یک شی نتیجه با فراداده در مورد ضبط.
  • یک تا N بافر داده های تصویر، هر کدام در سطح مقصد خود.

مجموعه سطوح خروجی ممکن از پیش پیکربندی شده است:

  • هر سطح مقصدی برای جریانی از بافرهای تصویر با وضوح ثابت است.
  • فقط تعداد کمی از سطوح را می توان به عنوان خروجی به طور همزمان پیکربندی کرد (~3).

یک درخواست شامل تمام تنظیمات عکسبرداری مورد نظر و لیست سطوح خروجی برای فشار دادن بافرهای تصویر برای این درخواست (از کل مجموعه پیکربندی شده) است. یک درخواست می تواند یک شات باشد (با capture() )، یا ممکن است به طور نامحدود تکرار شود (با setRepeatingRequest() ). عکس‌ها بر درخواست‌های تکراری اولویت دارند.

مدل داده های دوربین

شکل 1. مدل عملکرد هسته دوربین

نمای کلی دوربین HAL1

نسخه 1 زیرسیستم دوربین به صورت جعبه سیاه با کنترل های سطح بالا و سه حالت عملیاتی زیر طراحی شده است:

  • پیش نمایش
  • ضبط ویدیو
  • هنوز ضبط کنید

هر حالت دارای قابلیت های کمی متفاوت و همپوشانی است. این امر اجرای ویژگی های جدید مانند حالت انفجاری را که بین دو حالت عملیاتی قرار می گیرد دشوار می کرد.

بلوک دیاگرام دوربین

شکل 2. اجزای دوربین

اندروید 7.0 همچنان به پشتیبانی از دوربین HAL1 ادامه می‌دهد زیرا بسیاری از دستگاه‌ها همچنان به آن وابسته هستند. علاوه بر این، سرویس دوربین اندروید از اجرای هر دو HAL (1 و 3) پشتیبانی می‌کند، که زمانی مفید است که بخواهید از دوربین جلویی با قابلیت کمتری با دوربین HAL1 و یک دوربین پشتی پیشرفته‌تر با دوربین HAL3 پشتیبانی کنید.

یک ماژول HAL دوربین تکی (با شماره نسخه مخصوص به خود) وجود دارد که چندین دستگاه دوربین مستقل را لیست می کند که هر کدام شماره نسخه مخصوص به خود را دارند. ماژول دوربین 2 یا جدیدتر برای پشتیبانی از دستگاه‌های 2 یا جدیدتر مورد نیاز است، و چنین ماژول‌های دوربین می‌توانند ترکیبی از نسخه‌های دستگاه دوربین داشته باشند (این همان چیزی است که می‌گوییم Android از اجرای هر دو HAL پشتیبانی می‌کند).