【问题标题】:Camera API 1 and Camera API 2 return different sensor orientation infoCamera API 1 和 Camera API 2 返回不同的传感器方向信息
【发布时间】:2019-06-22 08:56:28
【问题描述】:

我正在尝试找出将 camera2 与具有硬件级别支持 LEGACY 的设备一起使用的限制。来自official docs for android camera2 api:

LEGACY:这些设备通过 Camera API2 接口向应用公开功能,这些功能与通过 Camera API1 接口向应用公开的功能大致相同。遗留框架代码在概念上将 Camera API2 调用转换为 Camera API1 调用;旧设备不支持相机 API2 功能,例如每帧控件。

我发现这是错误的...实际上我希望通过Camera.CameraInfo camInfo -> camInfo.orientation (docs) 获得的传感器方向与cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION) (docs) 相同

然而事实并非如此!

  • Camera API 1 返回 90° 的方向角
  • Camera API 2 返回 270° 的方向角

请注意,这是完全不同的!横向!=反向横向!例如,它将完全破坏从屏幕预览坐标到相机传感器空间的矩阵变换。

我错过了什么吗?这是预期的行为吗? 我正在使用带有 Android 8.1 的小米 Redmi 5 plus(这是制造商的问题吗?)

谢谢

【问题讨论】:

  • 确保比较同一相机的答案。难道你问前置摄像头的camera2特性,而Camera.CameraInfo适用于后置摄像头?另外,我很想知道 90°270° 哪个值是正确的(我的意思是,这 answer 是否产生正确的结果? ).
  • 感谢您的评论,我想问一下这两种情况下后置摄像头的特性(您认为制造商可以根据前置或后置摄像头采用不同的传感器方向吗?当然可以,但对于现在我没有遇到这种情况)无论如何正确的答案是 90° 但我开始怀疑 camera2 是否告诉旋转应用在相机传感器空间中,而 camera1 告诉旋转应用在显示坐标空间中(即使文档声明它应该是从显示坐标转换为相机坐标的旋转)

标签: android android-camera2


【解决方案1】:

如果这两个查询适用于同一个相机,这肯定是一个错误,小米负责。即使在主流设备上也确实会出现错误,而且相机 API 适配层往往比其他 API 更容易出现错误。

您可能会发现对于 LEGACY 设备,camera2 层会引入额外的开销,反之亦然。如果您通过用于 LEGACY 设备的已弃用 Camera API 以及通过用于其他设备的 camera2 API 工作,您将获得最佳性能。 我知道支持两个版本的代码很痛苦,但是当你需要以最佳方式利用设备时,你必须付出这个代价

【讨论】:

  • 好的,谢谢您的回答!实际上,我确实对两个相机 API 进行了包装,但我希望在弃用旧相机 API 5 年后,我只能使用相机 2。问题是,迁移到 Android 9,旧的 Camera API 将不再工作(至少三星 Galaxy S9 上发生了这种情况),所以 Camera 1 的弃用终于成为现实,Android 9 将迫使制造商实施 Camera2 对吗?一个强大的替代方案是 Camera X,但我尝试过它仍处于 alpha 阶段,因此采用它还为时过早
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多