Android camera2 createCaptureRequest возвращает все черные пиксели при получении изображения YUV_420_888 - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть Android camera2 API Предварительный просмотр работает нормально в Kotlin, используя suspendCoroutine для всех настроек поверхности и обратных вызовов.Но когда я пытаюсь сделать снимок через 5 секунд после запуска приложения (TEMPLATE_STILL_CAPTURE, YUV_420_888, наименьшее разрешение) по какой-то причине все это на мгновение полностью становится черным (даже в окне предварительного просмотра), и я получаю изображение YUV, полное 0-светлые пиксели.

private suspend fun captureStill(): Image = suspendCoroutine { cont ->
    val captureRequestStill = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE)
    captureRequestStill.addTarget(imageReaderYUV.surface)
    imageReaderYUV.setOnImageAvailableListener({ cont.resume(imageReaderYUV.acquireLatestImage()) }, backgroundHandler)
    cameraCaptureSession.capture(captureRequestStill.build(), null, backgroundHandler)
}

Я что-то упустил?Я искажал некоторые аспекты установки ранее?Не подходит ли setOnImageAvailableListener для захвата изображения YUV?

См. Полный танец настройки в одной функции с поддержкой приостановки

1 Ответ

0 голосов
/ 25 сентября 2018

При настройке предварительного просмотра камеры вы неявно выбрали размер предварительного просмотра.Вообще говоря, ваш захват может использовать другой размер (даже для YUV, который также является буфером предварительного просмотра).

Но на многих устройствах несогласованный выбор размеров предварительного просмотра и размеров захвата не работает.Распространенным явлением является то, что вы должны выбрать размер предварительного просмотра и размер захвата Jpeg, чтобы иметь одинаковое соотношение сторон.Я настоятельно рекомендую вам следовать этой практике и для YUV.

Вы можете использовать SurfaceTexture.setDefaultBufferSize , если хотите, чтобы размер TextureView соответствовал общему макету.

...