diff --git a/ajatt/packages/video.scm b/ajatt/packages/video.scm index 4efb531..0cf68ea 100644 --- a/ajatt/packages/video.scm +++ b/ajatt/packages/video.scm @@ -6,9 +6,148 @@ #:use-module (guix download) #:use-module (guix packages) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) #:use-module (gnu packages cmake) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages assembly) + #:use-module (gnu packages compression) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages tls) + #:use-module (ice-9 match) + #:use-module ((srfi srfi-1) #:hide (zip)) + #:use-module (srfi srfi-26) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix svn-download) + #:use-module (guix hg-download) + #:use-module (guix build-system cargo) + #:use-module (guix build-system cmake) + #:use-module (guix build-system copy) + #:use-module (guix build-system gnu) + #:use-module (guix build-system go) + #:use-module (guix build-system glib-or-gtk) + #:use-module (guix build-system meson) + #:use-module (guix build-system perl) + #:use-module (guix build-system pyproject) + #:use-module (guix build-system python) + #:use-module (guix build-system qt) + #:use-module (guix build-system waf) + #:use-module (guix build-system trivial) + #:use-module (gnu packages) + #:use-module (gnu packages algebra) + #:use-module (gnu packages assembly) + #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) + #:use-module (gnu packages avahi) + #:use-module (gnu packages backup) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) + #:use-module (gnu packages bison) + #:use-module (gnu packages bittorrent) + #:use-module (gnu packages boost) + #:use-module (gnu packages cdrom) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpp) + #:use-module (gnu packages crates-io) + #:use-module (gnu packages crates-graphics) + #:use-module (gnu packages curl) + #:use-module (gnu packages dbm) + #:use-module (gnu packages dejagnu) + #:use-module (gnu packages dns) + #:use-module (gnu packages docbook) + #:use-module (gnu packages documentation) + #:use-module (gnu packages file) + #:use-module (gnu packages flex) + #:use-module (gnu packages fonts) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages fribidi) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages guile) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gnunet) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages golang) + #:use-module (gnu packages gstreamer) + #:use-module (gnu packages gtk) + #:use-module (gnu packages haskell-xyz) + #:use-module (gnu packages hunspell) + #:use-module (gnu packages image) + #:use-module (gnu packages imagemagick) + #:use-module (gnu packages iso-codes) + #:use-module (gnu packages libcanberra) + #:use-module (gnu packages libidn) + #:use-module (gnu packages libusb) + #:use-module (gnu packages linux) + #:use-module (gnu packages lua) + #:use-module (gnu packages man) + #:use-module (gnu packages markup) + #:use-module (gnu packages maths) + #:use-module (gnu packages messaging) + #:use-module (gnu packages music) + #:use-module (gnu packages mp3) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages nettle) + #:use-module (gnu packages networking) + #:use-module (gnu packages ocr) + #:use-module (gnu packages pcre) + #:use-module (gnu packages pciutils) + #:use-module (gnu packages perl) + #:use-module (gnu packages perl-check) + #:use-module (gnu packages perl-web) + #:use-module (gnu packages php) + #:use-module (gnu packages photo) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages popt) + #:use-module (gnu packages pretty-print) + #:use-module (gnu packages protobuf) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages python) + #:use-module (gnu packages python-build) + #:use-module (gnu packages python-check) + #:use-module (gnu packages python-crypto) + #:use-module (gnu packages python-web) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages qt) + #:use-module (gnu packages re2c) + #:use-module (gnu packages ruby) + #:use-module (gnu packages rust-apps) + #:use-module (gnu packages samba) + #:use-module (gnu packages sdl) + #:use-module (gnu packages serialization) + #:use-module (gnu packages shells) + #:use-module (gnu packages spice) + #:use-module (gnu packages sqlite) + #:use-module (gnu packages ssh) + #:use-module (gnu packages swig) + #:use-module (gnu packages terminals) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages textutils) + #:use-module (gnu packages tls) + #:use-module (gnu packages time) + #:use-module (gnu packages upnp) + #:use-module (gnu packages version-control) + #:use-module (gnu packages vulkan) + #:use-module (gnu packages web) + #:use-module (gnu packages wget) + #:use-module (gnu packages wxwidgets) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (gnu packages python) #:use-module ((guix licenses) #:prefix license:)) @@ -39,4 +178,215 @@ (license (list license:bsd-3)))) -vvdec + + + +(define-public ffmpeg-vvdec + (package + (inherit ffmpeg) + (name "ffmpeg-vvdec") + (version "7.0.1") + (source (origin + (method url-fetch) + (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" + version ".tar.xz")) + (sha256 + (base32 + "1zz4n2zqazl5nlvil31aikf90hhvlq8pgwxij0iriy3yy6qfxsdw")))) + (outputs '("out" "debug")) + (build-system gnu-build-system) + (inputs + (append + ;; XXX: rav1e depends on rust, which currently only works on x86_64. + ;; See also the related configure flag when changing this. + (if (target-x86-64?) (list rav1e) '()) + (list dav1d + fontconfig + freetype + frei0r-plugins + gnutls + vvdec + opus + ladspa + lame + libaom + libass + libbluray + libcaca + libcdio-paranoia + libdrm + libtheora + libva + libvdpau + libvorbis + libvpx + libwebp + libx11 + libx264 + mesa + openal + pulseaudio + sdl2 + soxr + speex + srt + twolame + vidstab + x265 + xvid + zlib))) + (native-inputs + (list bc + perl + pkg-config + python + texinfo + speex + yasm)) + (arguments + (list + #:test-target "fate" + #:configure-flags + ;; possible additional inputs: + ;; --enable-avisynth enable reading of AviSynth script + ;; files [no] + ;; --enable-libaacplus enable AAC+ encoding via libaacplus [no] + ;; --enable-libcelt enable CELT decoding via libcelt [no] + ;; --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 + ;; and libraw1394 [no] + ;; --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] + ;; --enable-libflite enable flite (voice synthesis) support via + ;; libflite [no] + ;; --enable-libgme enable Game Music Emu via libgme [no] + ;; --enable-libgsm enable GSM de/encoding via libgsm [no] + ;; --enable-libiec61883 enable iec61883 via libiec61883 [no] + ;; --enable-libilbc enable iLBC de/encoding via libilbc [no] + ;; --enable-libmodplug enable ModPlug via libmodplug [no] + ;; --enable-libnut enable NUT (de)muxing via libnut, + ;; native (de)muxer exists [no] + ;; --enable-libopencore-amrnb enable AMR-NB de/encoding via + ;; libopencore-amrnb [no] + ;; --enable-libopencore-amrwb enable AMR-WB decoding via + ;; libopencore-amrwb [no] + ;; --enable-libopencv enable video filtering via libopencv [no] + ;; --enable-libopenjpeg enable JPEG 2000 de/encoding via + ;; OpenJPEG [no] + ;; --enable-librtmp enable RTMP[E] support via librtmp [no] + ;; --enable-libschroedinger enable Dirac de/encoding via + ;; libschroedinger [no] + ;; --enable-libshine enable fixed-point MP3 encoding via + ;; libshine [no] + ;; --enable-libssh enable SFTP protocol via libssh [no] + ;; (libssh2 does not work) + ;; --enable-libstagefright-h264 enable H.264 decoding via + ;; libstagefright [no] + ;; --enable-libutvideo enable Ut Video encoding and decoding via + ;; libutvideo [no] + ;; --enable-libv4l2 enable libv4l2/v4l-utils [no] + ;; --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no] + ;; --enable-libvo-amrwbenc enable AMR-WB encoding via + ;; libvo-amrwbenc [no] + ;; --enable-libwavpack enable wavpack encoding via libwavpack [no] + ;; --enable-libxavs enable AVS encoding via xavs [no] + ;; --enable-libzmq enable message passing via libzmq [no] + ;; --enable-libzvbi enable teletext support via libzvbi [no] + ;; --enable-opencl enable OpenCL code + #~(list + #$@(if (target-powerpc?) + ;; These tests fail on powerpc64-le (see: + ;; https://trac.ffmpeg.org/ticket/9604). + '("--ignore-tests=checkasm-sw_scale,filter-scale2ref_keep_aspect") + '()) + "--enable-gpl" ;enable optional gpl licensed parts + "--enable-shared" + "--enable-frei0r" + "--enable-fontconfig" + "--enable-gnutls" + "--enable-ladspa" + "--enable-libaom" + "--enable-libass" + "--enable-libbluray" + "--enable-libcaca" + "--enable-libcdio" + "--enable-libdav1d" + "--enable-libfreetype" + "--enable-libmp3lame" + "--enable-libopus" + "--enable-libpulse" + #$@(if (target-x86-64?) + '("--enable-librav1e") + '()) + "--enable-libsoxr" + "--enable-libspeex" + ;; "--enable-libvvenc" TODO: this needs a patch + ;; https://patchwork.ffmpeg.org/series/12059/mbox/ + "--enable-libsrt" + "--enable-libtheora" + "--enable-libtwolame" + "--enable-libvidstab" + "--enable-libvorbis" + "--enable-libvpx" + "--enable-libwebp" + "--enable-libxvid" + "--enable-libx264" + "--enable-libx265" + "--enable-openal" + "--enable-opengl" + "--enable-libdrm" + "--enable-vaapi" + + "--enable-runtime-cpudetect" + + ;; The HTML pages take 7.2 MiB + "--disable-htmlpages" + + ;; The static libraries are 23 MiB + "--disable-static" + + "--disable-stripping" + + #$@(if (target-riscv64?) + '("--extra-cflags=-fPIC") + '()) + + ;; Runtime cpu detection is not implemented on + ;; MIPS, so we disable some features. + "--disable-mips32r2" + "--disable-mipsdsp" + "--disable-mipsdspr2" + "--disable-mipsfpu") + #:phases + #~(modify-phases %standard-phases + (replace 'configure + ;; configure does not work followed by "SHELL=..." and + ;; "CONFIG_SHELL=..."; set environment variables instead + (lambda* (#:key outputs configure-flags #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* "configure" + (("#! /bin/sh") (string-append "#!" (which "sh")))) + (setenv "SHELL" (which "bash")) + (setenv "CONFIG_SHELL" (which "bash")) + (apply invoke + "./configure" + (string-append "--prefix=" out) + ;; Add $libdir to the RUNPATH of all the binaries. + (string-append "--extra-ldflags=-Wl,-rpath=" + out "/lib") + configure-flags)))) + (add-before 'check 'set-ld-library-path + (lambda _ + ;; Allow $(top_builddir)/ffmpeg to find its dependencies when + ;; running tests. + (let* ((dso (find-files "." "\\.so$")) + (path (string-join (map dirname dso) ":"))) + (format #t "setting LD_LIBRARY_PATH to ~s~%" path) + (setenv "LD_LIBRARY_PATH" path))))))) + (home-page "https://www.ffmpeg.org/") + (synopsis "Audio and video framework") + (description "FFmpeg is a complete, cross-platform solution to record, +convert and stream audio and video. It includes the libavcodec +audio/video codec library.") + (license license:gpl2+))) + + +ffmpeg-vvdec