v4l2驱动问题:ioctl(fd, VIDIOC_ENUM_FRAMESIZES,&fsize) 出错

sym0529 2016-07-15 11:09:30
目的是获取设备可支持的图像尺寸,程序如下
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
struct v4l2_fmtdesc fmt;
struct v4l2_frmsizeenum frmsize;
struct v4l2_frmivalenum frmival;

fmt.index = 0;
fmt.type = type;
while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) >= 0) {
frmsize.pixel_format = fmt.pixelformat;
frmsize.index = 0;
while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0) {
if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
printf("%dx%d\n",
frmsize.discrete.width,
frmsize.discrete.height);
} else if (frmsize.type == V4L2_FRMSIZE_TYPE_STEPWISE) {
printf("%dx%d\n",
frmsize.stepwise.max_width,
frmsize.stepwise.max_height);
}
frmsize.index++;
}
fmt.index++;
}
while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0(红色)获取时候总是失败(-1),求教为什么啊,应该如何获取设备支持的图像尺寸?我的linux版本Linux freescale 3.0.35
...全文
2104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbaihao 2016-10-27
  • 打赏
  • 举报
回复
即使返回的是-1也有很多种情况 你可以考虑用LOGE("error : %d, %s", errno, strerror(errno));把详细错误类型打出来看是哪的错,头文件#include <errno.h>,这有错误描述https://linuxtv.org/downloads/v4l-dvb-apis/gen_errors.html#gen-errors。
zhanshenxiaole 2016-10-24
  • 打赏
  • 举报
回复
用V4l2大家应该都是先在自己的电脑虚拟机上实验,调试好以后再放到开发板里面。我之前也出现过类试的问题,别人跑的好好的代码一到我电脑上就用不了。后来原因在于电脑是USB3.0接口。在虚拟机设置里把虚拟机的USB3.0支持打开了以后就可以用了。 说这个主要是让你看看你的代码移到开发板后者别人的电脑能不能用,新电脑USB3.0的问题经常被忽略,因为通过USB传的数据不大的时候这个问题不会凸显出来。
常书 2016-08-26
  • 打赏
  • 举报
回复
有对应的驱动程序吗,跟到驱动里面去看看吧
two_0_mt 2016-08-26
  • 打赏
  • 举报
回复
即使返回的是-1也有很多种情况 你可以考虑用LOGE("error : %d, %s", errno, strerror(errno));把详细错误类型打出来看是哪的错,头文件#include <errno.h>,这有错误描述https://linuxtv.org/downloads/v4l-dvb-apis/gen_errors.html#gen-errors

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧