gpt4 book ai didi

android - Nexus 10 camera.release 挂起 30 秒

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:02 25 4
gpt4 key购买 nike

我们是一群正在开发适用于 Android 的实时视频处理应用程序的开发人员。最近,一位客户报告说我们的应用程序卡住只发生在 Nexus 10 设备上。我们自己购买了设备并进行了测试:

  • 设备预装了 Android 4.2 - 我们的应用程序没有挂起或卡住
  • 将 Android 升级到 4.3 后,我们的应用程序在关闭相机时卡住(解释见下文)
  • 升级到 4.4 后,我们的应用一直死机
  • 通过刷新最新的 Android 5.0 Nexus 10 出厂镜像,我们的应用程序仍然卡住
  • (编辑)- 问题已通过将 Nexus 10 升级到 Android 5.1 解决

关于卡住的更多信息:

我们的应用程序在 onResume Activity 方法中打开相机,安装预览回调,将预览大小设置为最适合我们的处理需求(在 nexus 10 上为 1920x1080)并开始预览(如果从 sleep 中恢复)或将相同的委托(delegate)给 SurfaceView 回调的 surfaceCreated 方法。在 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

您可以看到触发此行为的最小示例 here - 相机 Activity 需要快速重启几次以增加进入此状态的机会。我们注意到它在我们的应用程序中比在示例应用程序中更频繁地出现。我们的应用程序进行了一些繁重的帧处理,还使用 ​​GPU 进行图像处理,除了相机之外,还使用了加速度计和方向传感器 - 所有这些都没有包含在示例应用程序中。

我们还看到了关于同一问题(question 1question 2)的几个未回答的 StackOverflow 问题。您能否解释一下什么代码路径会导致提到的日志输出以及如何避免进入该状态?

到目前为止,我们在任何其他设备上都没有遇到提到的相机卡住问题。

最佳答案

很遗憾,您遇到了 Nexus 10 相机 HAL 中的非确定性错误。

虽然我们已尝试反复追踪此问题,但显然我们并未在此处找到所有问题实例。

在解决方法方面,您可以尝试简单地关闭相机设备,而不删除回调和停止预览;没有必要分阶段关闭。

关于android - Nexus 10 camera.release 挂起 30 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com