社区
驱动开发/核心开发
帖子详情
江湖告急!!!v4l2 下 VIDIOC_S_FMT 问题
yinluming
2009-09-21 04:18:30
VIDIOC_S_FMT error 22 ,Invalid argument
同样的驱动,同样的采集程序在fc8下面跑都没有问题,但是移植到开发板上面驱动加载是没问题,但是采集程序就老是报VIDIOC_S_FMT error 22 ,Invalid argument 错误。
没头绪了?现在怎么分析?跟内核配置有关系?跟库文件有关系?还是怎么?大家帮忙猜测下!!
...全文
3185
22
打赏
收藏
江湖告急!!!v4l2 下 VIDIOC_S_FMT 问题
VIDIOC_S_FMT error 22 ,Invalid argument 同样的驱动,同样的采集程序在fc8下面跑都没有问题,但是移植到开发板上面驱动加载是没问题,但是采集程序就老是报VIDIOC_S_FMT error 22 ,Invalid argument 错误。 没头绪了?现在怎么分析?跟内核配置有关系?跟库文件有关系?还是怎么?大家帮忙猜测下!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzb_gd
2012-07-26
打赏
举报
回复
我今天也遇到了这个问题,解决的方法可以参考这个地方:
http://www.linuxquestions.org/questions/linux-software-2/vidioc_s_fmt-error-22-invalid-argument-833925/#post4707466
mailzss
2012-02-21
打赏
举报
回复
我也是啊,很纠结啊!我已经写好了代码,在X86上运行可以保存成bmp格式文件,就是移到ARM板上总是出错。我用的是DM6467板,如果接USB摄像头,程序跑到VIDIOC_STREAMON 就出错,如果是用本身板子上的YPbPr接口,才跑到VIDIOC_S_FMT 就跑不下去了。格式设置从表面上也看不出有什么错。郁闷了........
fantasy_ARM1
2011-11-16
打赏
举报
回复
啊!同遇到这个问题啊!求加个QQ细聊啊!我才开始搞图像采集啊,郁闷啊!764880887
钱国正
2011-08-16
打赏
举报
回复
现在知道了,是驱动问题,可是保存又出现了问题
钱国正
2011-08-06
打赏
举报
回复
是啊,同样的问题
Cedric_jee
2011-07-05
打赏
举报
回复
恩,我用yuvtools确实能够读到图片,现在正在看能否有更好的方法解决这个问题,7楼结贴的方法值得思考,不过他引而不发。楼上能否给我点关于内核剪裁放卖弄的指导性意见?
[Quote=引用 16 楼 kickxxx 的回复:]
引用 14 楼 christian_j 的回复:
这个问题再顶一顶,不知道有没有人解决,继续关注。我设置YUYV的格式是可以编译成功的,但是读出的图片无法显示,估计需要再用YUYV转RGB的程序转换一下才行。
先把图片保存成文件,然后用 yuvtools查看文件的具体格式,再决定怎么转换
[/Quote]
kickxxx
2011-06-27
打赏
举报
回复
[Quote=引用 14 楼 christian_j 的回复:]
这个问题再顶一顶,不知道有没有人解决,继续关注。我设置YUYV的格式是可以编译成功的,但是读出的图片无法显示,估计需要再用YUYV转RGB的程序转换一下才行。
[/Quote]
先把图片保存成文件,然后用 yuvtools查看文件的具体格式,再决定怎么转换
kickxxx
2011-06-27
打赏
举报
回复
看驱动代码呀,这个-22是在哪里返回的,不看代码怎么知道
Cedric_jee
2011-06-22
打赏
举报
回复
这个问题再顶一顶,不知道有没有人解决,继续关注。我设置YUYV的格式是可以编译成功的,但是读出的图片无法显示,估计需要再用YUYV转RGB的程序转换一下才行。
newton123456
2011-05-21
打赏
举报
回复
貌似是摄像头的设备问题哦!在没插上摄像头之前有/dev/video0插上摄像头之后多了一个/dev/video1 以前一直用的video0 cat video0没有数据 cat video1有 说明摄像头设备是video1
panqingliang
2011-05-11
打赏
举报
回复
悲哀!这个问题好难搞
jiayuxiaoxu
2011-03-30
打赏
举报
回复
哎,怎么没人解答呢,我也遇到了,悲剧
binbinzai1234
2011-02-09
打赏
举报
回复
我也是这样,求救!
ayetao
2010-11-04
打赏
举报
回复
楼主能把解决方法告知一下吗? 小弟也是这里出了问题
wangdenuan
2010-10-26
打赏
举报
回复
[Quote=引用 6 楼 zaqswx 的回复:]
同问,纠结很久了...
[/Quote]
能把具体解决方法写出来吗?非常感谢
yinluming
2010-09-28
打赏
举报
回复
内核的裁剪移植问题,呵呵,结贴
zaqswx
2010-09-26
打赏
举报
回复
同问,纠结很久了...
你個臭鴨蛋
2010-09-17
打赏
举报
回复
关注ing
「已注销」
2010-07-25
打赏
举报
回复
楼主,我也遇到这个问题,你怎么解决的?
nemo_chao
2010-03-04
打赏
举报
回复
我也有一樣的問題
我的buf_type是設定用video_capture
明明用 VIDIOC_ENUM_FMT 拿出來的format 和去設定的是一樣的
結果卻是報錯
在ubuntu上是好的
在開發板上就不成了
難不成web cam 和camera module在v4l2上得用法有差?
真是暈
加载更多回复(2)
VID
IOC
_QUERYCTRL: Inappropriate
ioc
tl for device) 内核驱动文件 mx6s_capture.c
IMX8 mini mipi 摄像头报错:
VID
IOC
_QUERYCTRL: Inappropriate
ioc
tl for device) 需要在内核的驱动代码中去实现相关函数。
V4L2
功能列表大全及讲解
ioc
tl
VID
IOC
_ENCODER_CMD,
VID
IOC
_TRY_ENCODER_CMD - 执行编码器命令
ioc
tl
VID
IOC
_ENUMAUDIO - 枚举音频输入
ioc
tl
VID
IOC
_ENUMAUDOUT - 枚举音频输出
ioc
tl
VID
IOC
_ENUM_
FMT
- 枚举图像格式
基于
V4L2
实现的摄像头视频读取并使用freambuffer显示到屏幕
使用
V4L2
实现摄像头的视频读取,为提高视频刷新速度,采用了freambuffer实现视频的显示,比直接用QT lable显示快一个等级。 因需要在嵌入式运行,QT已配置好交叉编译环境,所以代码使用了qt的工程。如果不使用qt可直接将所有.c .h文件提取不需要修改,添加自己的交叉编译配置,即可使用。
V4L2
视频采集操作流程和接口说明
1 打开设备文件 int fd open " dev
vid
eo0" O RDWR ; 2 取得设备的capability 看看设备具有什么功能 比如是否具有视频输入 或者音频输入输出等
VID
IOC
QUERYCAP struct
v4l2
capability 3 选择视频输入 一个视频设备可以有多个视频输入
VID
IOC
S INPUT struct
v4l2
input 4 设置视频的制式和帧格式 制式包括PAL NTSC 帧的格式个包括宽度和高度等
VID
IOC
S STD
VID
IOC
S
FMT
struct
v4l2
std id struct
v4l2
format 5 向驱动申请帧缓冲 一般不超过5个 struct
v4l2
requestbuffers 6 将申请到的帧缓冲映射到用户空间 这样就可以直接操作采集到的帧了 而不必去复制 mmap 7 将申请到的帧缓冲全部入队列 以便存放采集到的数据
VID
IOC
QBUF struct
v4l2
buffer 8 开始视频的采集
VID
IOC
STREAMON 9 出队列以取得已采集数据的帧缓冲 取得原始采集数据
VID
IOC
DQBUF 10 将缓冲重新入队列尾 这样可以循环采集
VID
IOC
QBUF 11 停止视频的采集
VID
IOC
STREAMOFF 12 关闭视频设备 close fd ;">1 打开设备文件 int fd open " dev
vid
eo0" O RDWR ; 2 取得设备的capability 看看设备具有什么功能 比如是否具有视频输入 或者音频输入输出等
VID
IOC
QUERYCAP struct
v4l2
capability 3 选择视频输入 一个视频设备可以有多个视频 [更多]
基于qt的网络通讯
现在开始叙述
Vid
eo4Linux2的使用。 /* 打开设备并进行错误检查 */int fd = open ("/dev/
vid
eo",O_RDONLY);if (fd==-1){perror ("Can't open device");return -1;} /* 查询设备的输出格式 */struct
v4l2
_format format;memset (&format,0,sizoef(format));format.type =
V4L2
_BUF_TYPE_
VID
EO_CAPTURE;if (-1==
ioc
tl(fd,
VID
IOC
_G_
FMT
,&format)){perror ("While getting format");return -2;} /* * 这里要将struct
v4l2
_format结构体置零,然后将 * format.type设定为
V4L2
_BUF_TYPE_
VID
EO_CAPTURE, * 这样在进行
VID
IOC
_G_
FMT
的
ioc
tl时,驱动就会知 * 道是在捕获视频的情形下获取格式的内容。
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章