Merge pull request #295691 from Atemu/ffmpeg-version-interface
ffmpeg: make version a regular parameter and use callPackage pattern
This commit is contained in:
commit
0b9f28b5d4
7 changed files with 126 additions and 108 deletions
|
@ -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 *'
|
||||
'';
|
||||
}
|
||||
];
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
import ./generic.nix {
|
||||
version = "5.1.4";
|
||||
hash = "sha256-2jUL1/xGUf7aMooST2DW41KE7bC+BtgChXmj0sAJZ90=";
|
||||
extraPatches = [
|
||||
];
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
import ./generic.nix {
|
||||
version = "6.1.1";
|
||||
hash = "sha256-Q0c95hbCVUHQWPoh5uC8uzMylmB4BnWg+VhXEgSouzo=";
|
||||
extraPatches = [
|
||||
];
|
||||
}
|
58
pkgs/development/libraries/ffmpeg/default.nix
Normal file
58
pkgs/development/libraries/ffmpeg/default.nix
Normal file
|
@ -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;
|
||||
}
|
|
@ -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,15 +365,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";
|
||||
|
@ -431,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")
|
||||
] ++ [
|
||||
|
@ -462,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")
|
||||
|
@ -487,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")
|
||||
|
@ -510,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")
|
||||
|
@ -518,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")
|
||||
|
@ -616,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 ]
|
||||
|
@ -626,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 ]
|
||||
|
@ -725,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
|
||||
|
|
|
@ -3,16 +3,20 @@
|
|||
, lib
|
||||
}:
|
||||
|
||||
ffmpeg_6-full.overrideAttrs (old: rec {
|
||||
pname = "jellyfin-ffmpeg";
|
||||
let
|
||||
version = "6.0.1-3";
|
||||
in
|
||||
|
||||
src = fetchFromGitHub {
|
||||
(ffmpeg_6-full.override {
|
||||
inherit version; # Important! This sets the ABI.
|
||||
source = fetchFromGitHub {
|
||||
owner = "jellyfin";
|
||||
repo = "jellyfin-ffmpeg";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-UINiXO61nB/AL0HJJy7G7emujakk/mQv81aUioyJz0Y=";
|
||||
};
|
||||
}).overrideAttrs (old: {
|
||||
pname = "jellyfin-ffmpeg";
|
||||
|
||||
# Clobber upstream patches as they don't apply to the Jellyfin fork
|
||||
patches = [];
|
||||
|
|
|
@ -20946,50 +20946,19 @@ with pkgs;
|
|||
|
||||
linbox = callPackage ../development/libraries/linbox { };
|
||||
|
||||
ffmpeg_4 = callPackage ../development/libraries/ffmpeg/4.nix {
|
||||
inherit (darwin.apple_sdk.frameworks)
|
||||
Cocoa CoreServices CoreAudio CoreMedia AVFoundation MediaToolbox
|
||||
VideoDecodeAcceleration VideoToolbox;
|
||||
};
|
||||
ffmpeg_4-headless = ffmpeg_4.override {
|
||||
ffmpegVariant = "headless";
|
||||
};
|
||||
ffmpeg_4-full = ffmpeg_4.override {
|
||||
ffmpegVariant = "full";
|
||||
};
|
||||
|
||||
ffmpeg_5 = callPackage ../development/libraries/ffmpeg/5.nix {
|
||||
inherit (darwin.apple_sdk.frameworks)
|
||||
Cocoa CoreServices CoreAudio CoreMedia AVFoundation MediaToolbox
|
||||
VideoDecodeAcceleration VideoToolbox;
|
||||
};
|
||||
ffmpeg_5-headless = ffmpeg_5.override {
|
||||
ffmpegVariant = "headless";
|
||||
};
|
||||
ffmpeg_5-full = ffmpeg_5.override {
|
||||
ffmpegVariant = "full";
|
||||
};
|
||||
|
||||
ffmpeg_6 = callPackage ../development/libraries/ffmpeg/6.nix {
|
||||
inherit (darwin.apple_sdk.frameworks)
|
||||
Cocoa CoreServices CoreAudio CoreMedia AVFoundation MediaToolbox
|
||||
VideoDecodeAcceleration VideoToolbox;
|
||||
};
|
||||
ffmpeg_6-headless = ffmpeg_6.override {
|
||||
ffmpegVariant = "headless";
|
||||
};
|
||||
ffmpeg_6-full = ffmpeg_6.override {
|
||||
ffmpegVariant = "full";
|
||||
};
|
||||
|
||||
# Aliases
|
||||
# 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;
|
||||
inherit (callPackage ../development/libraries/ffmpeg { })
|
||||
ffmpeg_4
|
||||
ffmpeg_4-headless
|
||||
ffmpeg_4-full
|
||||
ffmpeg_5
|
||||
ffmpeg_5-headless
|
||||
ffmpeg_5-full
|
||||
ffmpeg_6
|
||||
ffmpeg_6-headless
|
||||
ffmpeg_6-full
|
||||
ffmpeg
|
||||
ffmpeg-headless
|
||||
ffmpeg-full;
|
||||
|
||||
ffmpegthumbnailer = callPackage ../development/libraries/ffmpegthumbnailer { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue