我是靠谱客的博主 怕孤单水池,最近开发中收集的这篇文章主要介绍HISI VENC 实际输出帧率控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

平台:HI3516EV100

SDK : Hi3516CV300_SDK_V1.0.2.0

系统 : LiteOS

海思MPP文档里写的我就不多说了,不知道是我理解有问题还是什么,反正很多次都不能准确的控制实际的编码(VENC)输出帧率,就是 cat /proc/venc 能看到的通道输出帧率,今天特地花时间来研究下,发下有如下规律:

海思的帧率控制无非就是如下这些地方涉及到:
ISP -----------------------------------------> HI_MPI_ISP_SetPubAttr
VI -----------------------------------------> HI_MPI_VI_SetChnAttr
VPSS -----------------------------------------> HI_MPI_VPSS_SetChnAttr
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 实际输出帧率控制的全部内容,希望文章能够帮你解决HISI VENC 实际输出帧率控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部