libcamera 的第一个版本,Linux 上的相机支持堆栈

经过四年的开发,libcamera 项目的第一个版本 (0.0.1) 形成,提供了一个用于在 Linux、Android 和 ChromeOS 中使用摄像机、相机和电视调谐器的软件堆栈,这继续了 V4L2 API 的开发并最终将取代它。 由于该库的 API 仍在变化且尚未完全稳定,因此该项目迄今为止的开发并未使用持续开发模型分支各个版本。 为了满足发行版需要跟踪影响兼容性的 API 更改并简化包中库的交付的需要,现在决定定期生成反映 ABI 和 API 更改程度的版本。 该项目代码是用 C++ 编写的,并根据 LGPLv2.1 许可证分发。

该项目由 Linux 内核多媒体子系统开发人员与一些相机制造商共同开发,旨在通过 Linux 对与专有驱动程序绑定的智能手机和嵌入式设备相机的支持来规范这种情况。 API V4L2 已在 Linux 内核中提供,一度是为了与传统的独立网络摄像头配合使用而创建的,但它不太适应最近将 MCU 功能移至 CPU 的趋势。

传统相机的主要图像处理操作是在相机内置的专用处理器 (MCU) 上执行,而在嵌入式设备中,为了降低成本,这些功能由主 CPU 承担,需要复杂的驱动程序来执行。包括非开源许可组件。 作为 libcamera 项目的一部分,开源软件支持者和硬件制造商试图创建一个折衷的解决方案,一方面满足开源软件开发人员的需求,另一方面可以保护相机制造商的知识产权。

libcamera 库提供的堆栈完全在用户空间中实现。 为了确保与现有软件环境和应用程序的兼容性,为V4L API、Gstreamer和Android Camera HAL提供了兼容层。 用于与设备交互的每个相机特定的专有组件被设计为在单独进程中运行并通过 IPC 与库交互的模块。 模块无法直接访问设备,而是通过中间 API 访问设备,通过中间 API 来检查、过滤请求并限制为仅访问控制相机所需的功能。

该库还提供对用于处理和提高图像和视频质量的算法的访问(白平衡调整、降噪、视频稳定、自动对焦、曝光选择等),这些算法可以以开放外部库或专有库的形式连接隔离模块。 该 API 提供对多种功能的访问,例如确定现有外部和内置摄像头的功能、使用设备配置文件、处理摄像头连接和断开事件、管理单个帧级别的摄像头数据捕获以及将图像与闪光灯同步。 可以与系统中的多个摄像机分开工作,并组织从一台摄像机同时捕获多个视频流(例如,一个用于视频会议的低分辨率,另一个用于存档记录到磁盘的高分辨率)。

来源: opennet.ru

添加评论