HISI VENC 實際輸出幀率控制


 https://blog.csdn.net/spy_007_/article/details/83688287

平台:HI3516EV100

SDK : Hi3516CV300_SDK_V1.0.2.0

系統 : LiteOS

海思MPP文檔里寫的我就不多說了,不知道是我理解有問題還是什么,反正很多次都不能准確的控制實際的編碼(VENC)輸出幀率,就是  cat /proc/venc  能看到的通道輸出幀率,今天特地花時間來研究下,發下有如下規律:

  • 海思的幀率控制無非就是如下這些地方涉及到:
  1. ISP  -----------------------------------------> HI_MPI_ISP_SetPubAttr
  2. VI  -----------------------------------------> HI_MPI_VI_SetChnAttr
  3. VPSS  -----------------------------------------> HI_MPI_VPSS_SetChnAttr
  4. VENC  -----------------------------------------> HI_MPI_VENC_SetChnAttr 主要修改RC(碼率控制器)

    另外  :

         HI_MPI_VENC_CreateChn 創建通道也會設置幀率。

         HI_MPI_VENC_SetFrameRate 也能控制編碼幀率

重點就在上邊的4個步驟里邊:

畫了一張草圖幫助理解

如上圖: 

ISP處理為30幀/s   

VI處幀率不做控制(mpp文檔推薦的,影響抓拍) ,其實應該就是ISP處的30幀/s

VPSS 設置src:30   dst:15 ,理解為VPSS接收到 ( VI ) 的幀,每src幀只處理dst幀

VENC 設置 src:15  dst : 15  , 理解為VENC 接收到 ( VPSS ) 的幀,每src幀只處理dst幀

這樣理解就能清楚的多了,如此,比如要得到實際輸出 12幀的幀率,只需要最后將VENC設置成src:15  dst : 12 就可以了。

 

 

相關接口參數設置:

 

 

  • HI_MPI_ISP_SetPubAttr

               stPubAttr.f32FrameRate = 30; 

  • HI_MPI_VI_SetChnAttr 此處不進行幀率控制:

              stChnAttr.s32SrcFrameRate = -1;

              stChnAttr.s32DstFrameRate = -1;

  • HI_MPI_VPSS_SetChnAttr;

              chnAttr.s32SrcFrameRate = 30;

              chnAttr.s32DstFrameRate = 15;

  • HI_MPI_VENC_SetChnAttr  主要修改RC(碼率控制器)

             vencAtt0.stRcAttr.stAttrH264Vbr.fr32DstFrmRate = 15;

            vencAtt0.stRcAttr.stAttrH264Vbr.u32SrcFrmRate = 15;

 

 

自測按照該方法去設置能准確的控制實際編碼輸出幀率,如有問題,希望各位不吝指正,萬分感謝。

結果截圖:

cat /proc/rc

cat /proc/venc

 


免責聲明!

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



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