[performance] use faster pixel format matching function (#4271)

Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4271
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
kim 2025-06-14 12:27:53 +02:00 committed by tobi
commit 76e7fd62d2

View file

@ -348,71 +348,109 @@ func generateWebpBlurhash(filepath string) (string, error) {
return blurhash, nil return blurhash, nil
} }
// List of pixel formats that have an alpha layer.
// Derived from the following very messy command:
//
// for res in $(ffprobe -show_entries pixel_format=name:flags=alpha | grep -B1 alpha=1 | grep name); do echo $res | sed 's/name=//g' | sed 's/^/"/g' | sed 's/$/",/g'; done
var alphaPixelFormats = []string{
"pal8",
"argb",
"rgba",
"abgr",
"bgra",
"yuva420p",
"ya8",
"yuva422p",
"yuva444p",
"yuva420p9be",
"yuva420p9le",
"yuva422p9be",
"yuva422p9le",
"yuva444p9be",
"yuva444p9le",
"yuva420p10be",
"yuva420p10le",
"yuva422p10be",
"yuva422p10le",
"yuva444p10be",
"yuva444p10le",
"yuva420p16be",
"yuva420p16le",
"yuva422p16be",
"yuva422p16le",
"yuva444p16be",
"yuva444p16le",
"rgba64be",
"rgba64le",
"bgra64be",
"bgra64le",
"ya16be",
"ya16le",
"gbrap",
"gbrap16be",
"gbrap16le",
"ayuv64le",
"ayuv64be",
"gbrap12be",
"gbrap12le",
"gbrap10be",
"gbrap10le",
"gbrapf32be",
"gbrapf32le",
"yuva422p12be",
"yuva422p12le",
"yuva444p12be",
"yuva444p12le",
}
// containsAlpha returns whether given pixfmt // containsAlpha returns whether given pixfmt
// (i.e. colorspace) contains an alpha channel. // (i.e. colorspace) contains an alpha channel.
//
// generated with: for entry in $(ffprobe.wasm -show_entries pixel_format=name:flags=alpha 2>/dev/null | grep -B1 alpha=1 | sed -n '/name=/{ s|name=||; p }'); do printf '\tcase "%s":\n\t\treturn true\n' "$entry"; done
func containsAlpha(pixfmt string) bool { func containsAlpha(pixfmt string) bool {
if pixfmt == "" { switch pixfmt {
return false case "pal8":
}
for _, checkfmt := range alphaPixelFormats {
if pixfmt == checkfmt {
return true return true
} case "argb":
} return true
case "rgba":
return true
case "abgr":
return true
case "bgra":
return true
case "yuva420p":
return true
case "ya8":
return true
case "yuva422p":
return true
case "yuva444p":
return true
case "yuva420p9be":
return true
case "yuva420p9le":
return true
case "yuva422p9be":
return true
case "yuva422p9le":
return true
case "yuva444p9be":
return true
case "yuva444p9le":
return true
case "yuva420p10be":
return true
case "yuva420p10le":
return true
case "yuva422p10be":
return true
case "yuva422p10le":
return true
case "yuva444p10be":
return true
case "yuva444p10le":
return true
case "yuva420p16be":
return true
case "yuva420p16le":
return true
case "yuva422p16be":
return true
case "yuva422p16le":
return true
case "yuva444p16be":
return true
case "yuva444p16le":
return true
case "rgba64be":
return true
case "rgba64le":
return true
case "bgra64be":
return true
case "bgra64le":
return true
case "ya16be":
return true
case "ya16le":
return true
case "gbrap":
return true
case "gbrap16be":
return true
case "gbrap16le":
return true
case "ayuv64le":
return true
case "ayuv64be":
return true
case "gbrap12be":
return true
case "gbrap12le":
return true
case "gbrap10be":
return true
case "gbrap10le":
return true
case "gbrapf32be":
return true
case "gbrapf32le":
return true
case "yuva422p12be":
return true
case "yuva422p12le":
return true
case "yuva444p12be":
return true
case "yuva444p12le":
return true
default:
return false return false
} }
}