android - Camera API 1 和 Camera API 2 返回不同的传感器方向信息

标签 android android-camera2

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

LEGACY: These devices expose capabilities to apps through the Camera API2 interfaces that are approximately the same capabilities as those exposed to apps through the Camera API1 interfaces. The legacy frameworks code conceptually translates Camera API2 calls into Camera API1 calls; legacy devices do not support Camera API2 features such as per-frame controls.

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

相同

然而事实并非如此!

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

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

我错过了什么吗?这是有意的行为吗? 我使用的是搭载 Android 8.1 的小米红米 5 plus(这是制造商问题吗?)

谢谢

最佳答案

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

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

关于android - Camera API 1 和 Camera API 2 返回不同的传感器方向信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714064/

相关文章:

java - 以编程方式创建布局时在 Camera2 API 中预览拉伸(stretch)

java - ML Kit 条码扫描 : Invalid image data size

android - 表 "Tablename"没有名为 "columnname"的列,但它有一个

java - 上传图片时出现OutOfMemory异常如何解决?

android - 如何使 ScrollView 中的线性布局填充整个区域

android camera2 createCaptureSession 已弃用

java - 蓝牙聊天示例和上下文参数

java - 如何在 Android 中的自定义适配器类中使用或实例化 Sqlite Database Helper 类实例?

android - 在android中读取RAW DNG文件

java - 一段时间后,Camera2 ImageReader挂起并显示“无法释放缓冲区”消息