Toybrick

标题: 3588 使用V4L2编程 VIDIOC_QUERYBUF查询失败,返回-1 [打印本页]

作者: gxl1028    时间: 2023-7-27 15:56
标题: 3588 使用V4L2编程 VIDIOC_QUERYBUF查询失败,返回-1
使用V4L2代码如下:
/* 第四步:让摄像头驱动申请存放图像数据的缓冲区 */
    struct v4l2_requestbuffers reqbuf;
    reqbuf.count = COUNT;                       // 缓冲区个数
    reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;  // 缓冲区类型
    reqbuf.memory = V4L2_MEMORY_MMAP;           // 缓冲区的用途:用于内存映射
    ret = ioctl(fd, VIDIOC_REQBUFS, &reqbuf);
    if (-1 == ret)
    {
        perror("ioctl VIDIOC_REQBUFS");
        close(fd);
        return -4;
    }
    printf("qrequbuf.count is %d\n", reqbuf.count);

    /* 第五步:查询每个缓冲区的信息,同时进行内存映射 */
    for (i = 0; i < COUNT; i++)
    {
        struct v4l2_buffer buff;
        buff.type = reqbuf.type;
        buff.memory = reqbuf.memory;
        buff.index = i;
        ret = ioctl(fd, VIDIOC_QUERYBUF, &buff);
        if (-1 == ret)                          // 操作失败
        {
            printf("querybuf falied\n");
            break;
        }

        /* 打印缓冲区的长度和偏移量 */
        printf("buf[%d]: len = %d offset: %d\n", i, buff.length, buff.m.offset);

查询每个缓冲区时,ioctl(fd, VIDIOC_QUERYBUF, &buff)返回-1。其中COUNT= 5.



作者: jefferyzhang    时间: 2023-7-27 16:25
先用v4l2-ctl拉下图,能拉到就参考人家开源代码写
作者: gxl1028    时间: 2023-7-28 14:21
jefferyzhang 发表于 2023-7-27 16:25
先用v4l2-ctl拉下图,能拉到就参考人家开源代码写

嗯嗯,现在能顺利获取图片了。但是YUYV格式转RGB转出来的色彩存在偏差,我目前用opencv里面的cvtColor函数做转换,图像会出现局部偏红或者偏蓝的问题,请问这个问题有什么解决办法吗?
作者: xiaoci    时间: 2024-4-2 18:35
gxl1028 发表于 2023-7-28 14:21
嗯嗯,现在能顺利获取图片了。但是YUYV格式转RGB转出来的色彩存在偏差,我目前用opencv里面的cvtColor函 ...

我和你一样,请求失败,老哥是怎么解决的?
作者: xiaoci    时间: 2024-4-2 18:36
jefferyzhang 发表于 2023-7-27 16:25
先用v4l2-ctl拉下图,能拉到就参考人家开源代码写

可以拉取,我代码和楼主一样。我v4l2ctl可以拉图但是c++库却不行
作者: jefferyzhang    时间: 2024-4-3 16:05
xiaoci 发表于 2024-4-2 18:36
可以拉取,我代码和楼主一样。我v4l2ctl可以拉图但是c++库却不行

v4l2ctl 就是一个开源的程序 v4l2-utils,
既然命令能用,抄他代码肯定就能用。。
作者: gxl1028    时间: 4 天前
xiaoci 发表于 2024-4-2 18:36
可以拉取,我代码和楼主一样。我v4l2ctl可以拉图但是c++库却不行

V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE的代码不能这么写,你在网上查一下,这个代码没办法获取图像





欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3