Nexus 10 Camera.release 挂起 30 秒

2024-01-10

我们是一群正在开发 Android 实时视频处理应用程序的开发人员。最近,一位客户报告我们的应用程序出现冻结,这种情况仅发生在 Nexus 10 设备上。我们自己购买了设备并进行了测试:

  • 设备预装了 Android 4.2 - 我们的应用程序没有挂起或冻结
  • 将 Android 升级到 4.3 后,我们的应用程序在关闭相机时冻结(请参阅下面的说明)
  • 升级到 4.4 后,我们的应用程序一直冻结
  • 通过刷新最新的 Android 5.0 Nexus 10 工厂映像,我们的应用程序仍然冻结
  • (编辑)- 通过将 Nexus 10 升级到 Android 5.1 解决了该问题

有关冻结的更多信息:

我们的应用程序在 Activity 的 onResume 方法中打开相机,安装预览回调,将预览尺寸设置为最适合我们的处理需求(在 Nexus 10 上为 1920x1080),然后启动预览(如果从睡眠状态恢复)或委托相同的预览到SurfaceView回调的surfaceCreated方法。在 onPause 方法中,我们的应用程序删除预览回调,停止相机预览并释放相机。然而,我们的调查表明camera.release方法有时需要 30 秒才能完成。在那 30 秒内,我们的应用程序被冻结,因为我们过去常常从 UI 线程控制相机。后来我们将相机控件移至单独的事件处理程序线程,现在camera.release挂起该线程。虽然现在这对用户来说是不可见的(UI 没有被阻止),但用户无法从任何应用程序使用相机,直到我们的后台线程成功释放相机(即 30 秒后)camera.release被称为)。

在挂起期间,我们观察到摄像机服务的以下日志输出:

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 https://www.dropbox.com/s/qtx3hx41c9xwi1i/MyApplication.zip?dl=0- 相机活动需要快速重新启动几次,以增加进入此状态的机会。我们注意到它在我们的应用程序中比在示例应用程序中出现的频率要高得多。我们的应用程序进行一些重帧处理,还使用 ​​GPU 进行图像处理,此外相机还使用加速计和方向传感器 - 所有这些都不包含在示例应用程序中。

我们还看到了一些关于同一问题的未解答的 StackOverflow 问题(问题1 https://stackoverflow.com/questions/21324390/camera-release-takes-30-seconds-to-release-the-camera-in-nexus-10-is-there-an and 问题2 https://stackoverflow.com/questions/8783091/app-hanging-on-camera-release)。您能否解释一下什么代码路径将导致提到的日志输出以及如何避免进入该状态?

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


不幸的是,您在 Nexus 10 相机 HAL 中遇到了不确定性错误。

虽然我们多次尝试追查此问题,但显然我们尚未找到所有问题实例。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nexus 10 Camera.release 挂起 30 秒 的相关文章

随机推荐

  • Chart.js 中的 Utils 包

    我正在尝试从 Chart js 文档中重现此示例 https www chartjs org docs latest samples line interpolation html https www chartjs org docs la
  • 如何从 Android 上的列表视图中删除分隔线? [复制]

    这个问题在这里已经有答案了 我正在开发一个应用程序Listview 并且列表中的项目已经具有我不需要分隔线的样式 如何将分隔线设置为隐藏或删除分隔线ListView 你可以试试android divider null
  • Python ValueError:池未在异步多处理中运行

    我有一个简单的代码 path filepath1 filepath2 filepath3 def umap embedding filepath file np genfromtxt filepath delimiter if len fi
  • 如何获取 Android 设备的物理方向(以度为单位)。

    我知道我必须使用 OrientationListener 类从设备获取角度 我想要得到 90 和90 之间的角度 我不知道该怎么做 左图 90度 中图 0度 右图 90度 Code class OrientationListener imp
  • 缺少 Microsoft 时区

    我正在考虑使用微软时区 https support microsoft com en gb help 973627 microsoft time zone index values 通过利用系统时区信息 https msdn microso
  • 如何在IDEA中使用类路径而不是模块路径运行Java 9应用程序?

    当我在 IDEA 中运行主类时 它将模块及其依赖项放在模块路径上 是否可以将其更改为类路径 如果您没有定义模块信息 IDEA 会在类路径上设置应用程序和您的依赖项 由于您有一个模块信息 它是一个显式模块 因此它必须位于模块路径上 通常 您现
  • initState 方法中的 Flutter showDialog(context)

    我正在尝试使用showDialog context builder 当用户导航到某个页面时显示问候消息 我通过调用尝试了这个showDialog in the initState该页面上有状态小部件的方法 虽然它确实有效 但我似乎无法访问实
  • 列名称无效。 [ 节点名称(如果有) = t0,列名称 = 版本 ]

    我在尝试查询时遇到问题SQLCE我的 Windows Phone Mango 应用程序中的数据库 当我执行时出现异常 foreach var item in myDataContext MyTable Select item gt item
  • golang中的windows加密rdp密码

    like http play golang org p fD7mx2k4Yc http play golang org p fD7mx2k4Yc windows rdp密码加密http www remkoweijnen nl blog 20
  • 在经典 ASP 中添加逗号的 HTML 表单值

    我有一个经典的 ASP 页面 它会提交回自身 奇怪的是 从选择返回的值的末尾添加了逗号 以前有人遇到过这样的事情吗 有推荐的故障排除步骤或工具吗 我期望值以数字形式返回 它们是选项中显示的值的 ID 我检查了页面中是否有神秘逗号 但无法找到
  • iOS UTF-8 标签字符串

    我有一个 UTF 8 编码字符串 我想在标签中显示它 当我设置断点并检查保存字符串的变量时 一切看起来都很好 但是 当我尝试输出到日志或标签时 我得到拉丁编码 我已经尝试了几乎所有关于 SO 及其他的建议 但我就是无法让字符串正确显示 这是
  • 视图左上角的 GMSMarker 图标 (iOS)

    我正在尝试创建一个包含 GMSMapView 的 UITableViewCell 其中 GMSMarker 位于当前位置的中心 问题是标记总是出现在当前位置的左上角 我不知道如何解决这个问题 我尝试按照以下步骤操作 使用 UItablevi
  • 什么是 { 得到;放; C# 中的语法?

    我正在学习 ASP NET MVC 我可以阅读英文文档 但我不太明白这段代码中发生了什么 public class Genre public string Name get set 这是什么意思 get set 它是所谓的 auto 属性
  • 更改 NSDictionary 中的键名

    我有一个方法 它返回一个带有某些键和值的 nsdictionary 我需要将字典中的键名称更改为新的键名称 但该键的值需要相同 但我被困在这里 需要帮助 此方法仅适用于可变字典 如果新密钥已经存在 它不会检查应该做什么 您可以通过调用 mu
  • 在 Visual C# 中从 RichTextBox 中删除 RichText 格式

    我正在用 C 开发一个高级富文本编辑器 但偶然发现了一个我似乎无法理解的问题 我一直试图让用户将他们的文档保存为文本文件 纯文本 通过使用以下内容 我的 RichTextBox Save 文件 文件路径 PlainText 但问题是 当他们
  • 1.8 与 1.9 中的 BigDecimal

    升级到 ruby 1 9 时 在比较预期值与实际值时 我的测试失败了BigDecimal这是 Float 除法的结果 expected 0 495E0 9 18 got 0 4950000000 0000005E0 18 27 谷歌搜索 b
  • CSS 第一次在 3D 变换时不渲染背面

    我有一个卡片翻转风格的动画 可以将文本区域翻转 180 度 我遇到的唯一问题是 第一次执行翻转时 在经过 90 度后 元素消失 然后在完成 180 度旋转后出现后面的元素 这是带有代码的示例 http jsfiddle net elninj
  • 阻止用户删除 BigQuery 表

    我们正在尝试创建一个非常基本的角色 允许用户查询 BigQuery 表 但不能删除它们 我们正在试验的自定义角色现在具有以下权限 bigquery jobs create bigquery jobs get bigquery jobs li
  • 如何清除 Selectize.js 下拉列表中的选定值?

    我有一个selectize js https selectize github io selectize js 下拉菜单 我必须清除所选值 我已经尝试过这个 如建议的另一个问题 https stackoverflow com questio
  • Nexus 10 Camera.release 挂起 30 秒

    我们是一群正在开发 Android 实时视频处理应用程序的开发人员 最近 一位客户报告我们的应用程序出现冻结 这种情况仅发生在 Nexus 10 设备上 我们自己购买了设备并进行了测试 设备预装了 Android 4 2 我们的应用程序没有