Идентификатор камеры Kotlin виден, но невозможен предварительный просмотр (для дополнительной камеры)
Я пытаюсь создать собственное приложение камеры с API2, но столкнулся с такой проблемой: основная и передняя камеры дают нормальный предварительный просмотр, но дополнительная инфракрасная камера присутствует в списке, но когда я переключаюсь на нее, я ничего не получаю предварительный просмотр, просто застрявшее изображение (В приложении OpenCamera все три камеры работают, а ИК-камера имеет ID2. И еще: в OpenCamera она хорошо работает для предварительного просмотра и фотосъемки, но попытка захвата видео приводит к ошибке приложения или сбою)
вот код для открытия предварительного просмотра:
fun open_camera(){
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) != PackageManager.PERMISSION_GRANTED
) {
return
}
cameraManager.openCamera(cameraManager.cameraIdList[cid], object: CameraDevice.StateCallback(){
override fun onOpened(p0: CameraDevice) {
cameraDevice = p0
var capReq = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
var surface = Surface(textureView.surfaceTexture)
capReq.addTarget(surface)
cameraDevice.createCaptureSession(listOf(surface), object: CameraCaptureSession.StateCallback(){
override fun onConfigured(p0: CameraCaptureSession) {
cameraCaptureSession = p0
cameraCaptureSession.setRepeatingRequest(capReq.build(), null, null)
}
override fun onConfigureFailed(p0: CameraCaptureSession) {
// // TODO("Not yet implemented")
}
},handler)
}
override fun onDisconnected(p0: CameraDevice) {
// TODO("Not yet implemented")
}
override fun onError(p0: CameraDevice, p1: Int) {
// TODO("Not yet implemented")
}
},handler)
}
А вот для переключения камеры:
setContentView(R.layout.activiti_main)
seek = findViewById<SeekBar>(R.id.scam)
var id: String = "0"
seek?.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seek: SeekBar,
progress: Int, fromUser: Boolean) {
cid = progress
try {
ll = cameraManager.cameraIdList.lastIndex
if (seek.max !=ll.toInt()){
seek.max = ll
}
cameraCaptureSession.stopRepeating()
cameraDevice.close()
id = cameraManager.cameraIdList[cid]
} catch (e: Exception) {
// handler
}
open_camera()
// write custom code for progress is changed
}