diff --git a/backend/camera.py b/backend/camera.py index 8e651e5..e23c65e 100644 --- a/backend/camera.py +++ b/backend/camera.py @@ -1,7 +1,6 @@ import io import logging import subprocess -import threading import time from datetime import datetime @@ -67,7 +66,6 @@ class Camera: self.webcam = None self.webcam_index = -1 self.preview_dslr_ok = True # True si le dernier preview DSLR a reussi - self._gp_lock = threading.Lock() # Un seul appel gphoto2 a la fois def connecter(self, source=None) -> bool: """Connecte la camera. source: 'gphoto2', 'webcam:0', 'webcam:2', etc.""" @@ -225,8 +223,6 @@ class Camera: log.warning(f"Viewfinder non supporté : {e}") def _preview_gphoto2(self) -> bytes | None: - if not self._gp_lock.acquire(blocking=False): - return None # Capture en cours, on saute ce frame try: fichier = self.camera.capture_preview() donnees = bytes(fichier.get_data_and_size()) @@ -241,8 +237,6 @@ class Camera: except gp.GPhoto2Error as e: log.error(f"Erreur preview DSLR : {e}") return None - finally: - self._gp_lock.release() def _preview_webcam(self) -> bytes | None: if not self.webcam or not self.webcam.isOpened(): diff --git a/frontend/js/camera.js b/frontend/js/camera.js index 499bcd5..97af382 100644 --- a/frontend/js/camera.js +++ b/frontend/js/camera.js @@ -107,22 +107,17 @@ async function lancerCapture() { const compteurEl = document.getElementById('capture-compteur'); for (let i = 0; i < nbPhotos; i++) { - lancerPreview(); - await pause(500); - if (nbPhotos > 1) { compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`; } - // Lancer la capture en parallele du compte a rebours - const promesseCapture = apiPost('/api/capturer').catch(() => null); - + // Compte a rebours SANS preview (libere la camera) await compteARebours(); - arreterPreview(); afficherFlash(); - // Attendre la capture (devrait deja etre terminee) + // Preview arrete -> capture propre sans conflit gphoto2 + const promesseCapture = apiPost('/api/capturer').catch(() => null); let resultat = await promesseCapture; let erreurReseau = false;