From 1120513309407246f57b236fe08f9d95e7ff53fd Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 15 Apr 2026 16:06:30 +0200 Subject: [PATCH] Switch trigger_capture() : eosremoterelease ne genere FILE_ADDED qu'une fois MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit eosremoterelease='Immediate' envoyait GP_EVENT_FILE_ADDED uniquement pour la 1ere pose (bug Canon/gphoto2 connu). trigger_capture() genere l'evenement pour CHAQUE pose. En liveview actif (miroir deja leve), trigger_capture() ne bouge pas le miroir — uniquement l'obturateur. Timeout reduit 15s -> 12s, poll 500ms -> 200ms (reaction plus rapide). Co-Authored-By: Claude Sonnet 4.6 --- photobooth_pygame.py | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/photobooth_pygame.py b/photobooth_pygame.py index e86704d..b9fc314 100644 --- a/photobooth_pygame.py +++ b/photobooth_pygame.py @@ -784,25 +784,14 @@ class PB: if self.cam is None: raise RuntimeError("camera None") if self.cap_demande: - # Le liveview est déjà actif (capture_preview() tourne en continu) - # → le miroir est DÉJÀ levé, on déclenche uniquement l'obturateur - print("Capture demandée — déclenchement obturateur...") - triggered = False - try: - cfg_c = self.cam.get_config() - rl = cfg_c.get_child_by_name('eosremoterelease') - rl.set_value('Immediate') - self.cam.set_config(cfg_c) - triggered = True - print("eosremoterelease=Immediate OK") - except Exception as ex: - print(f"eosremoterelease indispo ({ex}), trigger_capture fallback") - if not triggered: - self.cam.trigger_capture() + # Le liveview est actif (capture_preview() tourne) → miroir DÉJÀ levé + # trigger_capture() en liveview = obturateur seul, pas de mouvement miroir + print("Capture demandée — trigger_capture...") + self.cam.trigger_capture() ch = None - deadline = time.time() + 15 + deadline = time.time() + 12 while time.time() < deadline: - ev_type, ev_data = self.cam.wait_for_event(500) + ev_type, ev_data = self.cam.wait_for_event(200) if ev_type == gp.GP_EVENT_FILE_ADDED: print(f"Fichier reçu : {ev_data.name}") cf = gp.CameraFile() @@ -810,17 +799,8 @@ class PB: nom = f"photo_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}.jpg" ch = str(PHOTOS_DIR/nom); cf.save(ch) print(f"Photo sauvegardée : {nom}"); break - elif ev_type == gp.GP_EVENT_TIMEOUT: - pass # normal, on continue d'attendre if ch is None: - print("AVERTISSEMENT : aucun fichier reçu dans les 15s") - # Réinitialise le remote release sans toucher au viewfinder - try: - cfg_c = self.cam.get_config() - rl = cfg_c.get_child_by_name('eosremoterelease') - rl.set_value('None') - self.cam.set_config(cfg_c) - except: pass + print("AVERTISSEMENT : aucun fichier reçu dans les 12s") self.cap_result=ch; self.cap_demande=False; self.cap_done.set() errs = 0; post_capture_grace = 8 else: