android / android/camera-samples

Random crash with repeated Record/Preview

Aperta
#495 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Kotlin
Stelle
5.5k
Fork
2.4k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

UPDATE: This appears to be related to https://github.com/android/camera-samples/issues/109, But with Camera2 instead of CameraX.

I've built a test app using Camera2 video and MediaRecoder. This was seemingly working, but I was having random crashes when stopping record when repeatedly starting/stopping recording. The result of this record state change is that the previewBuilder gets rebuilt with previewSurface + recordSurface (record Start), or just previewSurface (record Stop).

To track it down, I made the code cycle 100 times thru a 10 second record/stop at 15 second intervals. With this approach, I can almost always see a crash, though it could be at iteration 3 or at 80, sometimes not until 300. I've done this testing on multiple Galaxy S9/10 devices as well as on a Pixel 4. All fail the same way, eventually.

The crashes appear to happen either at CreateCaptureRequest or at CreateCaptureSession. And the errors vary from crash to crash, usually being one of these:

- [Binder] java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List android.hardware.camera2.params.OutputConfiguration.getSurfaces()' on a null object reference

- CAMERA_ERROR (3): waitUntilIdle:1701: Camera 0: Error waiting to drain: Connection timed out (-110)

- android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error

- android.os.ServiceSpecificException: createDefaultRequest:1644: Camera 0: Error creating default request for template 3: Function not implemented (-38) (code 10)

- CameraCaptureSession Session 4: Failed to create capture session; configuration failed

I have not figured out how to recover from the error to get the app back into an expected state consistently. try/catch isn't working, as the error seems to occur in some async camera2 functionality. I can see that OnConfigureFailed is called, but by the time that's happened, it's already at some other part of the code which will fail. I tried to separate further along steps to be triggered by OnConfgured/OnReady, to isolate where the crash is happening, but it doesn't seem to be consistent, and this didn't stop the crash from happening.

My best guess is that some background activity, outside my app, is in conflict at the random point in time when my recording is changing states. But, I can't be sure of that.

I've added a ton of tracking into my code to try and isolate this, but no matter what I do, the result is the same. I'm stumped.

I also tried to make it so that I did not rebuild the previewBuilder with every record state change. But this didn't work because of the use of MediaRecorder for which there doesn't seem to be a way to Stop/Start it without recreating it.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Non sono identificati file del repository né test. Inizia riproducendo il ciclo ripetuto di avvio/arresto del video Camera2 e MediaRecorder descritto nell’issue, quindi esamina i percorsi CreateCaptureRequest, CreateCaptureSession e OnConfigureFailed insieme agli errori della fotocamera segnalati. Il lavoro è completato quando il ciclo ripetuto non causa più crash e l’app torna a uno stato previsto dopo gli errori.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
android, kotlin
Ambito
mobile
Tipo di issue
Bug
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.