v4l2接口只能拍摄32张照片的问题

排查:注释其他干扰程序,只有v4l2线程执行,发现仍然只能拍32张照片

加printf打印信息,发现在第33次拍照片的时候poll超时(应该意识要这是没有buffer可用)

修改申请的buffer为64,现象还是如此

此时的疑问点:1.为什么只能拍摄32张照片  2.为什么修改了申请的buffer,拍摄的照片数量不变

查看文档:

b730f0f0fa6d4be7b9759863d6fe739f.png

对比程序发现,处理完数据后,并没有把buffer放入空闲链表,导致buffer已满,poll查询时超时,所以只能拍摄32张照片,

添加代码:

//fds[4]为我的文件描述符,struct v4l2_buffer buf
if (0 != ioctl(fds[4], VIDIOC_QBUF, &buf))
{
    perror("Unable to queue buffer");
}

 

为了解决另一个疑问,修改申请的buffer为64个之后,把刚刚添加的代码注释,执行应用程序发现同样只能拍摄32张照片,再次查看文档

644b85fd29b846f2b01842b0a5c49567.png

得到答案:申请的buffer,APP可以申请很多个buffer,但是驱动程序不一定能申请到

有个疑问点:为什么驱动程序申请不到,ioctl返回正确的值,

百度得到了结果:ioctl的返回值并不一定表示请求被完全满足,而只是指示ioctl调用本身是否成功,所以为什么驱动程序申请不到,ioctl返回正确的值

反思:在知道第33次拍照片的时候poll超时,应该意识到这是没有buffer可用,应该先解决代码逻辑是否有问题

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值