Как добавить несколько поверхностей SurfaceView после создания сеанса camera2 - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть приложение, сохраняющее изображения с камеры непрерывно с помощью ImageReader.

Теперь у меня есть необходимость динамически добавлять несколько SurfaceView для отображения разного размера предварительного просмотра после создания сеанса камеры.

Поскольку поверхность ImageReader была добавлена ​​до создания сеанса следующим образом:

mBuilder = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
mBuilder!!.addTarget(mImageReader!!.surface)

val surfaces = ArrayList<Surface>()
surfaces.add(mImageReader!!.surface)
mCameraDevice!!.createCaptureSession(surfaces, mSessionCallback, mBackgroundHandler)

И мой новый SurfaceView будет создан после createCaptureSession.

Так как мне добавить еще одну поверхность предварительного просмотра на устройство для приема данных с камеры2?

1 Ответ

0 голосов
/ 06 ноября 2018

Это невозможно с камерой2 напрямую, для разных выходных разрешений. Если вам нужно изменить разрешение вывода, вы должны создать новый сеанс захвата с новыми выходами, которые вы хотите.

Если вам нужно несколько SurfaceView одного и того же размера, вы можете использовать API-интерфейсы разделения поверхности, добавленные на уровне API 26 и более поздних в OutputConfiguration (https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration).

Если этого недостаточно, другой вариант - подключить камеру к SurfaceTexture с максимально возможным разрешением SurfaceView, а затем визуализировать выходные сигналы с более низким разрешением по сравнению с OpenGL, создавая окна EGL для каждого нового SurfaceView, который вы хотите нарисовать. к. Для настройки контекста и рендеринга EGL требуется много кода, но он должен быть достаточно эффективным.

...