如何统计V4L2吐帧的帧率?

本文探讨如何统计V4L2 Sensor前端的帧率,通过分析中断触发的回调函数vb2_buffer_done来获取真实的帧率信息。实验表明,从Sensor到用户层,帧率保持在60fps不变。在Tina系统中,使用gettimeofday获取帧率,结果显示在60fps左右。当开启人形检测后,帧率降低到30~40fps,进一步分析发现检测算法导致丢帧。此外,文章还介绍了从系统节点获取帧率的方法以及三通道VIPP时的帧率分析,展示了不同封装对帧率和码率的影响。
摘要由CSDN通过智能技术生成

项目中遇到一个问题,需要得到V4L2 Sensor前端吐帧的帧率,本来直接看sensor配置参数即可达到目的,可是作为一个做事严谨的工程师,必须要做到耳听为虚,眼见为实,只有看到实实在在的统计信息,才能相信数据是正确的。

那么该怎么做到呢? V4L2框架的架构如下图所示,从图中我们可以看到,视频设备在抓取到视频图像后,会调用vb2_buffer_done回调函数将帧上报给v4l2 核心层函数,其中vb2_buffer_done是核心层实现的回调函数。vb2_buffer_done是外部连接(EXPORT_SYMBOL_GPL)的符号,可以由模块调用。调用路径一般由VIDEO设备的中断触发,通过:

xxx_video_frame_arrive_irq->...->vb2_buffer_done->(v4l2 core).到到V4L2核心实现。

如果在这里实现信息统计,无疑得到的是实实在在的帧率信息,我们来实现一下:

实际运行一下看看:

每隔一秒打印的当前帧计数,可以看到,sensor过来的实际的帧率是60fps。

前面我们确认了,sensor端过来的帧率是60fps,那么经过常常的V4L2框架流水线式处理后,这个帧率会发生变化吗?想要确认这个问题,就需要我们统计一下用户层的帧率了。

用户层统计帧率的代码如下:

打印输出:

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值