Retrait verrou camera et threading : revert approche simple sans deadlock

This commit is contained in:
2026-04-09 02:00:11 +02:00
parent 03102c803e
commit db751ca48c

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._lock = threading.Lock() # Verrou pour eviter acces gphoto2 concurrent
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."""
@@ -147,7 +145,6 @@ class Camera:
def _capture_gphoto2(self, chemin_dest: Path) -> Path | None: def _capture_gphoto2(self, chemin_dest: Path) -> Path | None:
from PIL import Image as PILImage from PIL import Image as PILImage
with self._lock:
for attempt in range(3): for attempt in range(3):
try: try:
chemin_camera = self.camera.capture(gp.GP_CAPTURE_IMAGE) chemin_camera = self.camera.capture(gp.GP_CAPTURE_IMAGE)
@@ -201,10 +198,9 @@ class Camera:
return None # Pas de simulation ni webcam en dehors du mode dedie return None # Pas de simulation ni webcam en dehors du mode dedie
def activer_viewfinder(self): def activer_viewfinder(self):
"""Active le LiveView sur les Canon (nécessaire avant capture_preview).""" """Active le LiveView sur les Canon."""
if self.mode != "gphoto2" or not self.connectee: if self.mode != "gphoto2" or not self.connectee:
return return
with self._lock:
try: try:
cfg = self.camera.get_config() cfg = self.camera.get_config()
vf = cfg.get_child_by_name("viewfinder") vf = cfg.get_child_by_name("viewfinder")
@@ -218,7 +214,6 @@ class Camera:
"""Désactive le LiveView.""" """Désactive le LiveView."""
if self.mode != "gphoto2" or not self.connectee: if self.mode != "gphoto2" or not self.connectee:
return return
with self._lock:
try: try:
cfg = self.camera.get_config() cfg = self.camera.get_config()
vf = cfg.get_child_by_name("viewfinder") vf = cfg.get_child_by_name("viewfinder")
@@ -229,7 +224,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:
with self._lock:
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())