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

添加評論