微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

V4l2 找不到连接的设备 (VIDIOC_S_FMT)

如何解决V4l2 找不到连接的设备 (VIDIOC_S_FMT)

我的代码似乎无法识别检测到的相机(没有 I2C)。

对于一个项目,我试图将相机与 Google Coral board 运行的 Mendel 连接起来。但是,该相机和将相机输出转换为 MIPI 的电路板之间有一个桥梁。在我的代码中,我尝试通过在此处调用 VIdioC_S_FMT 来调整 fmt 参数:

        CLEAR(fmt);   // set the format of the v4l2 video

    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE ;

    if (-1 == xioctl(fd,VIdioC_G_FMT,&fmt))
            errno_exit("VIdioC_G_FMT");

    printf("fmt.fmt.pix.width = %d\n",fmt.fmt.pix.width);
    printf("fmt.fmt.pix.pixelformat = %d\n",fmt.fmt.pix.pixelformat);

    printf("Set RGB888\r\n");
    fmt.fmt.pix.width       = 640; //replace
    fmt.fmt.pix.height      = 483; //replace
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;; //replace
    fmt.fmt.pix.field       = V4L2_FIELD_ANY;

    printf("fmt fields adjusted\n");
    printf("fmt.type = %d\n",fmt.type);

    if (-1 == xioctl(fd,VIdioC_S_FMT,&fmt)){
              switch (errno) {
              case EAGAIN:
                      printf("EAGAIN\n");
                      break;

              case EINVAL:
                      printf("EINVAL,fmt.type field is invalid\n");
                      break;

              case EBADR:
                      printf("EBADR\n");
                      break;

              case EBUSY:
                      printf("EBUSY\n");
                      break;

              /* fall through */
            }
            errno_exit("VIdioC_S_FMT");
    }

然而,这给出了以下错误输出

fmt.fmt.pix.width = 0
fmt.fmt.pix.pixelformat = 0
Set RGB888
fmt fields adjusted
fmt.type = 1
VIdioC_S_FMT error 19,No such device

因此,我认为电路板无法识别连接了摄像头的事实。如果我这样做:v4l2-ctl -d0 --list-formats-ext 我得到:

ioctl: VIdioC_ENUM_FMT
        Type: Video Capture

我的想法正确吗?如果是这样,为什么板子不识别相机?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。