Files
nix-config/packages/raspberrypi/ffmpeg-rpi/default.nix
2026-04-05 19:10:23 -05:00

102 lines
5.1 KiB
Nix

{
lib,
ffmpeg,
ffmpegVariant ? "small",
withVoutEgl ? false,
libepoxy,
withV4l2Request ? true,
udev,
systemd,
withVoutDrm ? true,
namespace,
pkgs,
}:
let
inherit (lib.trivial) importJSON;
inherit (lib.${namespace}) selectVariant mkAllSources;
versionSpec = importJSON ./version.json;
selected = selectVariant versionSpec null null;
vars = selected.variables or { };
sources = mkAllSources pkgs selected;
extraVersion = vars.extraVersion or "rpi";
# https://github.com/jc-kynesim/rpi-ffmpeg/tree/test/7.1.2/main
ffmpegVersion = vars.ffmpegVersion or "7.1.2";
rpiFfmpegSrc = sources."rpi-ffmpeg";
in
(ffmpeg.overrideAttrs (old: {
pname = old.pname + "-rpi";
doCheck = false; # disabled because `imgutils` test fails
# see also
# https://github.com/jc-kynesim/rpi-ffmpeg/blob/release/4.4/rpi_import_1/pi-util/conf_native.sh#L85
configureFlags =
old.configureFlags
++ [
"--extra-version=${extraVersion}"
"--enable-logging"
"--enable-asm"
]
++ [
"--disable-mmal"
"--enable-neon"
]
++ [
"--enable-sand"
]
++ lib.optionals withVoutEgl [
"--enable-epoxy"
"--enable-vout-egl" # rpi
]
++ lib.optionals withVoutDrm [
# when withV4l2
"--enable-vout-drm" # rpi
]
++ lib.optionals withV4l2Request [
"--enable-v4l2-request"
"--enable-libudev"
];
buildInputs =
old.buildInputs
++ lib.optionals withVoutEgl [
libepoxy.dev
]
++ lib.optionals withV4l2Request [
udev
systemd
];
})).override
{
inherit (rpiFfmpegSrc) hash;
version = ffmpegVersion;
source = rpiFfmpegSrc;
# version = ffmpegVersion + "-rpi";
# source = rpiFfmpegSrc;
# hash = rpiFfmpegSrc.hash;
inherit ffmpegVariant;
withStripping = true;
withDocumentation = false;
withHtmlDoc = false;
withManPages = false;
# withV4l2 = true; # default on linux
# withDrm = true; # default on linux
withXlib = withVoutEgl; # for libepoxy
withVaapi = false;
# !!! keep this enabled, because some applications may need it
# for example, vlc 3.0.20: fails with 'undefined reference to
# `av_vdpau_get_surface_parameters'' otherwise
withVdpau = true;
}
# > configure flags: --disable-static --prefix=/nix/store/hksqdxfkpspl4bqhvzq88v46c5zlf1c9-ffmpeg-4.4-rpi --target_os=linux --arch=aarch64 --pkg-config=pkg-config --enable-gpl --enable-version3 --disable-nonfree --disable-static --enable-shared --enable-pic --disable-thumb --disable-small --enable-runtime-cpudetect --disable-gray --enable-swscale-alpha --enable-hardcoded-tables --enable-safe-bitstream-reader --enable-pthreads --disable-w32threads --disable-os2threads --enable-network --enable-pixelutils --datadir=/nix/store/k9hkfl02wlmms2czv8a56c3sfk0c1947-ffmpeg-4.4-rpi-data/share/ffmpeg --enable-ffmpeg --enable-ffplay --enable-ffprobe --bindir=/nix/store/xmgl25z6yh1166ykgf3srqhihdzx45ng-ffmpeg-4.4-rpi-bin/bin --enable-avcodec --enable-avdevice --enable-avfilter --enable-avformat --enable-avresample --enable-avutil --enable-postproc --enable-swresample --enable-swscale --libdir=/nix/store/sgxz7wifxfi3yk2706fjfn1ja418lz4l-ffmpeg-4.4-rpi-lib/lib --incdir=/nix/store/4i8zcixbngr553ajfsg7qxasy372j18s-ffmpeg-4.4-rpi-dev/include --disable-doc --disable-htmlpages --disable-manpages --enable-podpages --enable-txtpages --enable-alsa --disable-libaom --enable-libass --disable-libbluray --disable-libbs2b --enable-bzlib --disable-libcaca --disable-libcelt --disable-chromaprint --disable-cuda --disable-cuda-llvm --enable-libdav1d --disable-libdc1394 --enable-libdrm --disable-libfdk-aac --disable-libflite --enable-fontconfig --enable-libfontconfig --enable-libfreetype --disable-frei0r --disable-libfribidi --disable-libgme --enable-gnutls --disable-libgsm --enable-iconv --disable-libjack --disable-ladspa --enable-lzma --disable-libmfx --disable-libmodplug --enable-libmp3lame --disable-libmysofa --enable-cuvid --enable-nvdec --enable-nvenc --disable-openal --disable-opencl --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-opengl --disable-libopenh264 --disable-libopenjpeg --disable-libopenmpt --enable-libopus --enable-libpulse --disable-librav1e --disable-librtmp --disable-libsmbclient --enable-sdl2 --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --disable-librsvg --disable-libsvtav1 --disable-libtensorflow --enable-libtheora --enable-libv4l2 --enable-v4l2-m2m --disable-vaapi --disable-vdpau --disable-libvidstab --disable-libvmaf --disable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-vulkan --disable-libwebp --enable-libx264 --enable-libx265 --disable-libxavs --disable-libxcb --disable-libxcb-shape --disable-libxcb-shm --disable-libxcb-xfixes --enable-xlib --disable-libxml2 --enable-libxvid --enable-libzimg --enable-zlib --disable-libzmq --disable-debug --enable-optimizations --disable-extra-warnings --enable-stripping --extra-version=rpi --enable-logging --enable-asm --disable-mmal --enable-neon --disable-thumb --enable-sand --enable-epoxy --enable-vout-egl --enable-vout-drm --enable-v4l2-request --enable-libudev
# > ERROR: v4l2-request requires libudev