zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java中JVM的原理重温【转】
    JavaBean 规范
    Java编程规范[转]
    spring mvc 多数据源切换,不支持事务控制[一]
    03-连连看-连通分析
    02-连连看-用例分析
    01参考资料
    03-稀疏矩阵
    02-对不重复的一组数据查找
    01-用链式结构打印学生成绩单
  • 原文地址:https://www.cnblogs.com/ordinary-world/p/10460001.html
Copyright © 2011-2022 走看看