From 2dd1ccf809daddba40d69426b2e03b18d8f8f11c Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:19:24 +0000 Subject: [PATCH 1/6] chore(deps): upgrade Go from 1.24.0 to 1.26.1 - Update go.mod to Go 1.26.1 - Update flake.nix to use go_1_26 package Signed-off-by: Martin Wimpress --- flake.nix | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 925574f..b9749bd 100644 --- a/flake.nix +++ b/flake.nix @@ -34,7 +34,7 @@ gcc git-filter-repo gnumake - go + go_1_26 gperf just meson diff --git a/go.mod b/go.mod index a34a167..dd203d8 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/linuxmatters/ffmpeg-statigo -go 1.24.0 +go 1.26.1 require ( github.com/Newbluecake/bootstrap v0.17.1 From ded12f3090d69392b7387ff2efc6289cc9e61b76 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:21:32 +0000 Subject: [PATCH 2/6] chore(deps): update dependency versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dav1d: 1.5.2 → 1.5.3 - libdrm: 2.4.129 → 2.4.131 - libiconv: 1.18 → 1.19 - libsrt: 1.5.5-rc.0a → 1.5.5-rc.1 - libva: 2.22.0 → 2.23.0 - libvpl: 2.15.0 → 2.16.0 - libvpx: 1.15.2 → 1.16.0 - libxml2: 2.15.1 → 2.15.2 - nv-codec-headers: 12.2.72.0 → 13.0.19.0 - openssl: 3.6.0 → 3.6.1 - opus: 1.5.2 → 1.6.1 - Vulkan-Headers: 1.4.335 → 1.4.345 - vvenc: 1.13.1 → 1.14.0 - zlib: 1.3.1 → 1.3.2 Signed-off-by: Martin Wimpress --- README.md | 26 +++++++++++++------------- internal/builder/libraries.go | 28 ++++++++++++++-------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index a6da28a..3c522aa 100644 --- a/README.md +++ b/README.md @@ -84,26 +84,26 @@ If you need complete FFmpeg with all filters, use the official FFmpeg distributi | Library | Version | Description | |------------------|-------------|------------------------------------------------------------------------------------| | FFmpeg | 8.0.1 | A complete, cross-platform solution to record, convert and stream audio and video | -| dav1d | 1.5.2 | AV1 cross-platform decoder, open-source, and focused on speed, size and correctness| +| dav1d | 1.5.3 | AV1 cross-platform decoder, open-source, and focused on speed, size and correctness| | glslang | 15.4.0 | Khronos-reference front end for GLSL/ESSL and a SPIR-V generator | -| libdrm | 2.4.129 | Direct Rendering Manager library and headers (*Linux only*) | -| libiconv | 1.18 | A character set conversion library (*macOS only*) | -| libsrt | 1.5.5-rc.0a | A transport protocol for ultra low latency live video and audio streaming | -| libva | 2.22.0 | An implementation for VA-API (Video Acceleration API) (*Linux only*) | -| libvpl | 2.15.0 | Intel Video Processing Library (Intel VPL) API (*Linux only*) | -| libvpx | 1.15.2 | High-quality, open video format for the web that's freely available to everyone | +| libdrm | 2.4.131 | Direct Rendering Manager library and headers (*Linux only*) | +| libiconv | 1.19 | A character set conversion library (*macOS only*) | +| libsrt | 1.5.5-rc.1 | A transport protocol for ultra low latency live video and audio streaming | +| libva | 2.23.0 | An implementation for VA-API (Video Acceleration API) (*Linux only*) | +| libvpl | 2.16.0 | Intel Video Processing Library (Intel VPL) API (*Linux only*) | +| libvpx | 1.16.0 | High-quality, open video format for the web that's freely available to everyone | | libwebp | 1.6.0 | A modern image format providing superior lossless and lossy compression | -| libxml2 | 2.15.1 | An XML parser and toolkit implemented in C | +| libxml2 | 2.15.2 | An XML parser and toolkit implemented in C | | mp3lame | 3.100 | A high quality MPEG Audio Layer III (MP3) encoder | -| nv-codec-headers | 12.2.72.0 | Headers required to interface with Nvidias codec APIs (*Linux only*) | -| openssl | 3.6.0 | Open Source Toolkit for the TLS, DTLS, and QUIC protocols. | -| opus | 1.5.2 | A totally open, royalty-free, highly versatile audio codec | +| nv-codec-headers | 13.0.19.0 | Headers required to interface with Nvidias codec APIs (*Linux only*) | +| openssl | 3.6.1 | Open Source Toolkit for the TLS, DTLS, and QUIC protocols. | +| opus | 1.6.1 | A totally open, royalty-free, highly versatile audio codec | | rav1e | 0.8.1 | The fastest and safest AV1 encoder. | -| Vulkan-Headers | 1.4.335 | Vulkan header files and API registry | +| Vulkan-Headers | 1.4.345 | Vulkan header files and API registry | | x264 | head | H.264/MPEG-4 AVC compression format library for encoding video streams | | x265 | head | H.265/MPEG-H HEVC compression format library for encoding video streams | | zimg | 3.0.6 | Scaling, colorspace conversion, and dithering library | -| zlib | 1.3.1 | A Massively Spiffy Yet Delicately Unobtrusive Compression Library | +| zlib | 1.3.2 | A Massively Spiffy Yet Delicately Unobtrusive Compression Library | VVenC 1.13.1 (Fraunhofer Versatile Video Encoder, a fast & efficient software H.266/VVC encoder) is in the build configuration, **but currently disabled**, as it adds ~25MB to the static ffmpeg library and is too slow for practical use. diff --git a/internal/builder/libraries.go b/internal/builder/libraries.go index 37dab40..bdf377e 100644 --- a/internal/builder/libraries.go +++ b/internal/builder/libraries.go @@ -162,7 +162,7 @@ func buildLibraryOrder() []*Library { // zlib - compression library var zlib = &Library{ Name: "zlib", - URL: "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz", + URL: "https://github.com/madler/zlib/releases/download/v1.3.2/zlib-1.3.2.tar.gz", FFmpegEnables: []string{"zlib"}, BuildSystem: &AutoconfBuild{}, SkipAutoFlags: true, // zlib has a custom configure script that rejects CFLAGS/LDFLAGS @@ -177,7 +177,7 @@ var zlib = &Library{ // libiconv - character encoding conversion (macOS only) var libiconv = &Library{ Name: "libiconv", - URL: "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.18.tar.gz", + URL: "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.19.tar.gz", Platform: []string{"darwin"}, BuildSystem: &AutoconfBuild{}, ConfigureArgs: func(os string) []string { @@ -194,7 +194,7 @@ var libiconv = &Library{ // libxml2 - XML parsing library var libxml2 = &Library{ Name: "libxml2", - URL: "https://download.gnome.org/sources/libxml2/2.15/libxml2-2.15.1.tar.xz", + URL: "https://download.gnome.org/sources/libxml2/2.15/libxml2-2.15.2.tar.xz", FFmpegEnables: []string{"libxml2"}, BuildSystem: &AutoconfBuild{}, ConfigureArgs: func(os string) []string { @@ -218,7 +218,7 @@ var libxml2 = &Library{ // nvcodecheaders - NVIDIA codec SDK headers (Linux only) var nvcodecheaders = &Library{ Name: "nv-codec-headers", - URL: "https://github.com/FFmpeg/nv-codec-headers/releases/download/n12.2.72.0/nv-codec-headers-12.2.72.0.tar.gz", + URL: "https://github.com/FFmpeg/nv-codec-headers/releases/download/n13.0.19.0/nv-codec-headers-13.0.19.0.tar.gz", Platform: []string{"linux"}, FFmpegEnables: []string{"cuvid", "ffnvcodec", "nvdec", "nvenc"}, BuildSystem: &MakefileBuild{ @@ -233,7 +233,7 @@ var nvcodecheaders = &Library{ // vulkanheaders - Vulkan API headers (cross-platform) var vulkanheaders = &Library{ Name: "Vulkan-Headers", - URL: "https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v1.4.335.tar.gz", + URL: "https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v1.4.345.tar.gz", FFmpegEnables: []string{"vulkan"}, BuildSystem: &CMakeBuild{}, ConfigureArgs: func(os string) []string { @@ -293,7 +293,7 @@ var glslang = &Library{ // libdrm - Direct Rendering Manager library (Linux only, required by libva) var libdrm = &Library{ Name: "libdrm", - URL: "https://gitlab.freedesktop.org/mesa/drm/-/archive/libdrm-2.4.129/drm-libdrm-2.4.129.tar.gz", + URL: "https://gitlab.freedesktop.org/mesa/drm/-/archive/libdrm-2.4.131/drm-libdrm-2.4.131.tar.gz", Platform: []string{"linux"}, BuildSystem: &MesonBuild{}, ConfigureArgs: func(os string) []string { @@ -324,7 +324,7 @@ var libdrm = &Library{ // libva - Video Acceleration API (Linux only, provides VA-API backend for QSV) var libva = &Library{ Name: "libva", - URL: "https://github.com/intel/libva/releases/download/2.22.0/libva-2.22.0.tar.bz2", + URL: "https://github.com/intel/libva/releases/download/2.23.0/libva-2.23.0.tar.bz2", Platform: []string{"linux"}, Dependencies: []*Library{libdrm}, FFmpegEnables: []string{"vaapi"}, @@ -364,7 +364,7 @@ var libva = &Library{ // libvpl - Intel VPL/oneVPL headers (Linux only, for QuickSync) var libvpl = &Library{ Name: "libvpl", - URL: "https://github.com/intel/libvpl/archive/refs/tags/v2.15.0.tar.gz", + URL: "https://github.com/intel/libvpl/archive/refs/tags/v2.16.0.tar.gz", Platform: []string{"linux"}, FFmpegEnables: []string{"libvpl"}, BuildSystem: &CMakeBuild{}, @@ -488,7 +488,7 @@ var lame = &Library{ // opus - Opus audio codec var opus = &Library{ Name: "opus", - URL: "https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz", + URL: "https://downloads.xiph.org/releases/opus/opus-1.6.1.tar.gz", FFmpegEnables: []string{"libopus"}, BuildSystem: &AutoconfBuild{}, ConfigureArgs: func(os string) []string { @@ -505,7 +505,7 @@ var opus = &Library{ // libvpx - VP8/VP9 video codec var libvpx = &Library{ Name: "libvpx", - URL: "https://github.com/webmproject/libvpx/archive/refs/tags/v1.15.2.tar.gz", + URL: "https://github.com/webmproject/libvpx/archive/refs/tags/v1.16.0.tar.gz", FFmpegEnables: []string{"libvpx"}, BuildSystem: &AutoconfBuild{}, SkipAutoFlags: true, // vpx has a custom configure script that rejects CFLAGS/LDFLAGS @@ -589,7 +589,7 @@ var x265 = &Library{ // dav1d - AV1 video decoder var dav1d = &Library{ Name: "dav1d", - URL: "https://code.videolan.org/videolan/dav1d/-/archive/1.5.2/dav1d-1.5.2.tar.bz2", + URL: "https://code.videolan.org/videolan/dav1d/-/archive/1.5.3/dav1d-1.5.3.tar.bz2", FFmpegEnables: []string{"libdav1d"}, BuildSystem: &MesonBuild{}, ConfigureArgs: func(os string) []string { @@ -654,7 +654,7 @@ var rav1e = &Library{ // vvenc - H.266/VVC video encoder var vvenc = &Library{ Name: "vvenc", - URL: "https://github.com/fraunhoferhhi/vvenc/archive/refs/tags/v1.13.1.tar.gz", + URL: "https://github.com/fraunhoferhhi/vvenc/archive/refs/tags/v1.14.0.tar.gz", FFmpegEnables: []string{"libvvenc"}, BuildSystem: &CMakeBuild{}, Enabled: Disabled(), @@ -681,7 +681,7 @@ var vvenc = &Library{ // - BIO, EVP APIs var openssl = &Library{ Name: "openssl", - URL: "https://github.com/openssl/openssl/releases/download/openssl-3.6.0/openssl-3.6.0.tar.gz", + URL: "https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz", FFmpegEnables: []string{"openssl"}, BuildSystem: &OpenSSLBuild{}, ConfigureArgs: func(os string) []string { @@ -744,7 +744,7 @@ var openssl = &Library{ // libsrt - Secure Reliable Transport (SRT) protocol library var libsrt = &Library{ Name: "libsrt", - URL: "https://github.com/Haivision/srt/archive/refs/tags/v1.5.5-rc.0a.tar.gz", + URL: "https://github.com/Haivision/srt/archive/refs/tags/v1.5.5-rc.1.tar.gz", FFmpegEnables: []string{"libsrt"}, BuildSystem: &CMakeBuild{}, ConfigureArgs: func(os string) []string { From cd94a21bf42f4158169fdaea7c0cedcc783d8334 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:21:44 +0000 Subject: [PATCH 3/6] chore: update flake.lock Signed-off-by: Martin Wimpress --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 6d0ac08..71aa6c8 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1767892417, - "narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=", + "lastModified": 1773122722, + "narHash": "sha256-FIqHByVqxCprNjor1NqF80F2QQoiiyqanNNefdlvOg4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", + "rev": "62dc67aa6a52b4364dd75994ec00b51fbf474e50", "type": "github" }, "original": { From 7fa0803acf404000ddc93911011e50d4878dfa9c Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:26:29 +0000 Subject: [PATCH 4/6] ci: standardise workflow YAML formatting and use go.mod for version pinning - Convert single quotes to double quotes for consistency - Replace hardcoded go-version with go-version-file for go.mod - Remove trailing whitespace - Standardise branch array formatting Signed-off-by: Martin Wimpress --- .github/workflows/ffmpeg-release.yml | 7 +++---- .github/workflows/ffmpeg-test.yml | 10 +++++----- .github/workflows/go-release.yml | 6 +++--- .github/workflows/go-test.yml | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ffmpeg-release.yml b/.github/workflows/ffmpeg-release.yml index 26ddaa1..abe374e 100644 --- a/.github/workflows/ffmpeg-release.yml +++ b/.github/workflows/ffmpeg-release.yml @@ -4,11 +4,11 @@ on: workflow_dispatch: inputs: version: - description: 'FFmpeg library version (e.g., 8.0.0.1)' + description: "FFmpeg library version (e.g., 8.0.0.1)" required: true push: tags: - - 'lib-[0-9]*.[0-9]*.[0-9]*.[0-9]*' + - "lib-[0-9]*.[0-9]*.[0-9]*.[0-9]*" permissions: pull-requests: write @@ -48,7 +48,7 @@ jobs: - uses: actions/setup-go@v6 with: - go-version: '1.24' + go-version-file: go.mod cache: true - uses: dtolnay/rust-toolchain@stable @@ -118,4 +118,3 @@ jobs: - Linux arm64 - macOS x86 (Intel) - macOS arm64 (Apple Silicon) - diff --git a/.github/workflows/ffmpeg-test.yml b/.github/workflows/ffmpeg-test.yml index adf4650..aec3aa7 100644 --- a/.github/workflows/ffmpeg-test.yml +++ b/.github/workflows/ffmpeg-test.yml @@ -2,11 +2,11 @@ name: FFmpeg library test on: push: - branches: [ main ] + branches: [main] paths: - - '.github/workflows/ffmpeg-test.yml' - - 'internal/builder/**' - - '*.gen.go' + - ".github/workflows/ffmpeg-test.yml" + - "internal/builder/**" + - "*.gen.go" workflow_dispatch: permissions: @@ -39,7 +39,7 @@ jobs: - uses: actions/setup-go@v6 with: - go-version: '1.24' + go-version-file: go.mod cache: true - uses: dtolnay/rust-toolchain@stable diff --git a/.github/workflows/go-release.yml b/.github/workflows/go-release.yml index fc18c3f..11af953 100644 --- a/.github/workflows/go-release.yml +++ b/.github/workflows/go-release.yml @@ -4,11 +4,11 @@ on: workflow_dispatch: inputs: version: - description: 'Go module version (e.g., 8.0.0.1)' + description: "Go module version (e.g., 8.0.0.1)" required: true push: tags: - - 'v[0-9]*.[0-9]*.[0-9]*.[0-9]*' + - "v[0-9]*.[0-9]*.[0-9]*.[0-9]*" permissions: contents: write @@ -33,7 +33,7 @@ jobs: - uses: actions/setup-go@v6 with: - go-version: '1.24' + go-version-file: go.mod cache: true - name: Install libclang for generator diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml index 620255a..c449bed 100644 --- a/.github/workflows/go-test.yml +++ b/.github/workflows/go-test.yml @@ -2,9 +2,9 @@ name: Go tests on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] workflow_dispatch: jobs: @@ -33,7 +33,7 @@ jobs: - uses: actions/setup-go@v6 with: - go-version: '1.24' + go-version-file: go.mod cache: true - name: Install libclang for generator From 0e6a37c592dc005b8793a0649c311d7abde078ff Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:38:09 +0000 Subject: [PATCH 5/6] refactor(stdlib): replace deprecated functions with Go 1.26 equivalents Replace sort.Strings with slices.Sort (Go 1.21+) for generic type-safe sorting and filepath.Walk with filepath.WalkDir (Go 1.16+) for improved performance by avoiding extra stat calls. - lib/fetch.go: replace sort.Strings with slices.Sort - internal/builder/libraries.go: replace filepath.Walk with filepath.WalkDir Signed-off-by: Martin Wimpress --- internal/builder/libraries.go | 4 ++-- lib/fetch.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/builder/libraries.go b/internal/builder/libraries.go index bdf377e..e27ac1b 100644 --- a/internal/builder/libraries.go +++ b/internal/builder/libraries.go @@ -907,11 +907,11 @@ func touchAutomakeFiles(srcPath string) error { } // Also touch any Makefile.in files in subdirectories - filepath.Walk(srcPath, func(path string, info os.FileInfo, err error) error { + filepath.WalkDir(srcPath, func(path string, d os.DirEntry, err error) error { if err != nil { return err } - if !info.IsDir() && info.Name() == "Makefile.in" { + if !d.IsDir() && d.Name() == "Makefile.in" { os.Chtimes(path, now, now) } return nil diff --git a/lib/fetch.go b/lib/fetch.go index a33ec89..793df74 100644 --- a/lib/fetch.go +++ b/lib/fetch.go @@ -12,7 +12,7 @@ import ( "os" "path/filepath" "runtime" - "sort" + "slices" "strings" ) @@ -161,7 +161,7 @@ func findViaAPI(prefix string) (string, error) { } // Sort to find highest version (lib-8.0.0.0 < lib-8.0.0.1 < lib-8.0.0.3) - sort.Strings(matchingReleases) + slices.Sort(matchingReleases) // Return the last (highest) version return matchingReleases[len(matchingReleases)-1], nil From 64a9664e6c85fefb924b93ec959594db5cdb90ab Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 12 Mar 2026 22:59:01 +0000 Subject: [PATCH 6/6] fix(builder): return error from filepath.WalkDir in touchAutomakeFiles Previously the error from WalkDir was silently discarded, now it is properly propagated to the caller. Signed-off-by: Martin Wimpress --- internal/builder/libraries.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/builder/libraries.go b/internal/builder/libraries.go index e27ac1b..8fd39bf 100644 --- a/internal/builder/libraries.go +++ b/internal/builder/libraries.go @@ -907,7 +907,7 @@ func touchAutomakeFiles(srcPath string) error { } // Also touch any Makefile.in files in subdirectories - filepath.WalkDir(srcPath, func(path string, d os.DirEntry, err error) error { + return filepath.WalkDir(srcPath, func(path string, d os.DirEntry, err error) error { if err != nil { return err } @@ -916,6 +916,4 @@ func touchAutomakeFiles(srcPath string) error { } return nil }) - - return nil }