第二季3:海思MPP模块与视频缓冲池
以下內(nèi)容源于朱有鵬課程,如有侵權(quán),請(qǐng)告知?jiǎng)h除。
一、MPP功能模塊
1、MPP功能模塊(MPP,media process platform,媒體處理平臺(tái))
(1)MPP手冊(cè):\01.software\board\document_cn目錄下的《HiMPP IPC V2.0 媒體處理軟件開發(fā)參考.pdf》提取碼:1111
(2)詳見MPP手冊(cè)的系統(tǒng)概述1.3部分。
- 以ko和api形式提供,和驅(qū)動(dòng)處于同一層次。
- 處理流程主要分為視頻輸入(VI)、視頻處理(VPSS)、視頻編碼(VENC)、視頻解碼(VDEC)、視頻輸出(VO)、視頻偵測分析(VDA)、音頻輸入(AI)、音頻輸出(AO)、音頻編碼(AENC)、音頻解碼(ADEC)、區(qū)域管理(REGION)等模塊。
- VI 模塊捕獲視頻圖像,可對(duì)其做剪切、縮放等處理,并輸出多路不同分辨率的圖像數(shù)據(jù)。
- 解碼模塊對(duì)編碼后的視頻碼流進(jìn)行解碼,并將解析后的圖像數(shù)據(jù)送 VPSS 進(jìn)行圖像處理或直接送 VO 顯示。可對(duì)H264/MPEG4/MPEG2 格式的視頻碼流進(jìn)行解碼。
- VPSS 模塊接收 VI 和解碼模塊發(fā)送過來的圖像,可對(duì)圖像進(jìn)行去噪、圖像增強(qiáng)、銳化等處理,并實(shí)現(xiàn)同源輸出多路不同分辨率的圖像數(shù)據(jù)用于編碼、預(yù)覽或抓拍。
- 編碼模塊接收 VI 捕獲并經(jīng) VPSS 處理后輸出的圖像數(shù)據(jù),可疊加用戶通過 Region模塊設(shè)置的 OSD(水印信息)圖像,然后按不同協(xié)議進(jìn)行編碼并輸出相應(yīng)碼流。
- VDA 模塊接收 VI 的輸出圖像,并進(jìn)行移動(dòng)偵測和遮擋偵測,最后輸出偵測分析結(jié)果。
- VO 模塊接收 VPSS 處理后的輸出圖像,可進(jìn)行播放控制等處理,最后按用戶配置的輸出協(xié)議輸出給外圍視頻設(shè)備。
2、使用SI軟件,把MPP文件夾倒入,從例子sample_venc.c文件中的SAMPLE_VENC_1080P_CLASSIC函數(shù)開始看
- PAYLOAD_TYPE_E(傳輸?shù)母袷筋愋褪鞘裁?#xff09;
- PIC_SIZE_E(圖像分辨率大小)
- VB_CONF_S(視頻緩存池)
二、視頻緩存池
1、概念
(1)視頻的本質(zhì)是多幀圖片,圖片的本質(zhì)是RGB或rawRGB數(shù)據(jù),要占用一段連續(xù)內(nèi)存。
(2)視頻的裁剪、縮放、修正處理等各種操作,本質(zhì)上就是對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行運(yùn)算。
(3)視頻緩存池(VB, video buffer)就是一段很大,又被合理劃分和管理的內(nèi)存,用來做視頻數(shù)據(jù)的暫存和運(yùn)算場地。
(4)“公共視頻緩存池“”中的“公共”二字,可以理解為全局變量,也就是各個(gè)模塊都能訪問的一段內(nèi)存。
(5)看似視頻緩存塊在各個(gè)模塊之間流轉(zhuǎn),實(shí)際上并沒有內(nèi)存復(fù)制,而是指針在傳遞。
(6)視頻緩存池的內(nèi)存由MPP來維護(hù),我們?cè)谙到y(tǒng)啟動(dòng)時(shí)就把整個(gè)SDRAM分成了2部分:系統(tǒng)部分(由linux kernel來維護(hù)管理)和mpp部分(由mpp系統(tǒng)來維護(hù)管理)。
(7)緩存池需要幾個(gè),每個(gè)中包含幾個(gè)緩存塊,每個(gè)緩存塊多大,都是可以由用戶程序設(shè)置好參數(shù),然后調(diào)用MPP的相應(yīng)API來向MPP申請(qǐng)分配的。
2、相關(guān)的數(shù)據(jù)結(jié)構(gòu)和API
(1)VB_CONF_S? 結(jié)構(gòu)體
- u32MaxPoolCnt,這個(gè)根據(jù)實(shí)際情況設(shè)置數(shù)目,最大不能超過VB_MAX_POOLS;
- u32BlkCnt表示A(或者B,或者C……)中有多少個(gè)塊,u32BlkSize表示每個(gè)塊的大小是多少。
- acMmzName[ ]表示A(或者B……)這個(gè)公共池的名字(便于調(diào)試)。.
- VB_MAX_COMM_POOLS這里是16,表示最大有16個(gè)公共池(ABC……P)
(2)HI_MPI_VB_SetConf,是?API函數(shù),在某個(gè)ko文件里
- 用來設(shè)置格式。(點(diǎn)單,返回值表示是否點(diǎn)單成功)
(3)HI_MPI_VB_Init,是?API函數(shù),在某個(gè)ko文件里
- 用來進(jìn)行分配。(做菜,返回值表示是否做菜成功)
以上函數(shù)均在mpp手冊(cè)里面查詢可得。手冊(cè)中舉例為下面:
總結(jié)
以上是生活随笔為你收集整理的第二季3:海思MPP模块与视频缓冲池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言程序设计知识点总结归纳(全书)
- 下一篇: C语言中的函数(详解)