Render frame immediately on step seek

This commit is contained in:
Stu Leak 2026-01-10 03:18:42 -05:00
parent 407269b6c7
commit 2debc079fc

42
main.go
View File

@ -11356,13 +11356,17 @@ func (p *playSession) Seek(offset float64) {
// Positive delta moves forward, negative moves backward.
func (p *playSession) StepFrame(delta int) {
p.mu.Lock()
defer p.mu.Unlock()
if p.fps <= 0 {
p.mu.Unlock()
return
}
gstPlayer := p.gstPlayer
if gstPlayer == nil {
p.mu.Unlock()
logging.Error(logging.CatPlayer, "playSession: GStreamer player not available")
return
}
// Use GStreamer player
if p.gstPlayer != nil {
currentFrame := int(p.current * p.fps)
targetFrame := currentFrame + delta
@ -11376,22 +11380,36 @@ func (p *playSession) StepFrame(delta int) {
}
// Seek to target frame
p.gstPlayer.SeekToFrame(int64(targetFrame))
_ = gstPlayer.SeekToFrame(int64(targetFrame))
p.current = float64(targetFrame) / p.fps
p.paused = true
p.frameN = targetFrame
if p.frameFunc != nil {
p.frameFunc(targetFrame)
prog := p.prog
frameFunc := p.frameFunc
img := p.img
p.mu.Unlock()
if frameFunc != nil {
frameFunc(targetFrame)
}
if p.prog != nil {
p.prog(p.current)
}
logging.Debug(logging.CatPlayer, "playSession: StepFrame delta=%d to frame %d", delta, targetFrame)
return
if prog != nil {
prog(p.current)
}
logging.Error(logging.CatPlayer, "playSession: GStreamer player not available")
frame, err := gstPlayer.GetFrameImage()
if err == nil && frame != nil {
fyne.CurrentApp().Driver().DoFromGoroutine(func() {
if img != nil {
img.Resource = nil
img.File = ""
img.Image = frame
img.Refresh()
}
}, false)
}
logging.Debug(logging.CatPlayer, "playSession: StepFrame delta=%d to frame %d", delta, targetFrame)
}
// frameDisplayLoop continuously pulls frames from GStreamer and updates the UI