Skip to content

fix: relance auto du décodeur si la lecture reste figée au démarrage - #48

Merged
DZTic merged 3 commits into
mainfrom
fix/playback-stall-watchdog
Jun 21, 2026
Merged

fix: relance auto du décodeur si la lecture reste figée au démarrage#48
DZTic merged 3 commits into
mainfrom
fix/playback-stall-watchdog

Conversation

@DZTic

@DZTic DZTic commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Problème

Après « Lecture » sur un projet, la timeline avançait de quelques dizaines de ms puis se bloquait : Media.Position restait figé à 0 (décodeur WPF coincé). Seule la fermeture/réouverture du projet débloquait la lecture. Bug intermittent.

Cause

  1. PlayFile appelait Media.Play(); Media.Pause(); avant que MediaOpened ne se déclenche — une course pouvant laisser le décodeur dans un état figé.
  2. Aucun mécanisme de récupération une fois le décodeur coincé.

Correctif

  • Suppression du Play()/Pause() prématuré dans PlayFile. La première image reste affichée par OnMediaOpened (média déjà ouvert, état défini).
  • Garde-fou de démarrage : si Media.Position n'avance pas dans les 0,4 s suivant Lecture, on relance le décodeur (re-seek + Play()), jusqu'à 2 fois, puis abandon propre. Se désarme dès que la position progresse → aucun effet en lecture normale.

À valider

Bug intermittent — ouvrir plusieurs projets d'affilée et lancer Lecture à chaque fois. La release publique sera cuttée après confirmation.

🤖 Generated with Claude Code

DZTic and others added 3 commits June 21, 2026 18:33
Symptôme : après « Lecture », la timeline avançait de quelques dizaines de
ms (la seule extrapolation de l'horloge) puis se bloquait ; Media.Position
restait figé à 0 (décodeur WPF coincé). Il fallait fermer/rouvrir le projet.

- Suppression d'une course dans PlayFile : Play()/Pause() étaient appelés
  AVANT MediaOpened, ce qui pouvait laisser le décodeur figé. La première
  image reste gérée par OnMediaOpened (média déjà ouvert).
- Ajout d'un garde-fou de démarrage : si Media.Position n'avance pas dans
  les 0,4 s suivant Lecture, on relance le décodeur (re-seek + Play), jusqu'à
  2 fois, puis on abandonne proprement. Se désarme dès que la lecture avance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
En LoadedBehavior=Manual, fixer Media.Source ne charge PAS le média : sans
commande de lecture, MediaOpened ne se déclenche jamais et le placeholder
reste bloqué sur « Chargement de la vidéo… » (visible en changeant de projet).

Le commit précédent avait retiré Play()/Pause() de PlayFile en pensant à une
course ; c'est en réalité le déclencheur d'ouverture obligatoire. On le
restaure. Le blocage du décodeur au vrai démarrage reste couvert par le
garde-fou CheckPlaybackStall ajouté juste avant.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…her)

Changer Media.Source alors qu'une vidéo est déjà chargée ne redéclenchait
pas MediaOpened : la 2e vidéo restait bloquée sur « Chargement de la vidéo… ».
Media.Stop() ne libère pas le média. On appelle Media.Close() puis on rebranche
la nouvelle source au cycle de dispatcher suivant (DispatcherPriority.Loaded),
le temps que le moteur média ait traité la fermeture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@DZTic
DZTic merged commit 22daeef into main Jun 21, 2026
1 check passed
@DZTic
DZTic deleted the fix/playback-stall-watchdog branch June 21, 2026 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant