使用 yavta 源代码捕获帧时如何提高 fps?

问题描述

-> 我正在使用 yavta 源代码从基于 MIPI 的相机 (https://github.com/6by9/yavta/blob/master/yavta.c) 捕获帧。 -> 我修改代码,使其使用 VIdioC_EXPBUF IOCTL(https://www.kernel.org/doc/html/v4.9/media/uapi/v4l/vidioc-expbuf.html#vidioc-expbuf) 将缓冲区导出为 DMA Buf 文件描述符。我调用了 int buffer_export_mp(int v4lfd,enum v4l2_buf_type bt,int index,int dmafd[],int n_planes) 在链接中提到,就在 VIdioC_REQBUFS IOCTL 调用之后。它正在导出 dma buf fd。 -> 之后我将这个 dma buf fd 传递给 openCL 和其他需要的参数到 openCL 内核中,最后将 openCL 内核的输出通过 PCIe 传递给主机。

我可以看到过滤后的输出。事实上,我能够从相机实时捕获帧并能够在 pcie 主机上显示。但是视频反应不是很灵敏,滞后太多。我的目标是提高输出的响应能力。

-> 我在 VIdioC_DQBUF ioctl 之后调用 openCL 相关的处理函数,在那里它应用过滤器并通过 PCIe 发送。如果我将缓冲区导出为 dma buf 文件描述符,是否需要对缓冲区进行 De-Queue(VIdioC_DQBUF)?也就是说,调用openCL相关处理函数的地方合适吗?如果没有,我应该在哪里调用函数,以便能够将帧正确传递给 openCL 内核?这就是fps很低的原因吗?

-> 我正在考虑实现线程。但不确定哪些函数要保留在线程中。我认为 yavta.c 中的 video_do_capture() 函数和 openCL 处理函数要保存在线程中。这会提高fps吗?

请提出任何可以使用 yavta 源代码提高 fps 的建议。我的代码与上面共享的 yavta.c 不完全相同,但与此类似。

谢谢, 阿迪亚。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)