海思SDK 學習 :000-海思HI35xx平台軟件開發快速入門之背景知識


背景

參考自:《HiMPP V3.0 媒體處理軟件開發參考.pdf》

由於在音視頻處理領域,海思芯片占有全球市場的很大份額。當我們選擇使用海思芯片開發時,程序開發模型主要是圍繞HIMPP(Hisi Media Process Platform)提供的API進行。這里圍繞主角HIMPP詳細介紹與它相關的專業詞匯與背景知識,對HIMPP有充分了解之后,我們就可以利用它實現音視頻編解碼等業務邏輯。

本文主要講述HIMPP平台處理流程,以快速入門海思HI35xx平台音視頻編解碼編程。

HIMPP平台架構簡介

海思提供的媒體處理軟件平台(Hisi Media Process Platform,簡稱HIMPP),可支持軟件快速開發。該平台對應用軟件屏蔽了芯片相關復雜的底層原理,並對應用軟件直接提供MPI(MPPProgram Interface)接口完成相應功能。

該平台支持應用軟件快速開發以下功能:輸入視頻捕獲、H.264/MJPEG/JPEG/MPEG4編碼、H.264/MJPEG/JPEG/MPEG4解碼、視頻輸出顯示、視頻圖像前處理(包括去燥、增強、銳化、Deinterlace)、編碼碼流疊加OSD、視頻偵測分析、智能分析、音頻捕獲及輸出、音頻編解碼等功能。

HIMPP平台典型架構 分層

HIMPP平台主要是銜接了操作系統層與應用層,典型軟件架構體系示意圖如下:

應用層
媒體軟件處理平 其他驅動
操作系統層
硬件層

1、硬件層
硬件層由Hi35xx芯片加上必要的外圍器件構成。外圍器件包括Flash、DDR(Double Data-Rate)、視頻Sensor或AD、音頻AD等。

2、操作系統層
基於Linux的操作系統。

系統版本號 芯片
Linux 3.10.y Hi3536/Hi3521A/Hi3520DV300/Hi3531A
Linux 3.18.y Hi3536CV100/Hi3531DV100/Hi3521DV100
Linux 4.9.y Hi3536DV100

3、媒體處理平台層
基於操作系統層,控制芯片完成相應的媒體處理功能。它對應用層屏蔽了硬件處理細節,並為應用層提供API接口完成相應功能。

4、其他驅動層
除了媒體處理平台外,海思為HI35xx芯片的其他硬件處理單元提供了相應的驅動,包括GMAC、SDIO、I2C、USB、SSP等驅動。

5、應用層
基於海思媒體處理平台及其他驅動,由用戶開發的應用軟件系統。

小結:從這個HIMPP平台典型架構中可以看出,在海思HI35xx平台音視頻編解碼編程我們只需要關心應用層邏輯和媒體軟件處理平台就好了。

HIMPP平台業務邏輯處理流程

海思媒體處理平台主要流程分為視頻處理及音頻處理兩條路線。

這里還有必要了解一下與HIMPP內容相關的專業名詞,主要部分分為:

  • 視頻輸入(VI)、視頻處理子系統(VPSS)、視頻編碼(VENC)、視頻解碼(VDEC)、視頻輸出(VO)、視頻偵測分析(VDA)等模塊
  • 音視頻輸入(AI)、音視頻輸出(AO)、音頻編碼(AENC)、音視頻解碼(ADEC)等模塊
  • 區域管理(REGION)模塊

對於各個模塊的解讀:

  • VI 模塊捕獲視頻圖像,可對其做剪切、縮放、鏡像等處理,並輸出多路不同分辨率的圖像數據。
  • VDEC 解碼模塊對編碼后的視頻碼流進行解碼,並將解析后的圖像數據送 VPSS 進行圖像處理或直接送 VO 顯示。可對 H.264/H.265/VC1/MPEG4/MPEG2/AVS 格式的視 頻碼流進行解碼。
  • VPSS 模塊接收 VI 和解碼模塊發送過來的圖像,可對圖像進行去噪、圖像增強、銳化等處理,並實現同源輸出多路不同分辨率的圖像數據用於編碼、預覽或抓拍。
  • VENC 編碼模塊接收 VI 捕獲並經 VPSS 處理后輸出的圖像數據,可疊加用戶通過 Region 模塊設置的 OSD 圖像,然后按不同協議進行編碼並輸出相應碼流。
  • VDA 模塊接收 VI 的輸出圖像,並進行移動偵測和遮擋偵測,最后輸出偵測分析結果。
  • VO 模塊接收 VPSS 處理后的輸出圖像,可進行播放控制等處理,最后按用戶配置 的輸出協議輸出給外圍視頻設備。
  • AI 模塊捕獲音頻數據,然后 AENC 模塊支持按多種音頻協議對其進行編碼,最后 輸出音頻碼流。
  • 用戶從網絡或外圍存儲設備獲取的音頻碼流可直接送給 ADEC 模塊,ADEC 支持 解碼多種不同的音頻格式碼流,解碼后數據送給 AO 模塊即可播放聲音。

了解上圖有什么意義呢:

假設:有一個MPEG解碼要實現播放MPEG樣例視頻的示例,可以走 MPEG文件->HARD DISK->VDEC->VPSS->VO->顯示器 這個流程;不管怎樣,流程一定要熟悉牢記,代碼實現都是圍繞這條主線來編寫的。

視頻處理路線

視頻處理路線起點包括AD和HARD DISK兩種。

AD即前端對COMS或CDD傳感器進行AD采集得到最原始的圖像數據,至於如何采集並編碼為H264或H265數據,HIMPP已經幫我們做好了,直接調用API就好,接着將H264或H265數據推至VI,這個模型適合實時預覽應用場景開發;

而 HARD DISK 則源於我們已經保存在硬盤的錄好視頻文件,我們需要的操作是讀取文件然后將數據推至 VDEC 進行解碼,這個模型則適合監控回放場景開發。VPSS作為編解碼的中轉站,可以實現對圖像數據進行處理,其中最重要的就是不同分辨率的裁剪以及抓拍,調用VPSS相關的API可以實現對圖像視頻進行操控,經過VPSS可以輸出到REGION、VDA、VO處理,這里重點講述VO,VO作為聯系視頻流與顯示的紐帶,它接收VPSS的數據然后推送至HDMI或VGA進行顯示。VO是多圖層設備,基於此可以時間用戶GUI操作與視頻層分離,也可以實現畫中畫等功能,VO的配置還包括圖像輸出刷新頻率、圖像顏色效果等。

音頻處理

音頻的處理流程就比較簡單,錄音路線則由麥等模擬設備輸入到AI,接着推送到AENC進行音頻編碼,如常用的G711、G726、ADPCM等格式。播放路線則反過來,由錄音文件提供聲音源,經過ADEC進行解碼后形成音頻流數據,再推送至AO進行播放。

音頻的操作相對就簡單很多,我們一般只關心音頻采樣頻率的控制和音量調節等API,比如配置AI進行8K/16K/24K/32K/48K頻率8位采樣等。

小結,海思HI35xx平台音視頻編解碼編程一定要熟悉HIMPP各個模塊的功用,並十分熟悉音視頻處理流程,程序中也是需要嚴格按照此流程進行設計的。

系統控制

系統控制根據 Hi35xx 芯片特性,完成硬件各個部件的復位、基本初始化工作,同時負責完成 MPP(Media Process Platform 媒體處理平台)系統各個業務模塊的初始化、去初始化以及管理 MPP 系統各個業務模塊的工作狀態、提供當前 MPP 系統的版本信息、提供大塊物理內存管理等功能。
應用程序啟動 MPP 業務前,必須完成 MPP 系統初始化工作。同理,應用程序退出 MPP 業務后,也要完成 MPP 系統去初始化工作,釋放資源。

視頻緩存池

由於 MPP 系統的正常運行依賴於緩存池,所以有關這個內容也需要掌握。

視頻緩存池主要向媒體業務提供大塊物理內存管理功能,負責內存的分配和回收,充分發揮內存緩存池的作用,讓物理內存資源在各個媒體處理模塊中合理使用。
一組大小相同、物理地址連續的緩存塊組成一個視頻緩存池。

視頻輸入通道需要使用公共視頻緩存池。所有的視頻輸入通道都可以從公共視頻緩存池中獲取視頻緩存塊用於保存采集的圖像(如圖中所示從公共視頻緩存池 B 中獲取視頻緩存塊 Bm)。由於視頻輸入通道不提供創建和銷毀公共視頻緩存池功能,因此,在系統初始化之前,必須為視頻輸入通道配置公共視頻緩存池。

根據業務的不同,公共緩存池的數量、緩存塊的大小和數量不同。 圖中所示緩存塊的生存期是指經過 VPSS 通道傳給后續模塊的情形(圖 實線路徑)。如果該緩存塊完全沒有經過 VPSS 通道傳給其他模塊,則將在 VPSS 模塊處理后被放回公共緩存池(圖 虛線路徑)。

系統綁定

MPP 提供系統綁定接口(HI_MPI_SYS_Bind),即:通過數據接收者綁定數據源來建立兩者之間的關聯關系(只允許數據接收者綁定數據源)。
綁定后,數據源生成的數據將自動發送給接收者。

目前 MPP 支持的綁定關系如表所示。

數據源 數據接收者
VI VO 、VENC、VDA 、VPSS、PCIV
VPSS VO、VENC、VDA 、VPSS 、PCIV
VDEC VPSS 、VO(只能是標清設備或 single 模式分割) 、VDA 、PCIV
VO(WBC) VO 、VENC 、VPSS 、PCIV
AI AENC 、AO
ADEC AO

VI/VPSS 離/在線模式

離/在線模式是針對 VI/VPSS 協作模式 來說的。

VI 和 VPSS 的協作模式分為 離線模式 與 在線模式:

上述2種模式切換由 load 腳本參數控制,在API 只能 獲取。對應 sys 模塊參數 vi_vpss_online。

  • VI/VPSS 離線模式是指 VI 進行時序解析后將圖像數據寫出到 DDR, VPSS 從DDR 中載入 VI 采集的數據進行圖像處理,是傳統 Hi3518/Hi3520D 等芯片的VI/VPSS 的協作模式。
  • VI/VPSS 在線模式是指 VI 進行時序解析后直接在芯片內部將數據傳遞到 VPSS,中間無 DDR 寫出的過程。在線模式可以省一定的帶寬和內存,降低端到端的延時。

需要注意的是:在線模式時,因為 VI 不寫出數據到 DDR,無法進行CoverEx、 OverlayEx、 Rotate、 LDC 等操作,需要在 VPSS 各通道寫出后再進行Rotate/LDC 等處理,而且有些功能只在離線下能支持,比如 DIS。

視頻輸入

視頻輸入(VI)模塊實現的功能:將芯片外的視頻數據通過 ITU-R BT656/601/1120 接口或 Digital Camera 接口接收,存入到指定的內存區域。在此過程中,VI 可以對接收 到的原始視頻圖像數據進行裁剪(Crop)、水平垂直縮小(Down Scaling)和水平垂直翻轉(Mirror、Flip)等處理,並實現一路或多路原始視頻圖像輸入,輸出一路或多路 視頻圖像功能。

重要概念 :

  • 視頻輸入設備:支持標准 BT.656、標准 BT.1120、自定義時序等若干種時序輸入, 負責對時序進行解析。
  • 視頻物理通道 :負責將輸入設備解析后得到的視頻數據輸出到 DDR。在真正將數據 輸出到 DDR 之前,它可以實現裁剪、遮擋、水平垂直縮小和水平垂直翻轉等功 能,具體功能見各芯片的詳細描述。
  • 掩碼用於指示 VI 設備的視頻數據來源。
  • 級聯:指芯片的視頻輸出端通過 BT1120 時序將視頻數據傳送到另一顆芯片的視頻輸 入端。

視頻輸出

VOU(Video Output Unit)模塊主動從內存相應位置讀取視頻和圖形數據,並通過相應的顯示設備輸出。
重要概念 :

  • 高清和標清顯示設備 :SDK 將高清和標清顯示設備分別標示為 DHDx 和 DSDx。其中,x 為索引號,從 0 開始取值,表示第幾路高清/標清顯示設備,例如第 0 路高清設備標示為 DHD0, 第 0 路標清顯示設備標示為 DSD0。所有高清和標清顯示設備又可分別簡稱為 HD 和 SD 設備。高清設備上可能會同時綁定兩個視頻層。
  • 視頻層: 對於固定在每個設備上面對應的視頻層,SDK 也對應采取 VHDx 和 VSDx 來標 示,對於可以動態綁定視頻層,用 PIP 來表示。
  • 通道: SDK 將通道歸屬於視頻層管理。對於一個視頻層,它上面的通道都是獨立的。同時,不同的視頻層上的通道也是獨立的。對於通道的排號上面不存在跨層的連 續。例如,處理電子放大的場景時,視頻層 VHD0 上面的通道 0 作為電子放大的 顯示的畫面,視頻層 PIP 上面的通道 0 作為全場景顯示的畫面。這兩個通道沒有 關聯。對於系統綁定,應該用視頻層和通道號來進行綁定配置;同時,對於回寫的圖像 作為綁定源時,需要將回寫內容所在的設備號和 0 通道號作為綁定源設置。

視頻處理子系統

VPSS(Video Process Sub-System)支持對一幅輸入圖像進行統一預處理,如去噪、去隔行等,然后再對各通道分別進行縮放、銳化等處理,最后輸出多種不同分辨率的圖像。
VPSS 單元支持的具體圖像處理功能包括 FRC(Frame Rate Control)、Crop、PreScale、 NR(Noise Reduce) 、DEI(De-interlace)、ES(Edge Smooth)、IE(Image Enhance) 、 DCI(Dynamic Contrast Improvement)、Cover/Overlay/Mosaic、Scale、LTI(Luma Transition Improvement)/CTI(Chroma Transition Improvement)、Aspect Ratio、Border 等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM