小学生
最后登录1970-1-1
在线时间 小时
注册时间2024-3-19
|
本帖最后由 MUCHWAY 于 2024-4-8 09:32 编辑
Lubancat 1IO使用VO8858摄像头,按照野火说明资料里面的说明:鲁班猫摄像头使用,可以正常使用摄像头,保存图片和保存视频都没有问题。
但是我现在想在我的应用程序中使用V4L2提供的API调用摄像头,参照网上的教程:手把手教你使用linux摄像头(V4L2框架)进行设置:
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/ioctl.h>
- #include <linux/videodev2.h>
- int main(void)
- {
- int fd = open("/dev/video0",O_RDWR);
- if (fd < 0)
- {
- perror("打开设备失败");
- return -1;
- }
- //获取摄像头支持格式 ioctl(文件描述符,命令,与命令对应的结构体)
- struct v4l2_fmtdesc vfmt;
- vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;//摄像头采集
- int i = 0;
- while(1) //使用while循环从0开始测试index索引值
- {
- vfmt.index = i;
- i++;
- int ret = ioctl(fd,VIDIOC_ENUM_FMT,&vfmt);
- if (ret < 0)
- {
- perror("获取失败");
- break;
- }
- printf("index=%d\n",vfmt.index);
- printf("flags=%d\n",vfmt.flags);
- printf("discription=%s\n",vfmt.description);
- unsigned char *p = (unsigned char *)&vfmt.pixelformat;
- printf("pixelformat=%c%c%c%c\n",p[0],p[1],p[2],p[3]);
- printf("reserved=%d\n",vfmt.reserved[0]);
- }
- close(fd);
- return 0;
- }
复制代码 执行这段代码,总有报错:获取失败: Invalid argument
并且我参考这个链接:Linux-使用V4L2,这其其中凡是涉及用ioctl函数去设置摄像头的地方,都有 Invalid argument的报错。
而我换成一个USB免驱摄像头,做上面的同样试验,则完全没有问题。
还请教一下懂的大佬指点一下,或者有没有可以参考的例程学习一下。
|
|