fix: revert -threads 0 and fix mouse move throttler channel race condition

This commit is contained in:
Haitao Pan 2026-06-04 12:53:46 +08:00
parent 55dec269be
commit 014e7b4f99
2 changed files with 14 additions and 20 deletions

View File

@ -33,8 +33,9 @@ type XdotoolInjector struct {
height int
isStarted bool
moveChan chan InputEvent
stopChan chan struct{}
moveMu sync.Mutex
pendingMove *InputEvent
stopChan chan struct{}
}
func NewXdotoolInjector(display string) *XdotoolInjector {
@ -45,7 +46,6 @@ func NewXdotoolInjector(display string) *XdotoolInjector {
display: display,
width: 1280, // Default fallbacks
height: 720,
moveChan: make(chan InputEvent, 1),
}
}
@ -107,14 +107,9 @@ func (xi *XdotoolInjector) Inject(event InputEvent) error {
switch event.Type {
case "mouse_move":
select {
case <-xi.moveChan:
default:
}
select {
case xi.moveChan <- event:
default:
}
xi.moveMu.Lock()
xi.pendingMove = &event
xi.moveMu.Unlock()
return nil
case "mouse_down":
@ -191,27 +186,27 @@ func (xi *XdotoolInjector) mouseMoveWorker() {
ticker := time.NewTicker(16 * time.Millisecond) // ~60fps
defer ticker.Stop()
var lastEvent *InputEvent
for {
select {
case <-xi.stopChan:
return
case event := <-xi.moveChan:
lastEvent = &event
case <-ticker.C:
if lastEvent != nil {
xi.moveMu.Lock()
event := xi.pendingMove
xi.pendingMove = nil
xi.moveMu.Unlock()
if event != nil {
xi.mu.Lock()
if xi.isStarted && xi.stdin != nil {
absX := int(lastEvent.X * float64(xi.width))
absY := int(lastEvent.Y * float64(xi.height))
absX := int(event.X * float64(xi.width))
absY := int(event.Y * float64(xi.height))
cmdStr := fmt.Sprintf("mousemove %d %d\n", absX, absY)
if _, err := xi.stdin.Write([]byte(cmdStr)); err != nil {
log.Printf("xdotool mousemove write error: %v", err)
}
}
xi.mu.Unlock()
lastEvent = nil
}
}
}

View File

@ -229,7 +229,6 @@ func (pm *PipelineManager) buildFFmpeg(cfg PipelineConfig) (string, []string, er
"-c:v", "libx264",
"-preset", "ultrafast",
"-tune", "zerolatency",
"-threads", "0",
"-g", "30",
)
}