Toybrick

标题: rv1126 想使用c++底层实现v4l2抓图,摄像头capability测试 [打印本页]

作者: hxx1227    时间: 2023-7-22 10:48
标题: rv1126 想使用c++底层实现v4l2抓图,摄像头capability测试
按照帖子里说的v4l2命令行抓图可以抓图成功,但偶尔有几张图抓出来是黑的
现在想用cpp实现抓图命令获取图像帧
首先通过测试程序来配套的摄像头的能力,发现并不且具有捕获视频的能力(V4L2_CAP_VIDEO_CAPTURE),只具有流式传输(V4L2_CAP_STREAMING)结果如下
root@debian10:/home/toybrick/plate_detect_reg# ./cap /dev/video19
camera device:/dev/video19
driver: rkispp_v0
card:   rkispp_scale0
bus_info:       platform:rkispp-vir0
version:        267180
capability:     84201000
The device /dev/video19 does not support V4L2_CAP_VIDEO_OUTPUT command.
the device /dev/video19 is not support V4L2_CAP_READWRITE
the device /dev/video19 is not support capture
the device /dev/video19 is support streaming
device_caps:    4201000


这样的话是不是无法获取图像帧,或者用stream也可以获得?
然后我按照教程尝试去写,当碰到这个接口ioctl的时候总是会报错(Error querying buffer),也不知道是不是我配置的问题?感谢!




作者: hxx1227    时间: 2023-7-22 10:52
用的是TB-RV1126ds开发板配套的摄像头,为什么测试出来会不具体视频捕获能力?有大佬知道吗?救救救!
作者: jefferyzhang    时间: 2023-7-22 13:11
你怎么确认是 /dev/video19
作者: hxx1227    时间: 2023-7-22 14:19
jefferyzhang 发表于 2023-7-22 13:11
你怎么确认是 /dev/video19

v4l2-ctl -d /dev/video19 --set-selection=target=crop,width=1920,height=1080 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3 --stream-to=mp.out --stream-count=1 --stream-poll
这个抓图命令可以抓到
作者: hxx1227    时间: 2023-7-22 14:22
jefferyzhang 发表于 2023-7-22 13:11
你怎么确认是 /dev/video19

要怎么确认呀?大佬
作者: jefferyzhang    时间: 2023-7-22 21:32
media-ctl -p /dev/media0 和 1 和 2 分别看下就知道了
作者: hxx1227    时间: 2023-7-22 22:21
jefferyzhang 发表于 2023-7-22 21:32
media-ctl -p /dev/media0 和 1 和 2 分别看下就知道了

我把所有的/dev/video设备都试过了呢,都不具备视频捕获能力V4L2_CAP_VIDEO_CAPTURE ,要怎么解决呢
作者: jefferyzhang    时间: 2023-7-24 09:44
如果你确认过media框架输出是那个video节点,那就只是驱动没加capture标志位而已,直接去拿就行,没区别
作者: hxx1227    时间: 2023-7-24 11:12
jefferyzhang 发表于 2023-7-24 09:44
如果你确认过media框架输出是那个video节点,那就只是驱动没加capture标志位而已,直接去拿就行,没区别 ...

是不是这样理解,我就直接按正常流程去设置,比如这样设置格式啥的
struct v4l2_format fmt;
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    fmt.fmt.pix.width = WIDTH;
    fmt.fmt.pix.height = HEIGHT;
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
    fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
    if(-1 == ioctl(fd, VIDIOC_S_FMT, &fmt)){//设置图片格式
        perror("set format failed!");
        return -1;
    }
    if(-1 == ioctl(fd, VIDIOC_G_FMT, &fmt)){//得到图片格式
        perror("set format failed!");
        return -1;
    }
然后这里if条件我就去掉,不让它去判断,直接就ioctl这些设置走一遍就可以吧?

   
作者: jefferyzhang    时间: 2023-7-24 11:27
v4l2-ctl是开源的,只要你用v4l2-ctl能拉到图,按他代码写就没问题
作者: hxx1227    时间: 2023-7-27 13:29
jefferyzhang 发表于 2023-7-24 11:27
v4l2-ctl是开源的,只要你用v4l2-ctl能拉到图,按他代码写就没问题

好的,感谢,已经搞出来了
还有一个问题就是1126这块开发板,目前只能适配imx327这个摄像头吗?如果想用其他摄像头测试要怎么做?
作者: jefferyzhang    时间: 2023-7-27 16:23
hxx1227 发表于 2023-7-27 13:29
好的,感谢,已经搞出来了
还有一个问题就是1126这块开发板,目前只能适配imx327这个摄像头吗?如果想用 ...

都可以做,需要你们自己做转接板,自己配置dts,自己做3A Tuning,
rk提供的型号只是我们调过的现成的,我们不可能市面上每一款都给你调一遍




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