器件型号: AM62A7-Q1
您好、
我们正在使用 edgeai-tiovx-apps V4L2 捕获模块 (modules/modules/v4l2_capture_module.c src)、希望得到您对的指导
修复了 v4l2_capture_start () 中的 2 秒睡眠问题。
当前实施为:
#define V4L2_CAPTURE_STREAMON_DELAY 2 // in sec
int v4l2_capture_start(v4l2CaptureHandle *handle)
{
int status = 0;
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == xioctl(handle->fd, VIDIOC_STREAMON, &type)) {
TIOVX_MODULE_ERROR("[V4L2_CAPTURE] VIDIOC_STREAMON failed\n");
status = -1;
}
sleep(V4L2_CAPTURE_STREAMON_DELAY);
return status;
}
我们的问题:
1.VIDIOC_STREAMON ioctl 是否在实际启动流式传输之前阻塞? 如果驱动程序仅在之后从 VIDIOC_STREAMON 返回
流水线/传感器已完全流式传输、随后的 2 秒 sleep() 看起来是冗余的、可以将其删除。
2.固定 2 秒延迟的目的是什么? 我们怀疑添加了它是为了让传感器/CSI-2 流水线在之前稳定下来
第一个 DQBUF。 如果是、是否有我们可以等待的确定性事件、而不是硬编码的最坏情况下的睡眠(例如,阻塞开启)
第一个帧是通过 POLL()/DQBUF、而不是无条件的 2s 等待?
3.对于我们的用例,可以安全地消除或减少这种延迟吗? 固定的 2 秒时间会给我们带来显著的确定性损失
启动/流延迟、这对我们的应用至关重要。
如果仅某些传感器或配置需要延迟、请提供有关如何正确调整延迟大小(或使其满足条件)的任何指导
非常感谢。
谢谢、
NIR