diff --git a/main.go b/main.go index 8a54de7..c9788a6 100644 --- a/main.go +++ b/main.go @@ -74,6 +74,7 @@ type WD14Caption struct { var ( config *Config httpClient = &http.Client{} + videoSem = make(chan struct{}, 1) ) func loadConfig() (*Config, error) { @@ -294,6 +295,11 @@ func handleImage(w http.ResponseWriter, data []byte, fileName, contentType, thre } func handleVideo(w http.ResponseWriter, data []byte, fileName, threshold string) { + slog.Info("waiting for video processing slot", "queued", len(videoSem)) + videoSem <- struct{}{} + defer func() { <-videoSem }() + slog.Info("acquired video processing slot") + // Write video to temp file ext := filepath.Ext(fileName) tmpFile, err := os.CreateTemp("", "glimbus-video-*"+ext) diff --git a/video.go b/video.go index 92fc49e..5b51ff9 100644 --- a/video.go +++ b/video.go @@ -198,14 +198,14 @@ func getFrameSkipSeconds(totalSeconds int) int { case totalSeconds <= 60: return 5 case totalSeconds <= 120: - return 10 + return 7 case totalSeconds <= 300: - return 12 + return 10 case totalSeconds <= 1000: return 15 case totalSeconds <= 1200: - return 40 + return 20 default: - return 60 + return 26 } }