Подтвердить что ты не робот

Что такое эквивалент API Camera2 для setDisplayOrientation()?

С android.hardware.Camera, чтобы выход камеры надлежащим образом отслеживал движение устройства, нам нужно подключить OrientationEventListener к методу setDisplayOrientation() на Camera. Таким образом, когда пользователь поворачивает устройство вокруг, мы можем сохранить то, что "вверх" на предварительном просмотре камеры, синхронизируется с тем, что "вверх" в реальном мире. Это особенно справедливо для вращения устройства вокруг оси Y (т.е. Переброса из ландшафта в обратный пейзаж или обратно).

Для большинства изменений ориентации API android.hardware.camera2, похоже, "работает". Однако для этого поворота оси Y (пейзаж → реверс-пейзаж или наоборот) предварительный просмотр камеры завершается инвертированием.

Что эквивалентно вызову setDisplayOrientation() в Camera для Camera2 API, поэтому мы можем справиться с этим сценарием?

4b9b3361

Ответ 1

Как вы заметили, это должно "работать" только для SurfaceView в API камеры2.

Таким образом, нет эквивалента setDisplayOrientation().

Мы до сих пор не слышали об этой проблеме, поэтому несколько вопросов:

  • У вас есть приложение, заблокированное для пейзажа, или вы разрешаете изменения ориентации?
  • Выполняете ли вы свои собственные изменения ориентации или у вас разорвана сфера и перезагрузите приложение при изменении ориентации?
  • Вы запускаете какой-либо повторный макет, когда происходит поворот на 180 градусов, например, чтобы отрегулировать, где находится кнопка спуска затвора?

Ответ 2

используйте CaptureRequest JPEG_ORIENTATION, чтобы настроить ориентацию дисплея

captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90)

Ответ 3

используйте приведенную ниже формулу, чтобы получить поворот устройства.

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

SensorOrientation - это поле, назначенное из

characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION) 

Решение, предлагаемое инженером google: yaraki

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

Ответ 4

Нет.

Он не "работает", если ориентация дисплея менялась местами по сравнению с ориентацией датчика (на большинстве устройств это имеет место в портретном режиме), потому что вам нужно установить соотношение сторон < 1 для вашей поверхности предварительного просмотра, которую камера2 не может сопоставить с подходящим размером вывода. Решение: