在 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++;
}
}