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