Да, jpeg - король форматов изображений. Я имею в виду, что в сеансе захвата может быть только один JPEG или нет.

я есть реализация camera2. В настоящее время используется текстура поверхности для отображения фактического изображения с камеры иImageReader поверхность для захвата изображений.

Теперь я хочу также захватывать предварительные кадры. Поэтому я попытался добавить новыйImageReader поверхность для захвата кадров. Но когда я добавлю эту поверхность кcreateCaptureSession запрос, экран гаснет. Что может быть не так? Ниже приведен код, который я использую для добавления поверхностейcreateCaptureSession

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")
}

Инициализация ImageReaders выглядит следующим образом.

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) }
}

Дополнительные пояснения по поводу параметров, использованных выше:

internalOutput Формат либоImageFormat.JPEG или жеImageFormat.YUV_420_888.Размеры изображения основаны на наилучших возможных размерахЭто хорошо работает с любым из считывателей изображений по отдельности, но как только я добавлю оба вместе, пустой экран!Тестирование на Samsung Galaxy S8 с Android Oreo (8.0)

Оригинальный код здесьhttps://github.com/pvasa/cameraview-ex/blob/development/cameraViewEx/src/main/api21/com/priyankvasa/android/cameraviewex/Camera2.kt

Ответы на вопрос(1)

Ваш ответ на вопрос