diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2024-03-17 00:02:45 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-17 00:02:45 +0000 |
commit | b74fe245b89e186a81898ce672c810881b881617 (patch) | |
tree | b1a1633f841e31d3d37e23bdc0c8e4b915d154d5 /pkgs/development/libraries/ffmpeg | |
parent | 0c201249012028f3e636606adfb9875924d73cef (diff) | |
parent | 2178d8d8574be160b52888ddd02cc3b9225ac920 (diff) |
Merge staging-next into staging
Diffstat (limited to 'pkgs/development/libraries/ffmpeg')
-rw-r--r-- | pkgs/development/libraries/ffmpeg/4.nix | 29 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/5.nix | 6 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/6.nix | 6 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/default.nix | 58 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/generic.nix | 68 |
5 files changed, 106 insertions, 61 deletions
diff --git a/pkgs/development/libraries/ffmpeg/4.nix b/pkgs/development/libraries/ffmpeg/4.nix deleted file mode 100644 index b5d169b59744d..0000000000000 --- a/pkgs/development/libraries/ffmpeg/4.nix +++ /dev/null @@ -1,29 +0,0 @@ -import ./generic.nix { - version = "4.4.4"; - hash = "sha256-Q8bkuF/1uJfqttJJoObnnLX3BEduv+qxsvOrVhMvRjA="; - extraPatches = [ - { - name = "libsvtav1-1.5.0-compat-compressed_ten_bit_format.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/031f1561cd286596cdb374da32f8aa816ce3b135"; - hash = "sha256-mSnmAkoNikDpxcN+A/hpB7mUbbtcMvm4tG6gZFuroe8="; - } - { - # Backport fix for binutils-2.41. - name = "binutils-2.41.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/effadce6c756247ea8bae32dc13bb3e6f464f0eb"; - hash = "sha256-vlBUMJ1bORQHRNpuzc5iXsTWwS/CN5BmGIA8g7H7mJE="; - } - # The upstream patch isn’t for ffmpeg 4, but it will apply with a few tweaks. - # Fixes a crash when built with clang 16 due to UB in ff_seek_frame_binary. - { - name = "utils-fix_crash_in_ff_seek_frame_binary.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/ab792634197e364ca1bb194f9abe36836e42f12d"; - hash = "sha256-UxZ4VneZpw+Q/UwkEUDNdb2nOx1QnMrZ40UagspNTxI="; - postFetch = '' - substituteInPlace "$out" \ - --replace libavformat/seek.c libavformat/utils.c \ - --replace 'const AVInputFormat *const ' 'const AVInputFormat *' - ''; - } - ]; -} diff --git a/pkgs/development/libraries/ffmpeg/5.nix b/pkgs/development/libraries/ffmpeg/5.nix deleted file mode 100644 index d4d78befe7dca..0000000000000 --- a/pkgs/development/libraries/ffmpeg/5.nix +++ /dev/null @@ -1,6 +0,0 @@ -import ./generic.nix { - version = "5.1.4"; - hash = "sha256-2jUL1/xGUf7aMooST2DW41KE7bC+BtgChXmj0sAJZ90="; - extraPatches = [ - ]; -} diff --git a/pkgs/development/libraries/ffmpeg/6.nix b/pkgs/development/libraries/ffmpeg/6.nix deleted file mode 100644 index 9b9b5e49a4e50..0000000000000 --- a/pkgs/development/libraries/ffmpeg/6.nix +++ /dev/null @@ -1,6 +0,0 @@ -import ./generic.nix { - version = "6.1.1"; - hash = "sha256-Q0c95hbCVUHQWPoh5uC8uzMylmB4BnWg+VhXEgSouzo="; - extraPatches = [ - ]; -} diff --git a/pkgs/development/libraries/ffmpeg/default.nix b/pkgs/development/libraries/ffmpeg/default.nix new file mode 100644 index 0000000000000..5c15239541d86 --- /dev/null +++ b/pkgs/development/libraries/ffmpeg/default.nix @@ -0,0 +1,58 @@ +{ callPackage, darwin }: + +let + mkFFmpeg = + initArgs: ffmpegVariant: + callPackage ./generic.nix ( + { + inherit (darwin.apple_sdk.frameworks) + Cocoa + CoreServices + CoreAudio + CoreMedia + AVFoundation + MediaToolbox + VideoDecodeAcceleration + VideoToolbox + ; + } + // (initArgs // { inherit ffmpegVariant; }) + ); + + v4 = { + version = "4.4.4"; + hash = "sha256-Q8bkuF/1uJfqttJJoObnnLX3BEduv+qxsvOrVhMvRjA="; + }; + + v5 = { + version = "5.1.4"; + hash = "sha256-2jUL1/xGUf7aMooST2DW41KE7bC+BtgChXmj0sAJZ90="; + }; + + v6 = { + version = "6.1.1"; + hash = "sha256-Q0c95hbCVUHQWPoh5uC8uzMylmB4BnWg+VhXEgSouzo="; + }; +in + +rec { + ffmpeg_4 = mkFFmpeg v4 "small"; + ffmpeg_4-headless = mkFFmpeg v4 "headless"; + ffmpeg_4-full = mkFFmpeg v4 "full"; + + ffmpeg_5 = mkFFmpeg v5 "small"; + ffmpeg_5-headless = mkFFmpeg v5 "headless"; + ffmpeg_5-full = mkFFmpeg v5 "full"; + + ffmpeg_6 = mkFFmpeg v6 "small"; + ffmpeg_6-headless = mkFFmpeg v6 "headless"; + ffmpeg_6-full = mkFFmpeg v6 "full"; + + # Please make sure this is updated to the latest version on the next major + # update to ffmpeg + # Packages which use ffmpeg as a library, should pin to the relevant major + # version number which the upstream support. + ffmpeg = ffmpeg_6; + ffmpeg-headless = ffmpeg_6-headless; + ffmpeg-full = ffmpeg_6-full; +} diff --git a/pkgs/development/libraries/ffmpeg/generic.nix b/pkgs/development/libraries/ffmpeg/generic.nix index f1f0e3dfe7325..538c93ae3fda9 100644 --- a/pkgs/development/libraries/ffmpeg/generic.nix +++ b/pkgs/development/libraries/ffmpeg/generic.nix @@ -1,7 +1,15 @@ -{ version, hash, extraPatches ? [] }: - { lib, stdenv, buildPackages, removeReferencesTo, addOpenGLRunpath, pkg-config, perl, texinfo, yasm + # You can fetch any upstream version using this derivation by specifying version and hash + # NOTICE: Always use this argument to override the version. Do not use overrideAttrs. +, version # ffmpeg ABI version. Also declare this if you're overriding the source. +, hash ? "" # hash of the upstream source for the given ABI version +, source ? fetchgit { + url = "https://git.ffmpeg.org/ffmpeg.git"; + rev = "n${version}"; + inherit hash; + } + , ffmpegVariant ? "small" # Decides which dependencies are enabled by default # Build with headless deps; excludes dependencies that are only necessary for @@ -307,7 +315,7 @@ */ let - inherit (lib) optional optionals optionalString enableFeature versionAtLeast; + inherit (lib) optional optionals optionalString enableFeature versionOlder versionAtLeast; in @@ -349,12 +357,7 @@ assert buildSwscale -> buildAvutil; stdenv.mkDerivation (finalAttrs: { pname = "ffmpeg" + (optionalString (ffmpegVariant != "small") "-${ffmpegVariant}"); inherit version; - - src = fetchgit { - url = "https://git.ffmpeg.org/ffmpeg.git"; - rev = "n${finalAttrs.version}"; - inherit hash; - }; + src = source; postPatch = '' patchShebangs . @@ -365,15 +368,40 @@ stdenv.mkDerivation (finalAttrs: { --replace /usr/local/lib/frei0r-1 ${frei0r}/lib/frei0r-1 ''; - patches = map (patch: fetchpatch patch) (extraPatches - ++ (lib.optional (lib.versionAtLeast finalAttrs.version "6" && lib.versionOlder finalAttrs.version "6.1") + patches = map (patch: fetchpatch patch) ([ ] + ++ optionals (versionOlder version "5") [ + { + name = "libsvtav1-1.5.0-compat-compressed_ten_bit_format.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/031f1561cd286596cdb374da32f8aa816ce3b135"; + hash = "sha256-mSnmAkoNikDpxcN+A/hpB7mUbbtcMvm4tG6gZFuroe8="; + } + { + # Backport fix for binutils-2.41. + name = "binutils-2.41.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/effadce6c756247ea8bae32dc13bb3e6f464f0eb"; + hash = "sha256-vlBUMJ1bORQHRNpuzc5iXsTWwS/CN5BmGIA8g7H7mJE="; + } + # The upstream patch isn’t for ffmpeg 4, but it will apply with a few tweaks. + # Fixes a crash when built with clang 16 due to UB in ff_seek_frame_binary. + { + name = "utils-fix_crash_in_ff_seek_frame_binary.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/ab792634197e364ca1bb194f9abe36836e42f12d"; + hash = "sha256-UxZ4VneZpw+Q/UwkEUDNdb2nOx1QnMrZ40UagspNTxI="; + postFetch = '' + substituteInPlace "$out" \ + --replace libavformat/seek.c libavformat/utils.c \ + --replace 'const AVInputFormat *const ' 'const AVInputFormat *' + ''; + } + ] + ++ (lib.optional (lib.versionAtLeast version "6" && lib.versionOlder version "6.1") { # this can be removed post 6.1 name = "fix_aacps_tablegen"; url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/814178f92647be2411516bbb82f48532373d2554"; hash = "sha256-FQV9/PiarPXCm45ldtCsxGHjlrriL8DKpn1LaKJ8owI="; } ) - ++ (lib.optional (lib.versionAtLeast finalAttrs.version "6.1" && lib.versionOlder finalAttrs.version "6.2") + ++ (lib.optional (lib.versionAtLeast version "6.1" && lib.versionOlder version "6.2") { # this can be removed post 6.1 name = "fix_build_failure_due_to_PropertyKey_EncoderID"; url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/cb049d377f54f6b747667a93e4b719380c3e9475"; @@ -434,7 +462,7 @@ stdenv.mkDerivation (finalAttrs: { (enableFeature buildAvdevice "avdevice") (enableFeature buildAvfilter "avfilter") (enableFeature buildAvformat "avformat") - ] ++ optionals (lib.versionOlder finalAttrs.version "5") [ + ] ++ optionals (lib.versionOlder version "5") [ # Ffmpeg > 4 doesn't know about the flag anymore (enableFeature buildAvresample "avresample") ] ++ [ @@ -465,7 +493,7 @@ stdenv.mkDerivation (finalAttrs: { */ (enableFeature withAlsa "alsa") (enableFeature withAom "libaom") - ] ++ optionals (versionAtLeast finalAttrs.version "6.1") [ + ] ++ optionals (versionAtLeast version "6.1") [ (enableFeature withAribcaption "libaribcaption") ] ++ [ (enableFeature withAss "libass") @@ -490,7 +518,7 @@ stdenv.mkDerivation (finalAttrs: { (enableFeature withGme "libgme") (enableFeature withGnutls "gnutls") (enableFeature withGsm "libgsm") - ] ++ optionals (versionAtLeast finalAttrs.version "6.1") [ + ] ++ optionals (versionAtLeast version "6.1") [ (enableFeature withHarfbuzz "libharfbuzz") ] ++ [ (enableFeature withIconv "iconv") @@ -513,7 +541,7 @@ stdenv.mkDerivation (finalAttrs: { (enableFeature withOpenjpeg "libopenjpeg") (enableFeature withOpenmpt "libopenmpt") (enableFeature withOpus "libopus") - ] ++ optionals (versionAtLeast finalAttrs.version "5.0") [ + ] ++ optionals (versionAtLeast version "5.0") [ (enableFeature withPlacebo "libplacebo") ] ++ [ (enableFeature withPulse "libpulse") @@ -521,7 +549,7 @@ stdenv.mkDerivation (finalAttrs: { (enableFeature withRtmp "librtmp") (enableFeature withSamba "libsmbclient") (enableFeature withSdl2 "sdl2") - ] ++ optionals (versionAtLeast finalAttrs.version "5.0") [ + ] ++ optionals (versionAtLeast version "5.0") [ (enableFeature withShaderc "libshaderc") ] ++ [ (enableFeature withSoxr "libsoxr") @@ -622,7 +650,7 @@ stdenv.mkDerivation (finalAttrs: { ++ optionals withModplug [ libmodplug ] ++ optionals withMp3lame [ lame ] ++ optionals withMysofa [ libmysofa ] - ++ optionals (withNvdec || withNvenc) [ (if (lib.versionAtLeast finalAttrs.version "6") then nv-codec-headers-12 else nv-codec-headers) ] + ++ optionals (withNvdec || withNvenc) [ (if (lib.versionAtLeast version "6") then nv-codec-headers-12 else nv-codec-headers) ] ++ optionals withOgg [ libogg ] ++ optionals withOpenal [ openal ] ++ optionals withOpencl [ ocl-icd opencl-headers ] @@ -632,7 +660,7 @@ stdenv.mkDerivation (finalAttrs: { ++ optionals withOpenjpeg [ openjpeg ] ++ optionals withOpenmpt [ libopenmpt ] ++ optionals withOpus [ libopus ] - ++ optionals withPlacebo [ (if (lib.versionAtLeast finalAttrs.version "6.1") then libplacebo else libplacebo_5) vulkan-headers ] + ++ optionals withPlacebo [ (if (lib.versionAtLeast version "6.1") then libplacebo else libplacebo_5) vulkan-headers ] ++ optionals withPulse [ libpulseaudio ] ++ optionals withRav1e [ rav1e ] ++ optionals withRtmp [ rtmpdump ] @@ -732,7 +760,7 @@ stdenv.mkDerivation (finalAttrs: { meta = with lib; { description = "A complete, cross-platform solution to record, convert and stream audio and video"; homepage = "https://www.ffmpeg.org/"; - changelog = "https://github.com/FFmpeg/FFmpeg/blob/n${finalAttrs.version}/Changelog"; + changelog = "https://github.com/FFmpeg/FFmpeg/blob/n${version}/Changelog"; longDescription = '' FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines |