Firefly开源社区

标题: 【已找到root cause】UVC 摄像头预览失败,无法拍照 [打印本页]

作者: heavenward    时间: 2016-1-28 16:58
标题: 【已找到root cause】UVC 摄像头预览失败,无法拍照
本帖最后由 heavenward 于 2016-2-3 14:44 编辑

如题,系统版本是android5.1

第一次开启uvc摄像头预览正常,但是一拍照就会退出app。
再次尝试打开摄像头都会报下面的这种错误。
尝试在代码里搜reprocessFrame处理的函数,但是没有找到。
求助。。。

下面是出错的log:
3401:E/CameraHal(  167): reprocessFrame(942): mjpeg data error!!
3402:E/CameraHal(  167): reprocessFrame(942): mjpeg data error!!
3403:E/CameraHal(  167): getFrame(614): getFrame(614): VIDIOC_DQBUF Failed!!! err[I/O error]
3404:E/CameraHal(  167): getFrame(620): getFrame(620): camera driver or device may be error, so notify CAMERA_MSG_ERROR

2016/2/3 更新:
最后花了点时间,从hal层一直追到kernel uvc driver,最后终于发现问题的原因。
现象:
第一次打开uvc设备预览等一切正常,但是退出再重新打开或者拍照后回到预览界面时APP会崩溃退出。
原因:
kernel uvc driver内的uvc_video_complete_fun函数在检查urb_state时发现state为UrbDeactive,直接报错返回了
if (atomic_read(urb_state)==UrbDeactive) {
        printk(KERN_DEBUG "urb is deactive, this urb complete cancel!");
        uvc_queue_cancel(queue, urb->status == -ESHUTDOWN);
        return;
}

造成deactive的原因是,上一次打开设备后调用了uvc_video_suspend函数,其中又调用了uvc_uninit_video函数将urb全部deactive了。
在第二次打开uvc设备时调用的uvc_video_resume函数中又调用了uvc_init_video_bulk进行uvc_stream的重新初始化,但是没有对Urb重新
active。导致第二次进入预览界面会造成urb数据获取不到的问题。

分析过程:
一开始追到hal层,发现每次get frame都会失败,而且总是报mjpeg data error。由于处理mjpeg frame的code没有开放,无法继续查下去。
为了排除hal层decode frame引起bug的嫌疑。从网上找了直接通过V4L2打开video设备的apk再次尝试。最后发现还是会报错。确认是driver的
问题。打开uvc的全部log,最后发现第二次进入preview状态时总是报Urb Deactive的error。最后添加log,找到对应的suspend和resume使用的
函数,将ACTIVE的流程添加进去。问题解决。
附件为patch:
patch使用方法,在SDK更目录下使用如下命令
patch -p0 < uvc.patch



uvc.zip

455 Bytes, 下载次数: 495, 下载积分: 灯泡 -1 , 经验 -1

patch文件


作者: heavenward    时间: 2016-1-29 16:41
没有人碰到过这个问题么?
作者: tk1user    时间: 2016-3-24 14:14
厉害!受教了
作者: wwf_1105    时间: 2016-6-22 16:37
楼主,厉害!谢谢分享!
作者: xueyuking    时间: 2016-12-6 15:14
也碰到这个问题,下了试下。
作者: xueyuking    时间: 2016-12-6 15:41
本帖最后由 xueyuking 于 2016-12-6 16:44 编辑

楼主,加入修改后可以拍照了,但有些分辩率下图像显示绿色,并且图像不完整 。请问你有遇到这种情况吗?

作者: Eric_Zhang    时间: 2017-5-17 17:37
遇到了同样的问题,用了楼主的patch,问题解决
顺便看了一下UVC的代码,对于uvc_init_video_isoc 初始化的同步方法设备,里面有active方法,不存在这个问题;
对于uvc_init_video_bulk初始化的bulk方法设备,里面没有active方法,即存在这个bug,添加了楼主的方法之后,问题解决。
谢谢分享!!
作者: jihongzhg    时间: 2017-7-27 15:48
我们也在调一款bulk模式的摄像头,也需要上面的问题,我们还有另外一个问题就是第一次也很大概率打不开,打开2秒就卡死,出现无法连接到相机的错误,这个有人解决过吗?
作者: 18682316023    时间: 2017-9-7 19:42
我的usb摄像头用了楼主的patch,很大的改善,楼主威武。
作者: mouse    时间: 2017-9-20 15:23
18682316023 发表于 2017-9-7 19:42
我的usb摄像头用了楼主的patch,很大的改善,楼主威武。

您好! 请问您是用的多大预览分辨率的USB摄像头?
作者: mouse    时间: 2017-9-20 15:25
18682316023 发表于 2017-9-7 19:42
我的usb摄像头用了楼主的patch,很大的改善,楼主威武。

为什么我的不打印那个urb is deactive, this urb complete cancel  ,我都printk的debug 权限,用cat /proc/kmsg 查看也没有
作者: mouse    时间: 2017-9-20 15:25
18682316023 发表于 2017-9-7 19:42
我的usb摄像头用了楼主的patch,很大的改善,楼主威武。

为什么我的不打印那个urb is deactive, this urb complete cancel  ,我都printk的debug 权限,用cat /proc/kmsg 查看也没有
作者: mouse    时间: 2017-9-20 15:26
18682316023 发表于 2017-9-7 19:42
我的usb摄像头用了楼主的patch,很大的改善,楼主威武。

为什么我的不打印那个urb is deactive, this urb complete cancel  ,我都printk的debug 权限,用cat /proc/kmsg 查看也没有
作者: denghongjie@hzd    时间: 2017-9-23 09:02
dddddddddddddd
作者: leo.wesine    时间: 2018-1-25 15:47
正在解决类似问题 感谢LZ
作者: 13802225091    时间: 2018-4-12 12:17
GOOD

作者: loading    时间: 2018-4-13 09:44
研究一下,
作者: chiniao    时间: 2018-4-17 13:45
下载试一下
作者: lialong1st    时间: 2018-5-23 10:12
E/CameraHal(  177): getFrame(614): getFrame(614): VIDIOC_DQBUF Failed!!! err[I/O error]
E/CameraHal(  177): getFrame(620): getFrame(620): camera driver or device may be error, so notify CAMERA_MSG_ERROR
我按照楼主的方法改了,还是不行
作者: lialong1st    时间: 2018-5-23 11:20
谢谢楼主,我的问题解决了,原因是摄像头866x600分辨率输出有问题,解决方法如下:
https://www.cnblogs.com/lialong1st/p/9075930.html
作者: gang.gg    时间: 2018-5-31 18:12
遇到相同问题
作者: guoguo    时间: 2018-9-11 18:18
楼主,牛!!

我们在rk3288上也遇到了类似的问题。

无法下载你的附件啊?


作者: 邓世豪    时间: 2018-12-26 14:44
我试试去
作者: baiydn    时间: 2019-8-28 16:16
我是第一次打开正常,重新打开就打不开了,应该也是这个问题吧。我下载不了附件,是因为积分少么
作者: baiydn    时间: 2019-8-28 16:45
还差1分
作者: baiydn    时间: 2019-8-28 17:07
问题已解决,多谢!
作者: zxc123    时间: 2019-8-29 17:01
真的厉害
作者: 猫王    时间: 2019-9-23 15:28
我也遇到同样的问题了
作者: Wim    时间: 2019-12-9 18:34
楼主厉害了。谢谢楼主分享。
作者: xiaozhu    时间: 2020-4-21 20:08
6666  我也碰到了
作者: wcrsrm    时间: 2021-3-4 21:00
感谢楼主分享
作者: useradmin    时间: 2021-5-17 14:56
下载试一下
作者: litreily    时间: 2021-6-22 14:18
试试看
作者: 李孝正    时间: 2021-9-27 20:35
给力
作者: xyq7531    时间: 2022-1-18 17:15

楼主,厉害!谢谢分享!
作者: 有迹可循    时间: 2023-5-29 15:08
下载不了
作者: 心静则宁    时间: 2023-7-26 11:07
也碰到这个问题,下了试下。
作者: 招金    时间: 2023-9-28 16:34
试试看,这个patch
作者: fjk887    时间: 2024-5-28 17:37
学习111
作者: fjk887    时间: 2024-8-6 15:29
学习




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1