From b7e915732433f66f79c1d9eb34272803a5d321d7 Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Wed, 24 Dec 2025 01:55:37 -0500 Subject: [PATCH] Show benchmark apply status in Convert header --- main.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 2e5be4d..5007b8c 100644 --- a/main.go +++ b/main.go @@ -5770,7 +5770,65 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { cmdPreviewBtn.SetText("Show Preview") } - backBar := ui.TintedBar(convertColor, container.NewHBox(back, layout.NewSpacer(), navButtons, layout.NewSpacer(), cmdPreviewBtn, queueBtn)) + var ( + benchmarkStatus *canvas.Text + benchmarkApplyBtn *widget.Button + benchmarkIndicator fyne.CanvasObject + ) + if cfg, err := loadBenchmarkConfig(); err == nil && len(cfg.History) > 0 { + run := cfg.History[0] + encoder := run.RecommendedEncoder + preset := run.RecommendedPreset + benchHW := "none" + switch { + case strings.Contains(encoder, "nvenc"): + benchHW = "nvenc" + case strings.Contains(encoder, "qsv"): + benchHW = "qsv" + case strings.Contains(encoder, "amf"): + benchHW = "amf" + case strings.Contains(encoder, "videotoolbox"): + benchHW = "videotoolbox" + } + applied := friendlyCodecFromPreset(encoder) == state.convert.VideoCodec && + state.convert.EncoderPreset == preset && + state.convert.HardwareAccel == benchHW + + statusColor := utils.MustHex("#FFC857") + statusText := "Benchmark: Not Applied" + if applied { + statusColor = utils.MustHex("#4CE870") + statusText = "Benchmark: Applied" + } + benchmarkStatus = canvas.NewText(statusText, statusColor) + benchmarkStatus.TextStyle = fyne.TextStyle{Monospace: true, Bold: true} + benchmarkStatus.TextSize = 12 + + benchmarkApplyBtn = widget.NewButton("Apply Benchmark", func() { + state.applyBenchmarkRecommendation(encoder, preset) + benchmarkStatus.Text = "Benchmark: Applied" + benchmarkStatus.Color = utils.MustHex("#4CE870") + benchmarkStatus.Refresh() + benchmarkApplyBtn.Disable() + }) + if applied { + benchmarkApplyBtn.Disable() + } else { + benchmarkApplyBtn.Importance = widget.MediumImportance + } + + benchmarkIndicator = container.NewHBox(benchmarkStatus, benchmarkApplyBtn) + } + + backBar := ui.TintedBar(convertColor, container.NewHBox( + back, + layout.NewSpacer(), + navButtons, + layout.NewSpacer(), + benchmarkIndicator, + cmdPreviewBtn, + queueBtn, + )) var updateCover func(string) var coverDisplay *widget.Label