什么是相同的setDisplayOrientation()的Camera2 API?

时间:2015-11-02 13:42:32

标签: android android-camera

使用android.hardware.Camera,为了让相机输出正确跟踪设备移动,我们需要在OrientationEventListener上将setDisplayOrientation()Camera方法联系起来。这样,当用户扭转设备时,我们可以保持相机预览中的“向上”与现实世界中的“向上”同步。对于围绕Y轴旋转设备(即从横向翻转到反向横向或向后),尤其如此。

对于大多数方向更改,android.hardware.camera2 API似乎“正常工作”。但是,对于Y轴旋转(横向 - >反向横向,反之亦然),相机预览会被反转。

相同于在setDisplayOrientation()上为Camera2 API调用Camera,我们可以处理这种情况吗?

4 个答案:

答案 0 :(得分:9)

正如您所注意到的那样,这应该在camera2 API上为SurfaceView“正常工作”。

因此,没有相当于setDisplayOrientation()

我们之前没有听说过这个问题,所以有几个问题:

  1. 您的应用是否已锁定到横向,或者您是否允许更改方向?
  2. 您是否处理了自己的方向更改,或者在方向发生变化时是否拆除框架并重新启动应用程序?
  3. 发生180度旋转时是否会触发任何类型的重新布局,例如调整快门按钮的位置?

答案 1 :(得分:2)

使用此CaptureRequest JPEG_ORIENTATION设置显示方向

captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90)

答案 2 :(得分:1)

使用下面的公式来获取设备轮换。

private int getOrientation(int rotation) {
    return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360;
}

SensorOrientation是从

分配的字段
characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION) 

谷歌工程师建议的解决方案:yaraki

https://github.com/googlesamples/android-Camera2Basic/issues/24

答案 3 :(得分:0)

没有。

它没有"只是工作"如果与传感器方向相比交换显示方向(在大多数设备上这是纵向模式的情况),因为你必须设置宽高比< 1表示相机2无法映射到适合的输出尺寸的预览表面。解决方案: