基於Hi3559AV100 RFCN實現細節解析-(2)RFCN數據流分析

  下面隨筆系列將對Hi3559AV100 RFCN實現細節進行解析,整個過程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的內容,你們能夠參考以前我寫的博客:html

Hi3559AV100的VI細節處理說明函數

https://www.cnblogs.com/iFrank/p/14374658.htmlpost

基於Hi3559AV100的視頻採集(VDEC-VPSS-VO)總體框圖設計測試

https://www.cnblogs.com/iFrank/p/14370575.htmlspa

基於Hi3559AV100 RFCN實現細節解析-(1)VGS初介紹線程

https://www.cnblogs.com/iFrank/p/14465306.html設計

基於Hi3559AV100的SVP(NNIE)開發總體流程 :code

https://www.cnblogs.com/iFrank/p/14377668.html視頻

   首先給出總體的RFCN流程圖解,整個RFCN分爲3個step,具體以下所示:htm

  在分析RFCN數據流以前,首先了解一下基於Hi3559AV100的NNIE模型,在搭建好SDK等環境後,配置好對應的硬件,在HiLinux上進行測試,具體以下:

 1 ~ # ./sample_nnie_main
 2 Usage : ./sample_nnie_main <index> 
 3 index:
 4          0) RFCN(VI->VPSS->NNIE->VGS->VO).
 5          1) Segnet(Read File).
 6          2) FasterRcnnAlexnet(Read File).
 7          3) FasterRcnnDoubleRoiPooling(Read File).
 8          4) Cnn(Read File).
 9          5) SSD(Read File).
10          6) Yolov1(Read File).
11          7) Yolov2(Read File).
12          8) Yolov3(Read File)
13          9) LSTM(Read File)
14          a) Pvanet(Read File).\n")

  從中看能夠看到RFCN的整個過程VI->VPSS->NNIE->VGS->VO,VI模塊綁定了VPSS模塊,VI從攝像頭輸入一路視頻,經VPSS分解爲兩路,(具體見SAMPLE_SVP_NNIE_Rfcn中step 3-線程建立函數SAMPLE_SVP_NNIE_Rfcn_ViToVo),經過以下函數:

 1   HI_MPI_VPSS_GetChnFrame(  //用戶從通道獲取一幀處理完成的圖像。
 2 
 3           s32VpssGrp,
 4 
 5           as32VpssChn[1], 
 6 
 7           &stExtFrmInfo, 
 8 
 9           s32MilliSec);
10   HI_MPI_VPSS_GetChnFrame(  //用戶從通道獲取一幀處理完成的圖像。
11 
12           s32VpssGrp,
13 
14           as32VpssChn[0], 
15 
16           &stBaseFrmInfo, 
17 
18           s32MilliSec);

(設置兩路VPSS通道如幀圖片大小等等參數見SAMPLE_COMM_IVE_StartVpss函數)

  一路stBaseFrmInfo保持原來的1080P分辨率(這個須要看MIPI接口的相機型號來,如:見SAMPLE_COMM_IVE_StartViVpssVencVo函數:

case SONY_IMX277_SLVS_2M_240FPS_12BIT:

*penSize = PIC_1080P;

);

  一路stExtFrmInfo轉爲PIC_CIF(352x288)分辨率(追溯到最初的賦值語句:在SAMPLE_SVP_NNIE_Rfcn函數中:PIC_SIZE_E enSize = PIC_CIF;

通過以下獲得VPSS通道對應的圖片大小:

 1 SAMPLE_COMM_IVE_StartViVpssVencVo
 2 
 3     aenSize[1] = *penExtPicSize;
 4 
 5         SAMPLE_COMM_IVE_VbInit(aenSize,astSize,VPSS_CHN_NUM);
 6 
 7             SAMPLE_COMM_SYS_GetPicSize(paenSize[i], &pastSize[i])
 8 
 9                 SAMPLE_COMM_SYS_GetPicSize
10 
11                 {
12 
13                     switch (enPicSize)
14 
15                     {
16 
17                             case PIC_CIF: /* 352 * 288 */ 
18                                 pstSize->u32Width = 352;         
19                                 pstSize->u32Height = 288; break;......
20 
21                     }
22 
23                 }

  以後到SAMPLE_SVP_NNIE_Rfcn_Proc函數,具體以下:

 1 s32Ret = SAMPLE_SVP_NNIE_Rfcn_Proc(
 2 
 3             pstParam,
 4     
 5                     pstSwParam,
 6     
 7                     &stExtFrmInfo,
 8 
 9                     stBaseFrmInfo.stVFrame.u32Width,
10 
11                     stBaseFrmInfo.stVFrame.u32Height);    

  隨後進入加框函數:(即進入VGS視頻圖形子系統

1 //Draw rect
2 
3 s32Ret = SAMPLE_COMM_SVP_NNIE_FillRect(
4 
5                    &stBaseFrmInfo,      //*pstFrmInfo
6 
7                    &(pstSwParam->stRect),   // *pstRect
8 
9                     0x0000FF00);    //u32color    

  用到了兩個VGS重要參數定義:

  VGS_TASK_ATTR_S stVgsTask;  //定義 VGS task 的屬性

  VGS_ADD_COVER_S stVgsAddCover; //定義 VGS 上 COVER 的配置

  下面爲定義圖像屬性和輸出圖像屬性:

1 memcpy(  &stVgsTask.stImgIn, 
2                 pstFrmInfo, 
3                 sizeof(VIDEO_FRAME_INFO_S)); 
4 
5 memcpy(   &stVgsTask.stImgOut, 
6                 pstFrmInfo,                 
7                 sizeof(VIDEO_FRAME_INFO_S));    

  隨後定義 VGS 上 COVER 的配置,設置COVER參數,如顏色設置爲0x0000FF00(綠色,這個與以前Hi3519 RFCN運行一致,加綠色的框)

經過memcpy定義任意四邊形 COVER 四個座標點:

1 memcpy(  stVgsAddCover.stQuadRangle.stPoint,
2 
3                 pstRect->astRect[i][j].astPoint, //(pstSwParam->stRect)
4 
5                 sizeof(pstRect->astRect[i][j].astPoint));

  VGS 支持對一幅圖像進行遮擋操做,遮擋區域形狀能夠是矩形或者任意四邊形, 遮擋區域顏色爲純色,支持批量打 COVER。 而在Draw rect函數中,沒有對stBaseFrmInfo數據直接操做,目前認知VGS作COVER任務提交job時,直接將COVER數據送入至VO,隨後加上stBaseFrmInfo的數據:

 1 //將視頻圖像送入指定輸出通道顯示。
 2 
 3 s32Ret = HI_MPI_VO_SendFrame(
 4 
 5                 voLayer,
 6 
 7                 voChn,
 8 
 9                 &stBaseFrmInfo,
10 
11                 s32MilliSec);

   總體的數據流處理流程以下:

相關文章
相關標籤/搜索