DoD*_*oDo 5 camera android freeze nexus-10
我们是一群开发人员正在开发用于Android的实时视频处理应用程序.最近,一位客户报告我们的应用程序冻结仅在Nexus 10设备上发生.我们自己购买了设备并进行了测试:
有关冻结的更多信息:
我们的应用程序在onResume活动方法中打开相机,安装预览回调,为我们的处理需求设置最佳预览尺寸(在nexus 10这是1920x1080)并开始预览(如果从睡眠中恢复)或委托相同到SurfaceView的SurfaceView回调方法.在onPause方法中,我们的应用程序会删除预览回调,停止相机预览并释放相机.但是,我们的调查表明,该camera.release方法有时需要30秒才能完成.在那30秒内,我们的应用程序被冻结,因为我们曾经从UI线程控制相机.后来我们将相机控件移动到单独的事件处理程序线程,现在camera.release挂起该线程.虽然现在对用户来说这是不可见的(UI未被阻止),但是在我们的后台线程成功释放相机(即camera.release被叫后30秒)之前,用户无法使用任何应用程序中的相机.
在挂起期间,我们观察到来自摄像头服务的以下日志输出:
10-21 16:08:54.193: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight
10-21 16:08:54.193: E/Camera2Client(122): stopPreviewL: Camera 0: Waiting to stop streaming failed: Connection timed out (-110)
10-21 16:09:04.293: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight
10-21 16:09:04.293: E/Camera2Client(122): stopPreviewL: Camera 0: Waiting to stop streaming failed: Connection timed out (-110)
10-21 16:09:14.453: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight
10-21 16:09:14.453: E/Camera2-StreamingProcessor(122): deletePreviewStream: Error waiting for preview to drain: Connection timed out (-110)
10-21 16:09:24.573: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight
10-21 16:09:24.573: E/Camera2-CallbackProcessor(122): deleteStream: Error waiting for HAL to drain: Connection timed out (-110)
10-21 16:09:24.578: E/libexynosv4l2(122): failed to ioctl: VIDIOC_REQBUFS (-1 - Invalid argument)
10-21 16:09:24.578: E/ExynosCameraHAL2(122): cam_int_reqbufs: VIDIOC_REQBUFS (fd:35) failed (-1)
10-21 16:09:24.843: E/Camera2-CallbackProcessor(122): deleteStream: Camera 0: Device does not exist
10-21 16:09:24.853: E/Camera2-StreamingProcessor(122): deletePreviewStream: Camera 0: Device does not exist
Run Code Online (Sandbox Code Playgroud)
您可以在此处看到触发此行为的最小示例- 需要快速重启相机活动几次以增加进入此状态的机会.我们注意到它在我们的应用程序中比在示例应用程序中更频繁地出现.我们的应用程序执行一些繁重的帧处理,也使用GPU进行图像处理,此外相机还使用加速度计和方向传感器 - 所有这些都不包含在示例应用程序中.
我们还看到了几个关于同一问题的未回答的StackOverflow问题(问题1和问题2).您能否解释一下代码路径将导致提到的日志输出以及如何避免进入该状态?
到目前为止,我们没有遇到任何其他设备上提到的相机冻结.
不幸的是,您在 Nexus 10 相机 HAL 中遇到了不确定性错误。
虽然我们多次尝试追查此问题,但显然我们尚未找到所有问题实例。
在解决方法方面,您可以尝试简单地关闭相机设备,而不删除回调并停止预览;没有必要分阶段关闭。
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |