package video import "sort" type PatternInfo struct { Name string Description string } type pattern struct { PatternInfo kernelPath string } var patterns = map[string]pattern{ "ebu75": { PatternInfo: PatternInfo{Name: "ebu75", Description: "EBU 75% Color Bar Signal"}, kernelPath: "kernels/static/ebu75.wgsl", }, "ebu75-move": { PatternInfo: PatternInfo{Name: "ebu75-move", Description: "EBU 75% Color Bar Signal with moving square"}, kernelPath: "kernels/dynamic/ebu75.wgsl", }, "ebu100": { PatternInfo: PatternInfo{Name: "ebu100", Description: "EBU 100% Color Bar Signal"}, kernelPath: "kernels/static/ebu100.wgsl", }, "ebu100-move": { PatternInfo: PatternInfo{Name: "ebu100-move", Description: "EBU 100% Color Bar Signal with moving square"}, kernelPath: "kernels/dynamic/ebu100.wgsl", }, "smpte": { PatternInfo: PatternInfo{Name: "smpte", Description: "SMPTE RP-219 Color Bar Signal"}, kernelPath: "kernels/static/smpteBars.wgsl", }, "smpte-move": { PatternInfo: PatternInfo{Name: "smpte-move", Description: "SMPTE RP-219 Color Bar Signal with moving square"}, kernelPath: "kernels/dynamic/smpteBars.wgsl", }, "gray-bars": { PatternInfo: PatternInfo{Name: "gray-bars", Description: "13-step grayscale bars (Y 64..940)"}, kernelPath: "kernels/static/yBars.wgsl", }, "gray-bars-move": { PatternInfo: PatternInfo{Name: "gray-bars-move", Description: "13-step grayscale bars (Y 64..940) with moving square"}, kernelPath: "kernels/dynamic/yBars.wgsl", }, "gray-ramp": { PatternInfo: PatternInfo{Name: "gray-ramp", Description: "Y gradient (black -> 100% white)"}, kernelPath: "kernels/static/yRamp.wgsl", }, "gray-ramp-move": { PatternInfo: PatternInfo{Name: "gray-ramp-move", Description: "Y gradient with moving square"}, kernelPath: "kernels/dynamic/yRamp.wgsl", }, } func HasPattern(name string) bool { _, ok := patterns[name] return ok } func Patterns() []PatternInfo { result := make([]PatternInfo, 0, len(patterns)) for _, pattern := range patterns { result = append(result, pattern.PatternInfo) } sort.Slice(result, func(i, j int) bool { return result[i].Name < result[j].Name }) return result }