Suppression preview pendant capture : plus de conflit gphoto2, capture propre
This commit is contained in:
@@ -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._gp_lock = threading.Lock() # Un seul appel gphoto2 a la fois
|
|
||||||
|
|
||||||
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."""
|
||||||
@@ -225,8 +223,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:
|
||||||
if not self._gp_lock.acquire(blocking=False):
|
|
||||||
return None # Capture en cours, on saute ce frame
|
|
||||||
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())
|
||||||
@@ -241,8 +237,6 @@ class Camera:
|
|||||||
except gp.GPhoto2Error as e:
|
except gp.GPhoto2Error as e:
|
||||||
log.error(f"Erreur preview DSLR : {e}")
|
log.error(f"Erreur preview DSLR : {e}")
|
||||||
return None
|
return None
|
||||||
finally:
|
|
||||||
self._gp_lock.release()
|
|
||||||
|
|
||||||
def _preview_webcam(self) -> bytes | None:
|
def _preview_webcam(self) -> bytes | None:
|
||||||
if not self.webcam or not self.webcam.isOpened():
|
if not self.webcam or not self.webcam.isOpened():
|
||||||
|
|||||||
@@ -107,22 +107,17 @@ async function lancerCapture() {
|
|||||||
const compteurEl = document.getElementById('capture-compteur');
|
const compteurEl = document.getElementById('capture-compteur');
|
||||||
|
|
||||||
for (let i = 0; i < nbPhotos; i++) {
|
for (let i = 0; i < nbPhotos; i++) {
|
||||||
lancerPreview();
|
|
||||||
await pause(500);
|
|
||||||
|
|
||||||
if (nbPhotos > 1) {
|
if (nbPhotos > 1) {
|
||||||
compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`;
|
compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lancer la capture en parallele du compte a rebours
|
// Compte a rebours SANS preview (libere la camera)
|
||||||
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
|
||||||
|
|
||||||
await compteARebours();
|
await compteARebours();
|
||||||
|
|
||||||
arreterPreview();
|
|
||||||
afficherFlash();
|
afficherFlash();
|
||||||
|
|
||||||
// Attendre la capture (devrait deja etre terminee)
|
// Preview arrete -> capture propre sans conflit gphoto2
|
||||||
|
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
||||||
let resultat = await promesseCapture;
|
let resultat = await promesseCapture;
|
||||||
let erreurReseau = false;
|
let erreurReseau = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user