1 系統(tǒng)概述
海思提供的媒體處理軟件平臺(Media Process Platform,簡稱 MPP),可支持應用軟件快速開發(fā)。該平臺對應用軟件屏蔽了芯片相關(guān)的復雜的底層處理,并對應用軟件直接提供MPI(MPP Program Interface)接口完成相應功能。該平臺支持應用軟件快速開發(fā)以下功能:輸入視頻捕獲、 H.265/H.264/JPEG 編碼、 H.265/H.264/JPEG 解碼、 視頻輸出顯示、視頻圖像前處理(包括去噪、增強、銳化)、 圖像拼接、 圖像幾何矯正、智能、音頻捕獲及輸出、音頻編解碼等功能。
1.1 系統(tǒng)架構(gòu)
架構(gòu)
系統(tǒng)軟件架構(gòu)可以分為四層:
最底層是硬件驅(qū)動層。
操作系統(tǒng)層;海思支持linux和liteos,此文只涉及l(fā)inux部分。
媒體層;此層是海思平臺軟件架構(gòu)的核心,海思平臺將媒體相關(guān)的功能都抽象到了這一層,如音視頻輸入輸出、isp圖像處理、編解碼等,最關(guān)鍵的是獨立的內(nèi)存管理機制,物理內(nèi)存、虛擬內(nèi)存都有獨立的機制進行分配和回收,減少了與操作系統(tǒng)層的關(guān)聯(lián)。包含的軟件有各種媒體相關(guān)的驅(qū)動、庫的支持,還有整套的媒體開發(fā)平臺。本文要介紹的MPP就是媒體軟件處理平臺。
最上層是應用層。
1.2 處理流程
海思媒體處理平臺的主要內(nèi)部處理流程分為視頻輸入(VI)、視頻處理(VPSS)、視頻編碼(VENC)、 視頻解碼(VDEC)、 視頻輸出(VO)、視頻拼接(AVS)、音頻輸入(AI)、音頻輸出(AO)、音頻編碼(AENC)、音頻解碼(ADEC)、區(qū)域管理(REGION)等模塊。
VI 模塊捕獲視頻圖像,可對其做剪切、 去噪等處理,并輸出多路不同分辨率的圖像數(shù)據(jù)。
解碼模塊對編碼后的視頻碼流進行解碼,并將解析后的圖像數(shù)據(jù)送 VPSS 進行圖像處理, 再送 VO 顯示??蓪?H.265/H.264/JPEG 格式的視頻碼流進行解碼。
VPSS 模塊接收 VI 和解碼模塊發(fā)送過來的圖像,可對圖像進行圖像增強、銳化等處理,并實現(xiàn)同源輸出多路不同分辨率的圖像數(shù)據(jù)用于編碼、預覽或抓拍。
編碼模塊接收 VI 捕獲并經(jīng) VPSS 處理后輸出的圖像數(shù)據(jù),可疊加用戶通過 Region模塊設(shè)置的 OSD 圖像,然后按不同協(xié)議進行編碼并輸出相應碼流。
VO 模塊接收 VPSS 處理后的輸出圖像,可進行播放控制等處理,最后按用戶配置的輸出協(xié)議輸出給外圍視頻設(shè)備。
上圖也包含很多典型的視頻流的處理流程。sensor負責采集圖像,是海思平臺的輸入,圖像經(jīng)過海思內(nèi)部VI、VPSS、VENC和VO后,經(jīng)由hdmi輸出到顯示屏上,sdk提供的sample_vio中有幾個case就是這個典型的流程,同時sample_vio也是最常用到的samle。
2 MPP部署
在一般的嵌入式開發(fā)中,只要將uboot,kernel,rootfs下載到開發(fā)板上,就可以進行程序開發(fā)了。但是海思又進一步把與多媒體相關(guān)的內(nèi)容整合到MPP平臺中,SDK中推薦使用mount nfs的方法先部署起mpp。
搭建nfs服務(wù)器,開發(fā)板作為nfs客戶端。
掛載nfs文件系統(tǒng)
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xx.xx.xx.xx:/your-nfs-path /mnt,然后就可以在/mnt目錄訪問nfs服務(wù)器上的文件。
加載驅(qū)動
cd mpp/ko
./ load3519v100 -i -sensor0 imx334
運行sample程序
cd mpp/sample /vio
./sample_vio 0 0
3 視頻輸入
視頻輸入單元 VI(Video Input),可以通過 MIPI Rx(包含 MIPI、LVDS、HiSPi、SLVS-EC)接口、BT.656/601、BT.1120 接口和 DC(Digital Camera)接收視頻數(shù)據(jù),存入指定的內(nèi)存區(qū)域。VI 內(nèi)嵌 ISP 圖像處理單元,可以直接對接外部原始數(shù)據(jù)(BAYER RGB 數(shù)據(jù)),VI 的功能框圖如下圖所示。 VI 分成兩個物理子模塊:捕獲子模塊 VICAP 和處理子模塊 VIPROC 組成。
海思SDK對VI的功能框架進行了封裝,VI內(nèi)部結(jié)構(gòu)對于開發(fā)者來說是黑盒,并且黑盒內(nèi)部的代碼不進行開源。黑盒外部進行了軟件級的封裝,因此VI在軟件層次上劃分4個部分,輸入設(shè)備(DEV)、輸入 PIPE、物理通道(PHY_CHN)和擴展通道(EXT_CHN),如下圖所示,開發(fā)者也只需要關(guān)注軟件架構(gòu)上的這四個層級即可。
此處只針對VI進行了講解,其他模塊也需要參考海思手冊,此處不再一一寫出了。
4 開發(fā)
4.1 預覽與拍照
下圖是雙 pipe 離線模式拍照的數(shù)據(jù)通路,上面的pipe是preview通路,下面的pipe是capture通路,一般相機的通路都是如此,preview對圖像質(zhì)量要求略低,capture對圖像質(zhì)量要求高。當然,此圖是海思平臺的雙pipe離線模式,還有在線模式、單pipe模式等,大體意思相近,不同模式的選擇需要根據(jù)芯片的處理能力和圖像的質(zhì)量需求進行。
4.2 新sensor開發(fā)
準備工作
確認主芯片規(guī)格。支持 Master 模式,支持的線性、WDR 接口模式,支持輸入頻率上限。
sensor datasheet。確認圖像傳輸接口模式,輸出頻率。確認曝光時間、增益如何設(shè)置,幀率如何修改。確認在 WDR 模式下的以上兩項。
mipi/并口。確認接口,并確認時序。
initialize settings。獲取 Sensor Initialize Settings,一般至少要準備最大規(guī)格和標準分辨率兩種序列。
內(nèi)核層
pinmux的配置
power的檢查
clock的配置
控制通路i2c/spi的檢查
應用層
sensor_ctl.c,sensor的配置,需要結(jié)合datasheet完善initialize settings。
cmos.c,isp的基本功能。按如下函數(shù)順序進行實現(xiàn)。
cmos_set_image_mode(), cmos_set_wdr_mode()。
sensor_global_init()。
sensor_init(), sensor_exit()。
cmos_get_isp_default(),cmos_get_isp_black_level()。
sensor點亮后還需要進行ae功能的完善,自動配置增益、曝光時間、幀率等。
之后還有白平衡的配置,配置完成后,顏色基本就正常了。
到此處,添加的新sensor基本就可用了,后續(xù)就是AF和各種圖像質(zhì)量調(diào)優(yōu)相關(guān)的工作了。
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8596瀏覽量
151145 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209475 -
JPEG
+關(guān)注
關(guān)注
0文章
66瀏覽量
29959 -
海思
+關(guān)注
關(guān)注
42文章
461瀏覽量
116382 -
MPP
+關(guān)注
關(guān)注
0文章
24瀏覽量
10591
發(fā)布評論請先 登錄
相關(guān)推薦
評論