From 819a8a9c8327a33aa1310aa45de1570f11ab065d Mon Sep 17 00:00:00 2001 From: Dmitry Sergeev Date: Sun, 23 Aug 2026 23:49:29 +0300 Subject: [PATCH] CLI parse args, step 1 --- cmd/mxl-player/main.go | 57 ++++++++++++++++++++++++++++++++++++++++++ fixes.md | 6 +++++ go.mod | 2 ++ go.sum | 2 ++ 4 files changed, 67 insertions(+) diff --git a/cmd/mxl-player/main.go b/cmd/mxl-player/main.go index eca8a0b..d804cf0 100644 --- a/cmd/mxl-player/main.go +++ b/cmd/mxl-player/main.go @@ -15,6 +15,7 @@ import ( vk "github.com/christerso/vulkan-go/vk" "github.com/qvest-digital/go-mxl/mxl" + pflag "github.com/spf13/pflag" ) const ( @@ -24,9 +25,65 @@ const ( WIN_HEIGHT int32 = 720 ) +type CliArgs struct { + ShowHelp bool + Domain string + VideoFlowId string + AudioFlowId string + IsFullscreen bool + PlaybackId uint32 + GpuId uint32 + IsVerbose bool + ListAudio bool + ListGPU bool +} + +func printCliHelp(fs *pflag.FlagSet) { + fmt.Printf("%s %s\n", APP_NAME, APP_VER) + fmt.Println("Usage: mxl-player -d (-v | -a ) [-f] [-h]...") + fmt.Println(" [-g ] [-p ] [--verbose]") + fmt.Println(" or: mxl-player [--list-playback] [--list-gpu]") + fmt.Println(" or: mxl-player (and set everything in GUI)") + fmt.Println() + fs.PrintDefaults() +} + func main() { + // CLI args TODO: + // help + sample of good usage + // domain (-d, --domain) + // video flow UUID (-v, --video) + // audio flow UUID (-a, --audio) + // list-audio for list audio playback devices (-la, --list-playback) + // list-video fpr list video playback devices (-lg, --list-gpu) + // gpu-id for GPU selection (-p, --playback-id) + // playback-id for playback id selection (-g, --gpu-id) + // verbose flag, which turn on logs (-vb,--verbose) + // // video: 5fbec3b1-1b0f-417d-9059-8b94a47197ed // audio: 5fbec3b1-1b0f-417d-9059-8b94a47197ec + + var args CliArgs + flagSet := pflag.NewFlagSet(APP_NAME, pflag.ExitOnError) + flagSet.BoolVarP(&args.ShowHelp, "help", "h", false, "Show help message and exit") + flagSet.StringVarP(&args.Domain, "domain", "d", "", "MXL domain directory") + flagSet.StringVarP(&args.VideoFlowId, "video", "v", "", "Video flow UUID") + flagSet.StringVarP(&args.AudioFlowId, "audio", "a", "", "Audio flow UUID") + flagSet.BoolVarP(&args.IsFullscreen, "fullscreen", "f", false, "Run app in fullscreen mode") + flagSet.Uint32VarP(&args.GpuId, "gpu-id", "g", 0, "GPU id") + flagSet.Uint32VarP(&args.PlaybackId, "playback-id", "p", 0, "Playback audio device id") + flagSet.BoolVar(&args.IsVerbose, "verbose", false, "Verbose output") + flagSet.BoolVar(&args.ListAudio, "list-playback", false, "List audio playback devices and exit") + flagSet.BoolVar(&args.ListGPU, "list-gpu", false, "List GPU's and exit") + pflag.Parse() + + if args.Domain == "" || args.ShowHelp { + // TODO. Fix after polishing GUI + // Cause required/optional will be changed + printCliHelp(flagSet) + } + return + var videoFlowId, audioFlowId string mxlDomain := flag.String("d", "/dev/shm/mxl", "MXL domain") mxlVideoFlowID := flag.String("v", videoFlowId, "MXL video flow UUID") diff --git a/fixes.md b/fixes.md index 858ea80..9f53079 100644 --- a/fixes.md +++ b/fixes.md @@ -5,4 +5,10 @@ - hotkeys on keyDown, especially toggle keys. Way to recreate: press F and hold ## TODO: +- CLI option to run fullscreen +- fabrics bridge reader. Step by step. Start with local +- basic UI: stats, fields for domain, flow ids, label, etc. +- snapshot +- waveform, vectorscope +- some image, when audio only - q for quit diff --git a/go.mod b/go.mod index a1a1008..173a52b 100644 --- a/go.mod +++ b/go.mod @@ -8,3 +8,5 @@ require ( ) require github.com/qvest-digital/go-mxl v1.1.0-rc.1 + +require github.com/spf13/pflag v1.0.10 // indirect diff --git a/go.sum b/go.sum index 971176c..db4e0ae 100644 --- a/go.sum +++ b/go.sum @@ -4,3 +4,5 @@ github.com/ebitengine/purego v0.10.2 h1:W809HbnvzAxgdm+aOvlSekrM16wGCdT/e76+9tS7 github.com/ebitengine/purego v0.10.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/qvest-digital/go-mxl v1.1.0-rc.1 h1:CUg29Q5c/JA6pqyA5gP3vu7JBr8lRXbOOxC+r0W572s= github.com/qvest-digital/go-mxl v1.1.0-rc.1/go.mod h1:cYzyT+S/AONytsKr/DozzFQP2OrNrg/JsQOSjvwn+Rk= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=