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

HISI VENC 实际输出帧率控制的更多相关文章

  1. .NET Core下的日志(3):如何将日志消息输出到控制台上

    当我们利用LoggerFactory创建一个Logger对象并利用它来实现日志记录,这个过程会产生一个日志消息,日志消息的流向取决于注册到LoggerFactory之上的LoggerProvider. ...

  2. PHP flush sleep 输出缓存控制详解

    1 2 3 4 5 6 ob_start,flush,ob_flush for($i=0;$i<</SPAN>10;$i++) { echo $i.''; flush(); slee ...

  3. PHP输出缓冲控制

    说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会 向磁盘写入的,而是写到buffer中,当buffer写 ...

  4. PHP输出缓冲控制- Output Control 函数应用详解

    说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满 ...

  5. C++ 数据类型及相关问题 及输出精度控制

    1.有哪些数据类型? 2.数据类型在不同的编译器会有不同的位宽,如何得知? 使用如下命令: cout<<sizeof(int)<<endl; cout<<sizeo ...

  6. PHP输出缓冲控制 - Output Control 函 应用详解

    简介 说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffe ...

  7. PHP中的输出缓冲控制

    在 PHP 中,我们直接进行 echo . 或者 print_r 的时候,输出的内容就会直接打印出来.但是,在某些情况下,我们并不想直接打印,这个时候就可以使用输出缓冲控制来进行输出打印的控制.当然, ...

  8. HTML输出 一 控制列背景颜色

    #将需要读取的域名和端口列表保存在名为ports01.txt.ports02的文件中,文件与脚本位于相同目录下$CurrentPath = $MyInvocation.MyCommand.Path.s ...

  9. PHP 输出缓冲控制(Output Control) 学习

    php 缓冲简介 其实我对php ob 系列印象还是很模糊,具体怎么玩的,还不是很了解,平时curd,确实对这些内容没有深入.作为phper 甚是惭愧.网上搜了一通,互相copy,代码运行不能出现作者 ...

随机推荐

  1. 原生js实现淘宝图片切换

    这个淘宝图片切换具体效果就是:鼠标移上底部一行中的小图片,上面大图片区域就会显示对应的图片. gif图片看起来还挺酷的,其实实现很简单,用原生js绑定事件改变大图片区域的src. 上代码,html部分 ...

  2. 如何快速地开发一个微信小程序

    如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...

  3. selenium3 - Tomcat and jenkins

    一.Tomcat的学习 1.tomcat 下载地址:tomcat.apache.org 2.配置tomcat环境变量: 新建系统变量 -  变量名:CATALINA_HOME    变量值:D:\TO ...

  4. [mock open]PyUnit执行单元测试时使用字符串模拟文件对象

    def mock_open(data): from StringIO import StringIO stmp = StringIO(data) return stmp _open = __built ...

  5. JavaScript里面的arguments到底是个啥?

    类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments ...

  6. mybatis进行一对多时发现的问题总结

    1.定义一对多xml文件时,所有的resultMap中的column的值一定不要重复,否则mybatis会发生错误,如果有重名,定义别名,column中的名字一定要与查询出的名字一致,如: 52行的别 ...

  7. 北大poj-1021

    2D-Nim Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4066   Accepted: 1851 Descriptio ...

  8. checkbox默认选中

    http://www.ggfenxiang8.com/?page_id=1108 需要最新前端视频教程vu.js1.0/2.0等的可以叫我QQ1139721002

  9. Debian系统 + XFCE桌面初识,基础环境搭建

    有幸分享个人的Linux下的习惯配置,具体操作可能阐述得比较粗糙. 在图形化界面进行配置操作,十分简便舒心. Linux发行版:Debian9.5(Stretch) 桌面Sesion:XFCE4 一. ...

  10. notepad++取消语法检测