diff --git a/server/internal/capture/gst/gst.go b/server/internal/capture/gst/gst.go index c3620145..7731d2e7 100644 --- a/server/internal/capture/gst/gst.go +++ b/server/internal/capture/gst/gst.go @@ -31,12 +31,29 @@ var pSerial int32 var pipelines = make(map[int]*Pipeline) var pipelinesLock sync.Mutex var registry *C.GstRegistry +var gMainLoop *C.GMainLoop func init() { C.gst_init(nil, nil) registry = C.gst_registry_get() } +func RunMainLoop() { + if gMainLoop != nil { + return + } + gMainLoop = C.g_main_loop_new(nil, C.int(0)) + C.g_main_loop_run(gMainLoop) +} + +func QuitMainLoop() { + if gMainLoop == nil { + return + } + C.g_main_loop_quit(gMainLoop) + gMainLoop = nil +} + func CreatePipeline(pipelineStr string) (*Pipeline, error) { id := atomic.AddInt32(&pSerial, 1) diff --git a/server/internal/capture/manager.go b/server/internal/capture/manager.go index 014e1a62..00f2d529 100644 --- a/server/internal/capture/manager.go +++ b/server/internal/capture/manager.go @@ -6,6 +6,7 @@ import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "m1k1o/neko/internal/capture/gst" "m1k1o/neko/internal/config" "m1k1o/neko/internal/types" ) @@ -53,6 +54,7 @@ func (manager *CaptureManagerCtx) Start() { } } + go gst.RunMainLoop() go func() { for { before, ok := <-manager.desktop.GetScreenSizeChangeChannel() @@ -100,6 +102,8 @@ func (manager *CaptureManagerCtx) Shutdown() error { manager.audio.shutdown() manager.video.shutdown() + gst.QuitMainLoop() + return nil }