Switch trigger_capture() : eosremoterelease ne genere FILE_ADDED qu'une fois
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 <noreply@anthropic.com>
This commit is contained in:
@@ -784,25 +784,14 @@ class PB:
|
|||||||
if self.cam is None:
|
if self.cam is None:
|
||||||
raise RuntimeError("camera None")
|
raise RuntimeError("camera None")
|
||||||
if self.cap_demande:
|
if self.cap_demande:
|
||||||
# Le liveview est déjà actif (capture_preview() tourne en continu)
|
# Le liveview est actif (capture_preview() tourne) → miroir DÉJÀ levé
|
||||||
# → le miroir est DÉJÀ levé, on déclenche uniquement l'obturateur
|
# trigger_capture() en liveview = obturateur seul, pas de mouvement miroir
|
||||||
print("Capture demandée — déclenchement obturateur...")
|
print("Capture demandée — trigger_capture...")
|
||||||
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()
|
self.cam.trigger_capture()
|
||||||
ch = None
|
ch = None
|
||||||
deadline = time.time() + 15
|
deadline = time.time() + 12
|
||||||
while time.time() < deadline:
|
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:
|
if ev_type == gp.GP_EVENT_FILE_ADDED:
|
||||||
print(f"Fichier reçu : {ev_data.name}")
|
print(f"Fichier reçu : {ev_data.name}")
|
||||||
cf = gp.CameraFile()
|
cf = gp.CameraFile()
|
||||||
@@ -810,17 +799,8 @@ class PB:
|
|||||||
nom = f"photo_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}.jpg"
|
nom = f"photo_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}.jpg"
|
||||||
ch = str(PHOTOS_DIR/nom); cf.save(ch)
|
ch = str(PHOTOS_DIR/nom); cf.save(ch)
|
||||||
print(f"Photo sauvegardée : {nom}"); break
|
print(f"Photo sauvegardée : {nom}"); break
|
||||||
elif ev_type == gp.GP_EVENT_TIMEOUT:
|
|
||||||
pass # normal, on continue d'attendre
|
|
||||||
if ch is None:
|
if ch is None:
|
||||||
print("AVERTISSEMENT : aucun fichier reçu dans les 15s")
|
print("AVERTISSEMENT : aucun fichier reçu dans les 12s")
|
||||||
# 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
|
|
||||||
self.cap_result=ch; self.cap_demande=False; self.cap_done.set()
|
self.cap_result=ch; self.cap_demande=False; self.cap_done.set()
|
||||||
errs = 0; post_capture_grace = 8
|
errs = 0; post_capture_grace = 8
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user