لایه انتزاع سخت‌افزار دوربین

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

لایه انتزاع سخت‌افزار دوربین AIDL

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

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

پیاده‌سازی Camera HAL با AIDL

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

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

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

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

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

ویژگی‌های Camera HAL3

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

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

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

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

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

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

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

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

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

شکل ۱. مدل عملکرد اصلی دوربین

نمای کلی Camera HAL1

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

  • پیش‌نمایش
  • ضبط ویدیو
  • ضبط عکس ثابت

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

نمودار مسدود کردن دوربین

شکل ۲. قطعات دوربین

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

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