Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion .github/workflows/check-updates.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Check for a new FFmpeg major line
name: Check for a new FFmpeg major line and due dependency-hold reviews

on:
schedule:
Expand Down Expand Up @@ -152,3 +152,24 @@ jobs:
fi

echo "Done."

# Dependency holds (deps.json .defaults.<dep>.hold) never expire on their own, so each one
# carries a reviewAfter date and a tracking issue; scripts/ci/review-holds.sh raises the review
# there once the date passes and reopens the issue if it was closed while the hold is live.
# Its own job: it needs issue write access, which is a GITHUB_TOKEN permission -- the job above
# runs on UPDATE_PR_TOKEN, whose scopes this repo cannot see -- and a failure here must not
# stop the new-major check (or the reverse). Read-only on contents.
review-holds:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
- name: Review dependency holds
run: bash scripts/ci/review-holds.sh
1 change: 1 addition & 0 deletions .github/workflows/shellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ jobs:
bash scripts/ci/image-pins-test.sh
bash scripts/ci/matrix-consistency-test.sh
bash scripts/ci/renovate-config-test.sh
bash scripts/ci/holds-test.sh

# Our dep scripts are SOURCED by build.sh and share its environment, so many variables
# are assigned by the parent, not the script itself; -x follows sourced files so
Expand Down
19 changes: 16 additions & 3 deletions deps.json
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,15 @@
},
"nv-codec": {
"origin": "https://github.com/FFmpeg/nv-codec-headers.git",
"tag": "n13.1.15.0",
"datasource": "github-tags"
"tag": "n13.0.19.1",
"datasource": "github-tags",
"reason": "Pinned to the SDK 13.0 line for driver compatibility. Each nv-codec-headers SDK line sets a minimum NVIDIA driver, and FFmpeg's NVENC refuses to open on anything older ('Driver does not support the required nvenc API version'): sdk/13.0 needs 570+, sdk/13.1 needs 610+. NVIDIA's 580 branch is the LAST driver for Maxwell/Pascal/Volta (GTX 900/10-series), so 13.1 headers would break NVENC on those cards permanently, and on any machine not yet on 610 (measured: RTX 3080 on Windows driver 591.86). Both FFmpeg lines accept ffnvcodec >= 12.1.14.0, and the 13.1-only features (newer counting fields, AV1 hierarchical refs) sit behind version guards with fallbacks, so 13.0 loses optional features, not builds. See hold.",
"hold": {
"allowedVersions": "/^n13\\.0\\./",
"issue": 54,
"reviewAfter": "2027-04-07",
"liftWhen": "Review, never lift automatically, when: an FFmpeg line we ship requires ffnvcodec >= 13.1 (consider a per-line override rather than raising every line's floor); NVIDIA ends the 580 branch (lifting still retires NVENC on Maxwell/Pascal/Volta -- that is a policy decision, not a consequence); or a 13.1+ NVENC feature is worth raising the driver floor to 610. Re-run a real NVENC encode on the oldest driver the new floor claims."
}
},
"opus": {
"origin": "https://github.com/xiph/opus.git",
Expand Down Expand Up @@ -313,7 +320,13 @@
"origin": "https://github.com/Mbed-TLS/mbedtls.git",
"tag": "v3.6.7",
"datasource": "github-tags",
"reason": "Renovate tracks the git tag (git-tags on origin), but mbedtls.sh downloads the matching release tarball (mbedtls-<ver>.tar.bz2, v stripped) instead of cloning — the tarball bundles the 'framework' submodule in-tree, avoiding a submodule init. Pin the 3.6 LTS line (4.x is the TF-PSA-Crypto split, not yet consumed by FFmpeg/SRT/librist). Held at 3.x by a renovate.json allowedVersions rule: FFmpeg's tls_mbedtls.c uses mbedtls_ctr_drbg_*/mbedtls_entropy_* unconditionally and mbedTLS 4 removed those headers (moved to PSA Crypto); FFmpeg master has not migrated either. Tracked in issue #18."
"reason": "Renovate tracks the git tag (git-tags on origin), but mbedtls.sh downloads the matching release tarball (mbedtls-<ver>.tar.bz2, v stripped) instead of cloning — the tarball bundles the 'framework' submodule in-tree, avoiding a submodule init. Pin the 3.6 LTS line (4.x is the TF-PSA-Crypto split, not yet consumed by FFmpeg/SRT/librist). Held at 3.x by a renovate.json allowedVersions rule (see hold): mbedTLS 4 removed ctr_drbg.h/entropy.h (moved to PSA Crypto). The consumers here are SRT and librist, not FFmpeg's TLS layer (OpenSSL/GnuTLS/SChannel), so the hold lifts on THEIR mbedTLS 4 support. Tracked in issue #18.",
"hold": {
"allowedVersions": "<4.0.0",
"issue": 18,
"reviewAfter": "2027-04-07",
"liftWhen": "Review when the SRT and librist versions we ship build and link against mbedTLS 4 (its TF-PSA-Crypto split) through this repo's mbedtls.sh recipe -- those transports, not FFmpeg's TLS layer (OpenSSL/GnuTLS/SChannel here), are what consume it. Verify encrypted SRT and RIST transport before lifting."
}
},
"srt": {
"origin": "https://github.com/Haivision/srt.git",
Expand Down
5 changes: 5 additions & 0 deletions docs/install/linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ To actually **use** hardware acceleration or GPU Whisper you additionally need t
for Vulkan/GPU transcription. Without one, hardware paths are simply unavailable and Whisper
falls back to CPU, so treat drivers as optional `Recommends`, never a hard dependency.

**NVIDIA (NVENC/NVDEC/CUDA)** needs the proprietary driver at **570 or newer** — the floor set by
the NVIDIA Video Codec SDK 13.0 headers these builds use. On an older driver FFmpeg reports
`Driver does not support the required nvenc API version` and the NVIDIA paths are unavailable;
everything else is unaffected. The 580 series (the last for GTX 900/10-series cards) qualifies.

**`linux-musl-x64`/`linux-musl-arm64` (Alpine)** — the latter is the Alpine-on-ARM build (AWS
Graviton, Ampere, and Docker Desktop on Apple Silicon, which defaults to arm64 containers) — are
self-contained in the same way as the glibc builds above: the hwaccel dispatch libraries
Expand Down
5 changes: 5 additions & 0 deletions docs/install/windows.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ Windows needs no extra runtime install: the Vulkan loader (`vulkan-1.dll`) ships
driver, and TLS uses the OS-native **SChannel** backend in every cell (unaffected by the v2/v3
split — see the [runtime-dependency overview](./README.md#runtime-dependencies)).

On `win-x64`, **NVIDIA (NVENC/NVDEC/CUDA)** needs driver **570 or newer** — the floor set by the
NVIDIA Video Codec SDK 13.0 headers these builds use. On an older driver FFmpeg reports
`Driver does not support the required nvenc API version` and the NVIDIA paths are unavailable;
everything else is unaffected. The 580 series (the last for GTX 900/10-series cards) qualifies.

---

Back to the [install hub](./README.md) · [Linux](./linux.md) · [macOS](./macos.md) ·
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-8-gplv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ _15 of 23 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-8-gplv3.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ _16 of 23 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-8-lgplv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ _15 of 23 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-8-lgplv3.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ _16 of 23 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-9-gplv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ _15 of 22 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-9-gplv3.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ _16 of 22 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-9-lgplv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ _15 of 22 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
2 changes: 1 addition & 1 deletion docs/matrix/ffmpeg-9-lgplv3.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ _16 of 22 built._
| CUVID (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| D3D11VA | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| DXVA2 | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.1.15.0 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| ffnvcodec headers | n13.0.19.1 | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| libdrm | libdrm-2.4.134 | ✓ | ✓ | — | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| MediaFoundation | | n/a | n/a | n/a | n/a | n/a | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| NVDEC (NVIDIA decode) | | ✓ | ✓ | — | ✓ | ✓ | ✓ | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Expand Down
10 changes: 9 additions & 1 deletion renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,19 @@
"allowedVersions": "/^9\\./"
},
{
"description": "Hold mbedTLS on 3.x. FFmpeg's libavformat/tls_mbedtls.c includes <mbedtls/ctr_drbg.h> and <mbedtls/entropy.h> and calls mbedtls_ctr_drbg_seed/mbedtls_entropy_init/mbedtls_entropy_func unconditionally, with no version guard; mbedTLS 4.x removed those headers when that work moved to PSA Crypto, so 4.x cannot compile against any FFmpeg line we ship. Without this the grouped PR would be permanently red on an impossible bump, which is worse than not offering it. Remove once FFmpeg's mbedTLS backend supports 4.x. Tracked in issue #18.",
"description": "Hold mbedTLS on 3.x. mbedTLS 4.x removed <mbedtls/ctr_drbg.h> and <mbedtls/entropy.h> when that work moved to PSA Crypto (the TF-PSA-Crypto split). Its consumers here are SRT and librist -- FFmpeg's own TLS layer uses OpenSSL/GnuTLS/SChannel in this build -- so the hold lifts when the SRT and librist versions we ship support 4.x. Without this the grouped PR would carry a bump nothing has validated. The rationale, tracking issue (#18) and review date live in deps.json (.defaults.mbedtls.hold); scripts/ci/holds-test.sh keeps this rule and that record in step.",
"matchPackageNames": [
"https://github.com/Mbed-TLS/mbedtls.git"
],
"allowedVersions": "<4.0.0"
},
{
"description": "Hold nv-codec-headers on the SDK 13.0 line: sdk/13.1 raises the minimum NVIDIA driver to 610, which Maxwell/Pascal/Volta cards (last driver: 580) can never run, and FFmpeg's NVENC refuses to open on an older driver. 13.0.x patch releases still flow. The rationale, tracking issue and review date live in deps.json (.defaults[\"nv-codec\"].hold) -- metadata keys here would make Renovate refuse to start (see renovate-config-test.sh) -- and scripts/ci/holds-test.sh keeps this rule and that record in step. versioning: tags are n<major>.<minor>.<patch>.<build>, and the default semver-coerced scheme drops the fourth component, so n13.0.19.1 -> n13.0.19.2 would never compare as newer.",
"matchPackageNames": [
"https://github.com/FFmpeg/nv-codec-headers.git"
],
"versioning": "regex:^n(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)\\.(?<build>\\d+)$",
"allowedVersions": "/^n13\\.0\\./"
}
],
"customDatasources": {
Expand Down
Loading
Loading