在V4L2应用层如何获取到vb2 queue里面buffer done的buffer个数

在 V4L2 应用层中,虽然没有直接的方法获取 vb2_queue 中 buffer done 的缓冲区数量,但是你可以通过一些间接的方法来估计或追踪这个信息:

使用 VIDIOC_QUERYBUF:你可以遍历所有的缓冲区,使用 VIDIOC_QUERYBUF 来查询每个缓冲区的状态。

struct v4l2_buffer buf;
int done_count = 0;

for (int i = 0; i < buffer_count; i++) {
    memset(&buf, 0, sizeof(buf));
    buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buf.memory = V4L2_MEMORY_MMAP;
    buf.index = i;

    if (ioctl(fd, VIDIOC_QUERYBUF, &buf) == -1) {
        perror("VIDIOC_QUERYBUF");
        exit(EXIT_FAILURE);
    }

    if (buf.flags & V4L2_BUF_FLAG_DONE) {
        done_count++;
    }
}