add video lifecycle controls

This commit is contained in:
Dmitry Sergeev
2026-08-27 21:59:11 +03:00
parent 461793b181
commit 1571e2700c
2 changed files with 65 additions and 15 deletions
+58 -8
View File
@@ -385,6 +385,7 @@ func main() {
audioStr string = args.AudioFlowId audioStr string = args.AudioFlowId
showStats bool = true showStats bool = true
) )
videoActive := useVideoSlot
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
@@ -481,22 +482,32 @@ func main() {
return fmt.Errorf("reopen: no flow specified") return fmt.Errorf("reopen: no flow specified")
} }
doReconnect := func() { enqueueVideoConfig := func(config playback.FeedConfig) {
if useVideoSlot {
config := playback.FeedConfig{
Domain: domainStr,
UUID: videoStr,
Active: videoStr != "",
}
// GUI is the only sender. Replace an older pending command
select { select {
case <-videoCommands: case <-videoCommands:
default: default:
} }
select { select {
case videoCommands <- config: case videoCommands <- config:
default: default:
} }
}
doReconnect := func() {
if useVideoSlot {
videoActive = videoStr != ""
config := playback.FeedConfig{}
if videoStr != "" {
config = playback.FeedConfig{
Domain: domainStr,
UUID: videoStr,
Active: true,
}
}
enqueueVideoConfig(config)
return return
} }
select { select {
@@ -848,6 +859,45 @@ func main() {
if cimgui.Button("Connect") { if cimgui.Button("Connect") {
doReconnect() doReconnect()
} }
if useVideoSlot && videoActive {
cimgui.SameLine()
if cimgui.Button("Stop video") {
videoActive = false
enqueueVideoConfig(
playback.FeedConfig{
Domain: domainStr,
UUID: videoStr,
Active: false,
})
}
}
if useVideoSlot && !videoActive && videoStr != "" {
cimgui.SameLine()
if cimgui.Button("Resume video") {
videoActive = true
enqueueVideoConfig(playback.FeedConfig{
Domain: domainStr,
UUID: videoStr,
Active: true,
})
}
}
if useVideoSlot && videoStr != "" {
if cimgui.Button("Remove video") {
videoActive = false
videoStr = ""
enqueueVideoConfig(playback.FeedConfig{})
}
}
if useVideoSlot {
if videoActive {
cimgui.Text("Video state: active")
} else if videoStr != "" {
cimgui.Text("Video state: stopped")
} else {
cimgui.Text("Video state: not configured")
}
}
cimgui.End() cimgui.End()
gui.EndFrame() gui.EndFrame()
lastFrame = time.Now() lastFrame = time.Now()
+2 -2
View File
@@ -14,7 +14,7 @@ Size=200,200
Collapsed=0 Collapsed=0
[Window][Connection] [Window][Connection]
Pos=388,158 Pos=421,219
Size=523,141 Size=518,191
Collapsed=0 Collapsed=0