Я создаю приложение, которое принимает видео с передней и задней камеры одновременно. Обе камеры отправляют изображения на соответствующий ImageReader
для некоторой обработки. У меня также есть TextureView
, чтобы показать предварительный просмотр с любой камеры, выбранной пользователем.
Таким образом, сеанс захвата камеры с предварительным просмотром имеет две поверхности ImageReader
и TextureView
а у другой камеры только ImageReader
.
Теперь, когда пользователь переключает камеру , я хочу удалить TextureView
Surface
из одного CameraCaptureSession
и добавить в другой сеанс
Можно ли как-нибудь удалить Surface
из CameraCaptureSession
, не закрывая сеанс?
Мой код на данный момент (аналогично для камера заднего вида):
SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture();
surfaceTexture.setDefaultBufferSize(mTextureView.getWidth(), mTextureView.getHeight());
mCaptureRequestBuilderFront = mCameraDeviceFront.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
List<Surface> surfaces = new ArrayList<Surface>();
/* Make Surface out of texture as preview is shown on a Surface */
Surface surface = new Surface(surfaceTexture);
surfaces.add(surface);
mCaptureRequestBuilderFront.addTarget(surface);
/* Make Surface out of ImageReader to get images for processing */
Surface readerSurface = mImageReaderFront.getSurface();
surfaces.add(readerSurface);
mCaptureRequestBuilderFront.addTarget(readerSurface);
/* Create the Capture Session to start getting images from the camera */
mCameraDeviceFront.createCaptureSession(
surfaces
, mSessionCallbackFront
, mBackgroundHandler);