Suppression preview pendant capture : plus de conflit gphoto2, capture propre

This commit is contained in:
2026-04-09 11:25:17 +02:00
parent a3c7d6e4e4
commit 19d1998704
2 changed files with 3 additions and 14 deletions

View File

@@ -1,7 +1,6 @@
import io import io
import logging import logging
import subprocess import subprocess
import threading
import time import time
from datetime import datetime from datetime import datetime
@@ -67,7 +66,6 @@ class Camera:
self.webcam = None self.webcam = None
self.webcam_index = -1 self.webcam_index = -1
self.preview_dslr_ok = True # True si le dernier preview DSLR a reussi 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: def connecter(self, source=None) -> bool:
"""Connecte la camera. source: 'gphoto2', 'webcam:0', 'webcam:2', etc.""" """Connecte la camera. source: 'gphoto2', 'webcam:0', 'webcam:2', etc."""
@@ -225,8 +223,6 @@ class Camera:
log.warning(f"Viewfinder non supporté : {e}") log.warning(f"Viewfinder non supporté : {e}")
def _preview_gphoto2(self) -> bytes | None: def _preview_gphoto2(self) -> bytes | None:
if not self._gp_lock.acquire(blocking=False):
return None # Capture en cours, on saute ce frame
try: try:
fichier = self.camera.capture_preview() fichier = self.camera.capture_preview()
donnees = bytes(fichier.get_data_and_size()) donnees = bytes(fichier.get_data_and_size())
@@ -241,8 +237,6 @@ class Camera:
except gp.GPhoto2Error as e: except gp.GPhoto2Error as e:
log.error(f"Erreur preview DSLR : {e}") log.error(f"Erreur preview DSLR : {e}")
return None return None
finally:
self._gp_lock.release()
def _preview_webcam(self) -> bytes | None: def _preview_webcam(self) -> bytes | None:
if not self.webcam or not self.webcam.isOpened(): if not self.webcam or not self.webcam.isOpened():

View File

@@ -107,22 +107,17 @@ async function lancerCapture() {
const compteurEl = document.getElementById('capture-compteur'); const compteurEl = document.getElementById('capture-compteur');
for (let i = 0; i < nbPhotos; i++) { for (let i = 0; i < nbPhotos; i++) {
lancerPreview();
await pause(500);
if (nbPhotos > 1) { if (nbPhotos > 1) {
compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`; compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`;
} }
// Lancer la capture en parallele du compte a rebours // Compte a rebours SANS preview (libere la camera)
const promesseCapture = apiPost('/api/capturer').catch(() => null);
await compteARebours(); await compteARebours();
arreterPreview();
afficherFlash(); 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 resultat = await promesseCapture;
let erreurReseau = false; let erreurReseau = false;