پس از چهار سال توسعه، اولین نسخه از پروژه libcamera (0.0.1) شکل گرفت که یک پشته نرم افزاری برای کار با دوربین های ویدئویی، دوربین ها و تیونرهای تلویزیون در لینوکس، اندروید و ChromeOS ارائه می دهد که توسعه API V4L2 را ادامه می دهد. و در نهایت جایگزین آن خواهد شد. از آنجایی که API کتابخانه هنوز در حال تغییر است و هنوز به طور کامل تثبیت نشده است، پروژه تاکنون بدون شاخهبندی نسخههای جداگانه با استفاده از یک مدل توسعه مداوم توسعه یافته است. در پاسخ به نیاز توزیعها برای پیگیری تغییرات API که بر سازگاری تأثیر میگذارند، و برای سادهسازی تحویل کتابخانهها در بستهها، اکنون تصمیم گرفته شده است که بهطور دورهای نسخههایی تولید شود که منعکسکننده میزان تغییرات ABI و API هستند. کد پروژه به زبان C++ نوشته شده و تحت مجوز LGPLv2.1 توزیع شده است.
این پروژه توسط توسعه دهندگان زیرسیستم های چندرسانه ای هسته لینوکس به همراه برخی از سازندگان دوربین به منظور عادی سازی وضعیت با پشتیبانی لینوکس برای دوربین های گوشی های هوشمند و دستگاه های تعبیه شده که به درایورهای اختصاصی گره خورده اند، در حال توسعه است. API V4L2 که قبلاً در هسته لینوکس موجود بود، در یک زمان برای کار با دوربین های وب مجزای سنتی ایجاد شد و با روند اخیر انتقال عملکرد MCU بر روی شانه های CPU سازگاری ضعیفی دارد.
برخلاف دوربینهای سنتی، که در آنها عملیات پردازش تصویر اولیه بر روی یک پردازنده تخصصی تعبیهشده در دوربین (MCU) انجام میشود، در دستگاههای تعبیهشده، برای کاهش هزینه، این عملکردها بر روی شانههای CPU اصلی انجام میشود و به یک درایور پیچیده نیاز دارد. شامل اجزای دارای مجوز غیر متن باز است. به عنوان بخشی از پروژه libcamera، طرفداران نرم افزار منبع باز و تولیدکنندگان سخت افزار سعی کردند راه حلی مصالحه ای ایجاد کنند که از یک سو نیازهای توسعه دهندگان نرم افزار منبع باز را برآورده کند و از سوی دیگر امکان حفاظت از مالکیت معنوی تولیدکنندگان دوربین را فراهم کند.
پشته ارائه شده توسط کتابخانه libcamera به طور کامل در فضای کاربر پیاده سازی می شود. برای اطمینان از سازگاری با محیط های نرم افزاری و برنامه های کاربردی موجود، لایه های سازگاری برای V4L API، Gstreamer و Android Camera HAL ارائه شده است. اجزای اختصاصی تعامل با تجهیزات خاص برای هر دوربین به عنوان ماژول هایی طراحی شده اند که در فرآیندهای جداگانه اجرا می شوند و از طریق IPC با کتابخانه در تعامل هستند. ماژول ها دسترسی مستقیم به دستگاه ندارند و از طریق یک API میانی به تجهیزات دسترسی دارند، درخواست ها از طریق آن بررسی، فیلتر و تنها به دسترسی به عملکردهای لازم برای کنترل دوربین محدود می شوند.
این کتابخانه همچنین امکان دسترسی به الگوریتمهایی را برای پردازش و بهبود کیفیت تصاویر و ویدیوها (تنظیم تعادل رنگ سفید، کاهش نویز، تثبیتکننده ویدیو، فوکوس خودکار، انتخاب نوردهی و غیره) فراهم میکند که میتوانند به صورت کتابخانههای خارجی باز یا اختصاصی متصل شوند. ماژول های جدا شده API دسترسی به ویژگیهایی مانند تعیین عملکرد دوربینهای خارجی و داخلی موجود، استفاده از نمایههای دستگاه، مدیریت رویدادهای اتصال و قطع ارتباط دوربین، مدیریت ضبط دادههای دوربین در سطح فریم فردی و همگامسازی تصاویر با فلاش را فراهم میکند. می توان به طور جداگانه با چندین دوربین در سیستم کار کرد و ضبط همزمان چندین جریان ویدیویی را از یک دوربین (مثلاً یکی با وضوح پایین برای کنفرانس ویدیویی و دیگری با وضوح بالا برای ضبط آرشیوی روی دیسک) سازماندهی کرد.
منبع: opennet.ru