v4l2-ctl pipeline踩坑

我想把video1捕获的流送到video0设备,于是用下面的指令:

v4l2-ctl -d1 -e0 --stream-mmap --stream-out-mmap

因为 --device /dev/video1可以缩写为-d1,--out-device /dev/video0可以缩写为-e0

但是效果不对,查下源码,make_devname使用了一个静态局部变量的原因,只能有一个缩写。

 后面就不再使用缩写形式,改为下面的缩写:

v4l2-ctl -d /dev/video1 -e /dev/video0 --stream-mmap --stream-out-mmap

又报错,发现输入和输出的mem组合有限制,有3种组合。因为从video1拿内存输出给video0,所以只要一个设备分配内存即可,mmap会在驱动层分配内存,而dmabuf和userptr是引用其他模块的内存,并不会分配。

所以,改为

v4l2-ctl -d /dev/video1 -e /dev/video0 --stream-mmap --stream-out-dmabuf

yuyv格式没问题,改成mplane为2的NV16格式,又报错了。

继续跟代码,发现export出来的第二个fd不对,调试出来1529行有bug。

 

按下图修改源码,就正常了。 这是v4l2-ctl的一个BUG,有向linuxTV提bug的同仁可以向该组织提交这个问题,我发了邮件人家没理我。

根据v4l2-ctl代码,只能capture设备用mmap,output设备用dmabuf,而不能置换。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值