diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libav')
3 files changed, 205 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libav/default.nix b/nixpkgs/pkgs/development/libraries/libav/default.nix new file mode 100644 index 000000000000..a3de9225d1ce --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libav/default.nix @@ -0,0 +1,137 @@ +{ lib, stdenv, fetchurl, pkg-config, yasm, bzip2, zlib, perl, bash +, mp3Support ? true, lame ? null +, speexSupport ? true, speex ? null +, theoraSupport ? true, libtheora ? null +, vorbisSupport ? true, libvorbis ? null +, vpxSupport ? true, libvpx ? null +, x264Support ? false, x264 ? null +, xvidSupport ? true, xvidcore ? null +, faacSupport ? false, faac ? null +, vaapiSupport ? true, libva ? null +, vdpauSupport ? true, libvdpau ? null +, freetypeSupport ? true, freetype ? null # it's small and almost everywhere +, SDL # only for avplay in $bin, adds nontrivial closure to it +, enableGPL ? true # ToDo: some additional default stuff may need GPL +, enableUnfree ? faacSupport +}: + +assert faacSupport -> enableUnfree; + +let inherit (lib) optional hasPrefix enableFeature; in + +/* ToDo: + - more deps, inspiration: https://packages.ubuntu.com/raring/libav-tools + - maybe do some more splitting into outputs +*/ + +let + result = { + # e.g. https://libav.org/releases/libav-11.11.tar.xz.sha1 + libav_0_8 = libavFun "0.8.21" "d858f65128dad0bac1a8c3a51e5cbb27a7c79b3f"; + libav_11 = libavFun "11.12" "61d5dcab5fde349834af193a572b12a5fd6a4d42"; + libav_12 = libavFun "12.3" "386c18c8b857f23dfcf456ce40370716130211d9"; + }; + + libavFun = version : sha1 : stdenv.mkDerivation rec { + pname = "libav"; + inherit version; + + src = fetchurl { + url = "${meta.homepage}/releases/${pname}-${version}.tar.xz"; + inherit sha1; # upstream directly provides sha1 of releases over https + }; + + patches = [] + ++ optional (vpxSupport && hasPrefix "0.8." version) ./vpxenc-0.8.17-libvpx-1.5.patch + ++ optional (vpxSupport && hasPrefix "12." version) ./vpx-12.3-libvpx-1.8.patch + ; + + postPatch = '' + patchShebangs . + # another shebang was hidden in a here document text + substituteInPlace ./configure --replace "#! /bin/sh" "#!${bash}/bin/sh" + ''; + + configurePlatforms = []; + configureFlags = assert lib.all (x: x!=null) buildInputs; [ + "--arch=${stdenv.hostPlatform.parsed.cpu.name}" + "--target_os=${stdenv.hostPlatform.parsed.kernel.name}" + #"--enable-postproc" # it's now a separate package in upstream + "--disable-avserver" # upstream says it's in a bad state + "--enable-avplay" + "--enable-shared" + "--enable-runtime-cpudetect" + "--cc=${stdenv.cc.targetPrefix}cc" + (enableFeature enableGPL "gpl") + (enableFeature enableGPL "swscale") + (enableFeature mp3Support "libmp3lame") + (enableFeature mp3Support "libmp3lame") + (enableFeature speexSupport "libspeex") + (enableFeature theoraSupport "libtheora") + (enableFeature vorbisSupport "libvorbis") + (enableFeature vpxSupport "libvpx") + (enableFeature x264Support "libx264") + (enableFeature xvidSupport "libxvid") + (enableFeature faacSupport "libfaac") + (enableFeature faacSupport "nonfree") + (enableFeature vaapiSupport "vaapi") + (enableFeature vdpauSupport "vdpau") + (enableFeature freetypeSupport "libfreetype") + ] ++ optional (stdenv.hostPlatform != stdenv.buildPlatform) [ + "--cross-prefix=${stdenv.cc.targetPrefix}" + "--enable-cross-compile" + ]; + + nativeBuildInputs = [ pkg-config perl ]; + buildInputs = [ lame yasm zlib bzip2 SDL bash ] + ++ [ perl ] # for install-man target + ++ optional mp3Support lame + ++ optional speexSupport speex + ++ optional theoraSupport libtheora + ++ optional vorbisSupport libvorbis + ++ optional vpxSupport libvpx + ++ optional x264Support x264 + ++ optional xvidSupport xvidcore + ++ optional faacSupport faac + ++ optional vaapiSupport libva + ++ optional vdpauSupport libvdpau + ++ optional freetypeSupport freetype + ; + + enableParallelBuilding = true; + + outputs = [ "bin" "dev" "out" ]; + setOutputFlags = false; + + # alltools to build smaller tools, incl. aviocat, ismindex, qt-faststart, etc. + buildFlags = [ "all" "alltools" "install-man" ]; + + + postInstall = '' + moveToOutput bin "$bin" + # alltools target compiles an executable in tools/ for every C + # source file in tools/, so move those to $out + for tool in $(find tools -type f -executable); do + mv "$tool" "$bin/bin/" + done + ''; + + doInstallCheck = false; # fails randomly + installCheckTarget = "check"; # tests need to be run *after* installation + + passthru = { inherit vdpauSupport; }; + + meta = with lib; { + homepage = "https://libav.org/"; + description = "A complete, cross-platform solution to record, convert and stream audio and video (fork of ffmpeg)"; + license = with licenses; if enableUnfree then unfree #ToDo: redistributable or not? + else if enableGPL then gpl2Plus else lgpl21Plus; + platforms = with platforms; linux ++ darwin; + knownVulnerabilities = + lib.optional (lib.versionOlder version "12.1") "CVE-2017-9051" + ++ lib.optionals (lib.versionOlder version "12.3") [ "CVE-2018-5684" "CVE-2018-5766" ] + ++ lib.optionals (lib.versionOlder version "12.4") [ "CVE-2019-9717" "CVE-2019-9720" ]; + }; + }; # libavFun + +in result diff --git a/nixpkgs/pkgs/development/libraries/libav/vpx-12.3-libvpx-1.8.patch b/nixpkgs/pkgs/development/libraries/libav/vpx-12.3-libvpx-1.8.patch new file mode 100644 index 000000000000..8f8e5003284f --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libav/vpx-12.3-libvpx-1.8.patch @@ -0,0 +1,46 @@ +--- libav/libavcodec/libvpx.c.orig 2018-02-12 21:25:59 UTC ++++ libav/libavcodec/libvpx.c +@@ -25,6 +25,7 @@ + enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt_t img) + { + switch (img) { ++#if VPX_IMAGE_ABI_VERSION < 5 + case VPX_IMG_FMT_RGB24: return AV_PIX_FMT_RGB24; + case VPX_IMG_FMT_RGB565: return AV_PIX_FMT_RGB565BE; + case VPX_IMG_FMT_RGB555: return AV_PIX_FMT_RGB555BE; +@@ -36,10 +37,13 @@ enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt + case VPX_IMG_FMT_ARGB_LE: return AV_PIX_FMT_BGRA; + case VPX_IMG_FMT_RGB565_LE: return AV_PIX_FMT_RGB565LE; + case VPX_IMG_FMT_RGB555_LE: return AV_PIX_FMT_RGB555LE; ++#endif + case VPX_IMG_FMT_I420: return AV_PIX_FMT_YUV420P; + case VPX_IMG_FMT_I422: return AV_PIX_FMT_YUV422P; + case VPX_IMG_FMT_I444: return AV_PIX_FMT_YUV444P; ++#if VPX_IMAGE_ABI_VERSION < 5 + case VPX_IMG_FMT_444A: return AV_PIX_FMT_YUVA444P; ++#endif + #if VPX_IMAGE_ABI_VERSION >= 3 + case VPX_IMG_FMT_I440: return AV_PIX_FMT_YUV440P; + case VPX_IMG_FMT_I42016: return AV_PIX_FMT_YUV420P16BE; +@@ -53,6 +57,7 @@ enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt + vpx_img_fmt_t ff_vpx_pixfmt_to_imgfmt(enum AVPixelFormat pix) + { + switch (pix) { ++#if VPX_IMAGE_ABI_VERSION < 5 + case AV_PIX_FMT_RGB24: return VPX_IMG_FMT_RGB24; + case AV_PIX_FMT_RGB565BE: return VPX_IMG_FMT_RGB565; + case AV_PIX_FMT_RGB555BE: return VPX_IMG_FMT_RGB555; +@@ -64,10 +69,13 @@ vpx_img_fmt_t ff_vpx_pixfmt_to_imgfmt(enum AVPixelForm + case AV_PIX_FMT_BGRA: return VPX_IMG_FMT_ARGB_LE; + case AV_PIX_FMT_RGB565LE: return VPX_IMG_FMT_RGB565_LE; + case AV_PIX_FMT_RGB555LE: return VPX_IMG_FMT_RGB555_LE; ++#endif + case AV_PIX_FMT_YUV420P: return VPX_IMG_FMT_I420; + case AV_PIX_FMT_YUV422P: return VPX_IMG_FMT_I422; + case AV_PIX_FMT_YUV444P: return VPX_IMG_FMT_I444; ++#if VPX_IMAGE_ABI_VERSION < 5 + case AV_PIX_FMT_YUVA444P: return VPX_IMG_FMT_444A; ++#endif + #if VPX_IMAGE_ABI_VERSION >= 3 + case AV_PIX_FMT_YUV440P: return VPX_IMG_FMT_I440; + case AV_PIX_FMT_YUV420P16BE: return VPX_IMG_FMT_I42016; diff --git a/nixpkgs/pkgs/development/libraries/libav/vpxenc-0.8.17-libvpx-1.5.patch b/nixpkgs/pkgs/development/libraries/libav/vpxenc-0.8.17-libvpx-1.5.patch new file mode 100644 index 000000000000..456828c025ef --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/libav/vpxenc-0.8.17-libvpx-1.5.patch @@ -0,0 +1,22 @@ +--- a/libavcodec/libvpxenc.c 2016-05-01 17:57:16.753852614 +0200 ++++ b/libavcodec/libvpxenc.c 2016-05-01 18:01:08.252147138 +0200 +@@ -67,19 +67,11 @@ + + /** String mappings for enum vp8e_enc_control_id */ + static const char *ctlidstr[] = { +- [VP8E_UPD_ENTROPY] = "VP8E_UPD_ENTROPY", +- [VP8E_UPD_REFERENCE] = "VP8E_UPD_REFERENCE", +- [VP8E_USE_REFERENCE] = "VP8E_USE_REFERENCE", +- [VP8E_SET_ROI_MAP] = "VP8E_SET_ROI_MAP", +- [VP8E_SET_ACTIVEMAP] = "VP8E_SET_ACTIVEMAP", +- [VP8E_SET_SCALEMODE] = "VP8E_SET_SCALEMODE", + [VP8E_SET_CPUUSED] = "VP8E_SET_CPUUSED", + [VP8E_SET_ENABLEAUTOALTREF] = "VP8E_SET_ENABLEAUTOALTREF", + [VP8E_SET_NOISE_SENSITIVITY] = "VP8E_SET_NOISE_SENSITIVITY", +- [VP8E_SET_SHARPNESS] = "VP8E_SET_SHARPNESS", + [VP8E_SET_STATIC_THRESHOLD] = "VP8E_SET_STATIC_THRESHOLD", + [VP8E_SET_TOKEN_PARTITIONS] = "VP8E_SET_TOKEN_PARTITIONS", +- [VP8E_GET_LAST_QUANTIZER] = "VP8E_GET_LAST_QUANTIZER", + [VP8E_SET_ARNR_MAXFRAMES] = "VP8E_SET_ARNR_MAXFRAMES", + [VP8E_SET_ARNR_STRENGTH] = "VP8E_SET_ARNR_STRENGTH", + [VP8E_SET_ARNR_TYPE] = "VP8E_SET_ARNR_TYPE", |