Примечание. На этой странице рассматривается пакет Camera2. Если вашему приложению не требуются определенные низкоуровневые функции Camera2, рекомендуем использовать CameraX. CameraX и Camera2 поддерживают Android 5.0 (уровень API 21) и более поздние версии.
Разработчики приложений для камер могут столкнуться с уникальными проблемами при работе над приложениями для камер, которые работают на складных устройствах. В отличие от смартфонов, где часто справедливы несколько предположений, связанных с ориентацией дисплея, ориентацией камеры и направлением, складные устройства могут иметь различные форм-факторы, макеты дисплеев и комбинации камер.
Обычно у смартфонов камеры с вертикальной ориентацией, соответствующей экрану. Однако это может быть не так для некоторых складных состояний. Например, на развернутом экране один датчик может быть в вертикальной ориентации, а другой – в горизонтальной.
Если в вашем приложении камеры используется SurfaceTexture или пользовательский конвейер рендеринга, учитывайте ориентацию датчика камеры.
Это гарантирует, что отображаемый контент всегда будет физически вертикальным, а пиксели останутся квадратными, что позволит избежать растяжения в горизонтальном или вертикальном направлениях.
В этом руководстве рассказывается, что нужно учитывать разработчикам Camera2 и как настроить рендеринг предварительного просмотра камеры для разных состояний складных устройств.
Как переключение статуса устройства влияет на камеры
К складным устройствам относятся:
- Два или более физических дисплеев
- несколько физических камер;
Эти устройства могут стать активными в зависимости от состояния устройства. Чтобы упростить обработку состояния устройства, в некоторых устройствах реализована логическая камера, состоящая из двух или более физических датчиков.
Если разработчики откроют и включат предварительный просмотр на таком логическом устройстве, камера будет автоматически переключаться между физическими устройствами в зависимости от состояния складывания.
Например, рассмотрим складное устройство с двумя экранами:
- Обычный вертикальный экран в сложенном состоянии с физической внешней фронтальной камерой в вертикальной ориентации.
- Складной экран в разложенном состоянии с внутренней фронтальной физической камерой, расположенной горизонтально относительно разложенного экрана.
Когда пользователь складывает или раскладывает устройство, а приложение транслирует видео с фронтальной логической камеры, реализация устройства может переключаться между внутренним и внешним физическими датчиками в ответ на каждое переключение состояния устройства.
При переключении экранов может потребоваться изменить интерфейс приложения.
Помимо корректировки интерфейса, разработчикам может потребоваться настроить отображение предварительного просмотра с камеры в зависимости от активной физической камеры.
Физические переключатели камеры
Интерфейс логической камеры предоставляет необходимые API для управления переключением физических камер. Разработчики должны отслеживать значение активного физического идентификатора.
На складных устройствах результат съемки физического удостоверения личности может меняться в зависимости от того, сложено устройство или нет.
В таких случаях разработчики должны использовать текущий активный физический идентификатор и проверить соответствующие характеристики камеры.
Две наиболее важные характеристики камеры, которые могут потенциально измениться и повлиять на рендеринг предварительного просмотра, – это ориентация датчика и направление объектива.
Если конвейер рендеринга предварительного просмотра в вашем приложении зависит от статических параметров камеры для расчета конечной матрицы преобразования, убедитесь, что вы передаете текущие значения и обновляете графические преобразования.
Чтобы лучше понять, как работают конвейеры предварительного просмотра камеры и как рассчитываются преобразования, ознакомьтесь с руководством по предварительному просмотру камеры.
Дополнительные неверные предположения
Кеширование значений характеристик камеры не рекомендуется.
Нельзя предполагать, что характеристики камеры останутся неизменными, поскольку они могут меняться, когда устройство складывается или раскладывается. Поэтому не следует сохранять и повторно использовать характеристики камеры. Вместо этого каждый раз проверяйте характеристики камеры.
Рассмотрим случай, когда приложение камеры запускается на внешнем переднем дисплее и кэширует текущие характеристики передней и задней камер. Если приложение перезапустится на внутреннем дисплее, активный фронтальный физический датчик может иметь другую ориентацию, что может привести к нежелательным побочным эффектам рендеринга предварительного просмотра.