@@ -8,6 +8,8 @@ PLATFORM="$(uname -s)"
88FFMPEG_VERSION=" 7.1"
99ZLIB_VERSION=" da607da739fa6047df13e66a2af6b8bec7c2a498" # v1.3.2
1010X264_BRANCH=" stable"
11+ LIBDRM_VERSION=" libdrm-2.4.124"
12+ LIBVA_VERSION=" 2.22.0"
1113INSTALL_DIR=" $DIR /ffmpeg/install"
1214
1315NJOBS=" $( nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 2) "
@@ -68,6 +70,40 @@ if [ "$PLATFORM" = "Linux" ]; then
6870 cmake --install vulkan-headers-src/build > /dev/null
6971fi
7072
73+ # --- Build libdrm + libva statically (Linux only, for VAAPI without runtime deps) ---
74+ if [ " $PLATFORM " = " Linux" ]; then
75+ if ! command -v meson & > /dev/null; then
76+ pip3 install --quiet meson ninja 2> /dev/null || python3 -m pip install --quiet meson ninja 2> /dev/null || true
77+ command -v meson & > /dev/null || { echo " error: meson is required (apt install meson or pip install meson)" >&2 ; exit 1; }
78+ fi
79+
80+ if [ ! -d " libdrm-src/.git" ]; then
81+ rm -rf libdrm-src
82+ git clone --depth 1 --branch " $LIBDRM_VERSION " https://gitlab.freedesktop.org/mesa/drm.git libdrm-src
83+ fi
84+ rm -rf libdrm-src/builddir
85+ meson setup libdrm-src/builddir libdrm-src \
86+ --prefix=" $PREFIX " --libdir=lib --default-library=static \
87+ -Dintel=disabled -Dradeon=disabled -Damdgpu=disabled -Dnouveau=disabled \
88+ -Dvmwgfx=disabled -Dtests=false -Dman-pages=disabled -Dcairo-tests=disabled \
89+ -Dvalgrind=disabled
90+ ninja -C libdrm-src/builddir install
91+
92+ if [ ! -d " libva-src/.git" ]; then
93+ rm -rf libva-src
94+ git clone --depth 1 --branch " $LIBVA_VERSION " https://github.com/intel/libva.git libva-src
95+ fi
96+ rm -rf libva-src/builddir
97+ # libva hardcodes shared_library(); patch to library() so --default-library=static works
98+ sed -i ' s/shared_library(/library(/g' libva-src/va/meson.build
99+ PKG_CONFIG_PATH=" $PREFIX /lib/pkgconfig${PKG_CONFIG_PATH: +: $PKG_CONFIG_PATH } " \
100+ meson setup libva-src/builddir libva-src \
101+ --prefix=" $PREFIX " --libdir=lib --default-library=static \
102+ -Ddisable_drm=false -Dwith_x11=no -Dwith_glx=no -Dwith_wayland=no \
103+ -Dwith_win32=no -Denable_docs=false
104+ ninja -C libva-src/builddir install
105+ fi
106+
71107# --- Build FFmpeg ---
72108if [ ! -d " ffmpeg-src/.git" ]; then
73109 rm -rf ffmpeg-src
@@ -82,11 +118,18 @@ cd ffmpeg-src
82118HW_FLAGS=()
83119if [ " $PLATFORM " = " Linux" ]; then
84120 HW_FLAGS+=(
121+ # use --static with pkg-config so static libva/libdrm resolve transitive deps
122+ --pkg-config=" pkg-config --static"
123+
85124 # NVIDIA CUDA/NVDEC (uses dlopen at runtime)
86125 --enable-ffnvcodec --enable-cuda --enable-cuvid --enable-nvdec
87126 --enable-hwaccel=h264_nvdec,hevc_nvdec
88127 --enable-decoder=h264_cuvid,hevc_cuvid
89128
129+ # VAAPI (Intel/AMD — libva linked statically, driver loaded via dlopen at runtime)
130+ --enable-vaapi
131+ --enable-hwaccel=h264_vaapi,hevc_vaapi
132+
90133 # V4L2 Memory-to-Memory (embedded: RPi, Qualcomm, Rockchip)
91134 --enable-v4l2-m2m
92135 --enable-decoder=h264_v4l2m2m,hevc_v4l2m2m
@@ -144,7 +187,11 @@ cp "$PREFIX/bin/ffmpeg" "$INSTALL_DIR/bin/"
144187cp " $PREFIX /bin/ffprobe" " $INSTALL_DIR /bin/"
145188
146189# Libraries
147- for lib in libavformat.a libavcodec.a libavutil.a libswresample.a libx264.a libz.a; do
190+ LIBS=" libavformat.a libavcodec.a libavutil.a libswresample.a libx264.a libz.a"
191+ if [ " $PLATFORM " = " Linux" ]; then
192+ LIBS=" $LIBS libva.a libva-drm.a libdrm.a"
193+ fi
194+ for lib in $LIBS ; do
148195 cp " $PREFIX /lib/$lib " " $INSTALL_DIR /lib/"
149196done
150197
0 commit comments