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 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/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": { 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 diff --git a/internal/builder/libraries.go b/internal/builder/libraries.go index 37dab40..8fd39bf 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 { @@ -907,15 +907,13 @@ 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 { + return 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 }) - - 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