Fix saccades LV + distorsion pellicule + draw_capture plein ecran

- Supprime sleep(0.3) apres chaque capture_preview() reussi
  (limitait le live view a ~3fps, cause principale des saccades)
- Fixe crash silencieux thread camera : _nb_retry non initialise
  pour errs 1-4 (NameError) -> restructure en for/else propre
- Pellicule live view : _pfit() au lieu de transform.scale() -> plus de distorsion
- draw_capture() : mode pellicule affiché au lieu de fullscreen black

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-15 11:15:46 +02:00
parent 9c57c8f5f2
commit 529cb41581

View File

@@ -828,25 +828,22 @@ class PB:
if self.cam: self.cam.exit() if self.cam: self.cam.exit()
except: pass except: pass
self.cam = None; errs = 0 self.cam = None; errs = 0
_nb_retry = 0 for _nb_retry in range(10):
while _nb_retry < 10: time.sleep(3)
_nb_retry += 1 _usb_reset_done()
time.sleep(3) try:
_usb_reset_done() c = gp.Camera(); c.init()
try: self.cam = c; self.prev_actif = True
c = gp.Camera(); c.init() print("Caméra reconnectée automatiquement")
self.cam = c; self.prev_actif = True break
print("Caméra reconnectée automatiquement") except Exception as re:
break print(f"Reconnexion échouée ({_nb_retry+1}): {re}")
except Exception as re: else:
print(f"Reconnexion échouée ({_nb_retry}): {re}") # 10 tentatives échouées → bascule en simulation
self.sim = True
print("Caméra introuvable → mode simulation")
else: else:
# 10 tentatives échouées → bascule en simulation time.sleep(0.1)
self.sim = True
print("Caméra introuvable → mode simulation")
errs = 0
else:
time.sleep(0.3)
else: else:
time.sleep(0.05) time.sleep(0.05)
@@ -1249,7 +1246,7 @@ class PB:
else: else:
with self.flock: with self.flock:
if self.frame: if self.frame:
lv = pygame.transform.scale(self.frame, (fw, fh)) lv = _pfit(self.frame, fw, fh)
self.scr.blit(lv, (fx, fy)) self.scr.blit(lv, (fx, fy))
else: else:
pygame.draw.rect(self.scr, (25, 25, 25), (fx, fy, fw, fh)) pygame.draw.rect(self.scr, (25, 25, 25), (fx, fy, fw, fh))
@@ -1354,7 +1351,11 @@ class PB:
self.scr.blit(info,(W//2-info.get_width()//2,H-90)) self.scr.blit(info,(W//2-info.get_width()//2,H-90))
def draw_capture(self): def draw_capture(self):
self._lv(); self._overlay(90) if self._is_pell():
self._draw_pellicule(show_live=False)
self._overlay(70)
else:
self._lv(); self._overlay(90)
s=self._txt("Prise de vue...","md"); self._c(s,H//2-s.get_height()//2) s=self._txt("Prise de vue...","md"); self._c(s,H//2-s.get_height()//2)
# ── Galerie ─────────────────────────────────────────────────────────────── # ── Galerie ───────────────────────────────────────────────────────────────