diff --git a/photobooth_pygame.py b/photobooth_pygame.py index a265fd3..e86704d 100644 --- a/photobooth_pygame.py +++ b/photobooth_pygame.py @@ -784,15 +784,9 @@ class PB: if self.cam is None: raise RuntimeError("camera None") if self.cap_demande: - # Avant la prise : activer le viewfinder EOS (miroir levé, liveview ON) - try: - cfg_c = self.cam.get_config() - vf = cfg_c.get_child_by_name('eosviewfinder') - vf.set_value(1) - self.cam.set_config(cfg_c) - time.sleep(0.2) - except: pass - # Déclenchement obturateur seul via eosremoterelease + # 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() @@ -800,8 +794,9 @@ class PB: rl.set_value('Immediate') self.cam.set_config(cfg_c) triggered = True - except Exception: - pass + print("eosremoterelease=Immediate OK") + except Exception as ex: + print(f"eosremoterelease indispo ({ex}), trigger_capture fallback") if not triggered: self.cam.trigger_capture() ch = None @@ -809,32 +804,25 @@ class PB: while time.time() < deadline: ev_type, ev_data = self.cam.wait_for_event(500) if ev_type == gp.GP_EVENT_FILE_ADDED: + print(f"Fichier reçu : {ev_data.name}") cf = gp.CameraFile() self.cam.file_get(ev_data.folder, ev_data.name, gp.GP_FILE_TYPE_NORMAL, cf) nom = f"photo_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}.jpg" - ch = str(PHOTOS_DIR/nom); cf.save(ch); break - # Réinitialise le remote release + 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 - # Relance le viewfinder et laisse le capteur se stabiliser - try: - cfg_c = self.cam.get_config() - vf = cfg_c.get_child_by_name('eosviewfinder') - vf.set_value(1) - self.cam.set_config(cfg_c) - except: pass - time.sleep(1.0) # stabilisation capteur Canon entre deux prises - # Drainer les événements résiduels - for _ in range(8): - try: - self.cam.wait_for_event(50) - except: break self.cap_result=ch; self.cap_demande=False; self.cap_done.set() - errs = 0; post_capture_grace = 10 + errs = 0; post_capture_grace = 8 else: f=self.cam.capture_preview(); data=bytes(f.get_data_and_size()) surf=pygame.image.load(io.BytesIO(data)) @@ -907,10 +895,12 @@ class PB: thumb_h = _PELL_FH if is_pell else 200 # haute résolution en mode pellicule for i in range(nb): - self.num_ph=i; self.etat=S_PREV; time.sleep(2.5) + self.num_ph=i; self.etat=S_PREV; time.sleep(1.5) self.etat=S_COMPTE for c in range(delai,0,-1): self.chiffre=c; time.sleep(1) + print(f"Pose {i+1}/{nb} — déclenchement") self.etat=S_CAP; ch=self._capturer() + print(f"Pose {i+1}/{nb} — résultat : {ch}") if ch: self.photos.append(ch); self.compteur+=1; self._sav_cpt() try: @@ -918,7 +908,11 @@ class PB: self._prev_thumbs.append(pygame.image.fromstring(img.tobytes(), img.size, "RGB")) except: self._prev_thumbs.append(None) - time.sleep(0.4) + else: + self._prev_thumbs.append(None) # placeholder pour garder l'index cohérent + self.etat=S_PREV # repasse en preview pour montrer la vignette + time.sleep(0.6) + print(f"Séquence terminée — {len(self.photos)}/{nb} photos") if not self.photos: self.etat=S_ACCUEIL; return self._upload_booth_bg(self.photos) # upload + QR session en arrière-plan if self.mode=="simple":