What is the Camera2 API Equivalent of setDisplayOrientation()?

CommonsWare picture CommonsWare · Nov 2, 2015 · Viewed 13.2k times · Source

With android.hardware.Camera, in order to have the camera output appropriately track the device movement, we need to hook up an OrientationEventListener to the setDisplayOrientation() method on Camera. That way, as the user twists the device around, we can keep what is "up" on the camera preview in sync with what is "up" in the real world. This is particularly true for rotating the device around the Y axis (i.e., flipping from landscape to reverse-landscape or back).

For most orientation changes, the android.hardware.camera2 API seems to "just work". However, for that Y-axis rotation (landscape -> reverse-landscape or vice versa), the camera preview winds up being inverted.

What is the equivalent of calling setDisplayOrientation() on Camera for the Camera2 API, so we can handle this scenario?

Answer

Eddy Talvala picture Eddy Talvala · Nov 3, 2015

As you've noticed, this is supposed to "just work" for SurfaceView on the camera2 API.

As such, there's no equivalent of setDisplayOrientation().

We haven't heard of this issue before now, so a few questions:

  1. Do you have your app locked to landscape, or are you allowing orientation changes?
  2. Do you handle your own orientation changes, or are you having the framework tear down and restart your app when orientation changes?
  3. Do you trigger any sort of re-layout when the 180-degree rotation occurs, for example to adjust where the shutter button is?