在使用V4L2打开GC2053摄像头,获取摄像头支持的格式时,无打印,然后设置格式也一直报错无法成功,返回:Set format。
有无使用V4L2的可执行的应用层代码参考?
struct v4l2_fmtdesc fmtdesc;
memset(&fmtdesc, 0, sizeof(fmtdesc));
fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmtdesc.index = 0;
printf("Supported formats:\n");
while (ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) == 0) {
printf(" %c%c%c%c\n",
fmtdesc.pixelformat & 0xFF,
(fmtdesc.pixelformat >> 8) & 0xFF,
(fmtdesc.pixelformat >> 16) & 0xFF,
(fmtdesc.pixelformat >> 24) & 0xFF);
fmtdesc.index++;
printf("1\n");
}
// 设置格式
struct v4l2_format fmt;
memset(&fmt, 0, sizeof(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.pixelformat = V4L2_PIX_FMT_RGB565;
//fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_NV12;
//fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
fmt.fmt.pix.field = V4L2_FIELD_NONE;
ret = ioctl(fd, VIDIOC_S_FMT, &fmt);
printf("%d\n", ret);
if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0) {
perror("Set format");
close(fd);
return -1;
}