0

I'm trying to create custom camera app with API2, but stuck with such problem, main and front cameras are giving normal preview, but secondary infrared camera present in list, but when i'm switching to it, i don't get any preview, just stucked image (In OpenCamera app all three cameras are working, and IR one has ID2, And one more thing, in OpenCamera it works good for preview and taking photos, but trying to capture video causes app error or crash)

here's code for opening preview:

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

And here for switching camera:

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
            }
Ivan
  • 325
  • 3
  • 9

0 Answers0