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. DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点

    目的:只允许同级拖动. 两个判断: 1.原节点(假设为:S)的父级如果不等于目标节点(假设为:T)的父节点,那么发生了跨级,即非同级移动.这个判断很容易. 2.S.T是同一级的,但是S是移动到T下一级 ...

  2. Docker Toolbox

    Toolbox包含以下Docker工具: 用于运行docker-machine命令的Docker Machine 用于运行docker命令的Docker Engine Docker Compose用于 ...

  3. shell脚本学习总结(不断更新中)

    前言:自从大学毕业参加工作以来,接触的开发工作都是在服务端完成,于是接触了比较多的Linux当做开发机使用,或多或少有一些重复性的工作,于是开始琢磨学习一些shell脚本的知识,以便处理这些繁琐的事情 ...

  4. QT_REQUIER_CONFIG

    在qglobal.h中,定义了很多宏.下面这个QT_REQUIER_CONFIG,展开成: #define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(Q ...

  5. 最近学习的 Node.js 数组_函数

    数组的排序,用到了箭头函数 let arr=[, , , , , , ]; /* arr.sort(function (n1, n2){ return n1-n2; }); */ // 等价于上面的写 ...

  6. python命令行运行py文件找不到模块的解决办法

    问题: 新建了一个项目,目录结构如下: 然后在pycharm中运行glovar是没有问题的,但是在命令行中运行就会提示找不到init模块 这是因为在pycharm中运行的时候,pycharm会自动将项 ...

  7. 编辑器测试-TinyMCE

    一级标签 二级便签 引用段落1231456456 普通段落 链接 简书 https://www.jianshu.com/p/edee77363855 import pygame WINWIDTH = ...

  8. 分频器的Verilog实现

    一.占空比50%的奇数分频 1.实现思路 实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1:用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频 ...

  9. python+flask+session写供前端使用的后台接口,实现登录保存session时报错。

    RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the a ...

  10. learn-ES6基础语法1-let&const

    1.let ① 使用let声明的变量,所声明的变量只能在命令所在的代码块内有效. 同样在代码块内的a和c,c在代码块内就可以输出,a在代码块外就找不到了. ② 使用let命令声明的变量在域解析的时候不 ...