Android camera2 api. Establecer múltiples superficies de ImageReader da una salida en blanco

Tengo una implementación de camera2. La configuración actual es que utiliza una superficie de vista de textura para mostrar la vista real de la cámara y unaImageReader superficie para capturar imágenes.

Ahora también quiero capturar fotogramas de vista previa. Así que intenté agregar una nuevaImageReader superficie para capturar cuadros. Pero cuando agrego esa superficie acreateCaptureSession solicitud, la pantalla queda en blanco. Qué podría estar mal? A continuación se muestra el código que uso para agregar superficies acreateCaptureSession

val surface = preview.surface
            ?: throw CameraAccessException(CameraAccessException.CAMERA_ERROR)

val previewIRSurface = previewImageReader?.surface
            ?: throw CameraAccessException(CameraAccessException.CAMERA_ERROR)

val captureSurface = captureImageReader?.surface
            ?: throw CameraAccessException(CameraAccessException.CAMERA_ERROR)

try {
    val template = if (zsl) CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG else CameraDevice.TEMPLATE_PREVIEW

    previewRequestBuilder = camera?.createCaptureRequest(template)
            ?.apply { addTarget(surface) }
            ?: throw CameraAccessException(CameraAccessException.CAMERA_ERROR)

    val surfaces: ArrayList<Surface> = arrayListOf(surface, previewIRSurface, captureSurface)

    camera?.createCaptureSession(surfaces, sessionCallback, backgroundHandler)

} catch (e: CameraAccessException) {
    throw RuntimeException("Failed to start camera session")
}

La inicialización de ImageReaders es así.

private fun prepareImageReaders() {

    val largestPreview = previewSizes.sizes(aspectRatio).last()

    previewImageReader?.close()

    previewImageReader = ImageReader.newInstance(
            largestPreview.width,
            largestPreview.height,
            internalOutputFormat,
            4 // maxImages
    ).apply { setOnImageAvailableListener(onPreviewImageAvailableListener, backgroundHandler) }

    val largestPicture = pictureSizes.sizes(aspectRatio).last()

    captureImageReader?.close()

    captureImageReader = ImageReader.newInstance(
            largestPicture.width,
            largestPicture.height,
            internalOutputFormat,
            2 // maxImages
    ).apply { setOnImageAvailableListener(onCaptureImageAvailableListener, backgroundHandler) }
}

Más aclaraciones sobre los parámetros utilizados anteriormente:

internalOutput formato esImageFormat.JPEG oImageFormat.YUV_420_888. Los tamaños de imagen se basan en los mejores tamaños posibles ¡Funciona bien con cualquiera de los lectores de imágenes individualmente, pero tan pronto como agrego ambos juntos, pantalla en blanco! Pruebas en Samsung Galaxy S8 con Android Oreo (8.0)

El código original está aquíhttps: //github.com/pvasa/cameraview-ex/blob/development/cameraViewEx/src/main/api21/com/priyankvasa/android/cameraviewex/Camera2.k