camera初始化失败的一个奇怪问题

最近的工作中遇到一个camera的奇怪的问题,特做记录。


平台:权智 A10 ;

系统:android 4.0.3;

工作内容:视频通话功能,使用ioctl命令操作摄像头的驱动节点,捕获图像,交给硬件编码器做264编码,然后rtp发送出去。

代码逻辑:初始化接口里init camera,申请4个buf,然后创建一个camer线程和一个enc线程。

    在camera线程里,如果有空闲buf,则调用 VIDIOC_DQBUF ,获取图像;没有空闲buf,则continue;

                    在enc线程里,检查有没有准备好的buf,有的话就把图像数据送给硬件编码器,编码完毕调用 VIDIOC_QBUF ,释放这个buf;

遇到问题:压力测试一段时间后(有可能是一个月,也可能是一天),init camera失败,具体是 VIDIOC_QUERYBUF 命令报错。当出错一次之后,每次都是这个错,

除非重启系统,无法恢复。


问题debug:VIDIOC_QUERYBUF 出错,是申请buf失败,buf的申请和释放都是在v4l2的驱动里完成的,在streamoff的时候,还会释放所有的buf。首先怀疑我对

camera驱动的ioctl调用有问题,但是核对过调用流程,发现只有一点不一样,那就是qbuf和dqbuf的调用逻辑不一样。别的资料里面都是单

任务里面 dqbuf -> use buf -> qbuf ,而我是多任务操作,也就是说,当qbuf和dqbuf不配对的时候,v4l2的驱动可否运转正常?于是我合并了camera 线程和enc线程,

测试了几天,没有发现问题。


后记:这个问题在之前几个月很少发生,印象中一个月难发生2次,但是上个星期突然频繁了起来,一天就可以发生2次,了解到驱动那边有人修改了v4l2初始化的一个

问题,s_input命令会调用设备驱动的init函数配置camera寄存器,init失败却没有返回-1,他们修改的时候直接把open标志赋值为零,这个修改明显是有问题的。可能

是导致camera频繁初始化失败的原因。s_input的问题和qbuf、dqbuf都修改了才做的测试,也不能确定根源上是谁的问题,先记录一下吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值