diff options
Diffstat (limited to 'pkgs/development/libraries/ffmpeg')
-rw-r--r-- | pkgs/development/libraries/ffmpeg/4.nix | 23 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/5.nix | 21 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/6.nix | 11 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/default.nix | 58 | ||||
-rw-r--r-- | pkgs/development/libraries/ffmpeg/generic.nix | 64 |
5 files changed, 100 insertions, 77 deletions
diff --git a/pkgs/development/libraries/ffmpeg/4.nix b/pkgs/development/libraries/ffmpeg/4.nix deleted file mode 100644 index e57c0fcff5bc..000000000000 --- a/pkgs/development/libraries/ffmpeg/4.nix +++ /dev/null @@ -1,23 +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="; - } - # 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 68edb0fd37e4..000000000000 --- a/pkgs/development/libraries/ffmpeg/5.nix +++ /dev/null @@ -1,21 +0,0 @@ -import ./generic.nix { - version = "5.1.3"; - hash = "sha256-twfJvANLQGO7TiyHPMPqApfHLFUlOGZTTIIGEnjyvuE="; - 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="; - } - { - name = "libsvtav1-1.5.0-compat-vbv_bufsize.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/1c6fd7d756afe0f8b7df14dbf7a95df275f8f5ee"; - hash = "sha256-v9Viyo12QfZpbcVqd1aHgLl/DgSkdE9F1kr6afTGPik="; - } - { - name = "libsvtav1-1.5.0-compat-maximum_buffer_size_ms-conditional.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/96748ac54f998ba6fe22802799c16b4eba8d4ccc"; - hash = "sha256-Z5HSe7YpryYGHD3BYXejAhqR4EPnmfTGyccxNvU3AaU="; - } - ]; -} diff --git a/pkgs/development/libraries/ffmpeg/6.nix b/pkgs/development/libraries/ffmpeg/6.nix deleted file mode 100644 index cebf17e071e9..000000000000 --- a/pkgs/development/libraries/ffmpeg/6.nix +++ /dev/null @@ -1,11 +0,0 @@ -import ./generic.nix { - version = "6.1"; - hash = "sha256-NzhD2D16bCVCyCXo0TRwZYp3Ta5eFSfoQPa+iRkeNZg="; - extraPatches = [ - { - name = "avcodec-decode-validate-hw-frames-ctx.patch"; - url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/e9c93009fc34ca9dfcf0c6f2ed90ef1df298abf7"; - hash = "sha256-aE9WN7a2INbss7oRys+AC9d9+yBzlJdeBRcwSDpG0Qw="; - } - ]; -} diff --git a/pkgs/development/libraries/ffmpeg/default.nix b/pkgs/development/libraries/ffmpeg/default.nix new file mode 100644 index 000000000000..5c15239541d8 --- /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 8034980c8b18..6dba78cad219 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 @@ -305,7 +313,7 @@ */ let - inherit (lib) optional optionals optionalString enableFeature versionAtLeast; + inherit (lib) optional optionals optionalString enableFeature versionOlder versionAtLeast; in @@ -346,12 +354,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 . @@ -362,23 +365,40 @@ stdenv.mkDerivation (finalAttrs: { --replace /usr/local/lib/frei0r-1 ${frei0r}/lib/frei0r-1 ''; - patches = map (patch: fetchpatch patch) (extraPatches - ++ (lib.optional (lib.versionOlder 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="; } - ) - ++ (lib.optional (lib.versionAtLeast finalAttrs.version "6" && lib.versionOlder finalAttrs.version "6.1") + # 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"; @@ -439,7 +459,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") ] ++ [ @@ -470,7 +490,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") @@ -495,7 +515,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") @@ -518,7 +538,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") @@ -526,7 +546,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") @@ -624,7 +644,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 ] @@ -634,7 +654,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 ] @@ -733,7 +753,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 |