44DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null && pwd) "
55cd " $DIR "
66
7+ PLATFORM=" $( uname -s) "
78FFMPEG_VERSION=" 7.1"
89ZLIB_VERSION=" da607da739fa6047df13e66a2af6b8bec7c2a498" # v1.3.2
910X264_BRANCH=" stable"
@@ -48,6 +49,25 @@ make -j"$NJOBS"
4849make install
4950cd " $DIR "
5051
52+ # --- Build nv-codec-headers (Linux only, for CUDA/NVDEC) ---
53+ if [ " $PLATFORM " = " Linux" ]; then
54+ if [ ! -d " nv-codec-headers-src/.git" ]; then
55+ rm -rf nv-codec-headers-src
56+ git clone --depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git nv-codec-headers-src
57+ fi
58+ make -C nv-codec-headers-src PREFIX=" $PREFIX " install
59+ fi
60+
61+ # --- Build Vulkan-Headers from source (Linux only, need >= 1.3.277 for FFmpeg 7.1) ---
62+ if [ " $PLATFORM " = " Linux" ]; then
63+ if [ ! -d " vulkan-headers-src/.git" ]; then
64+ rm -rf vulkan-headers-src
65+ git clone --depth 1 https://github.com/KhronosGroup/Vulkan-Headers.git vulkan-headers-src
66+ fi
67+ cmake -S vulkan-headers-src -B vulkan-headers-src/build -DCMAKE_INSTALL_PREFIX=" $PREFIX " > /dev/null
68+ cmake --install vulkan-headers-src/build > /dev/null
69+ fi
70+
5171# --- Build FFmpeg ---
5272if [ ! -d " ffmpeg-src/.git" ]; then
5373 rm -rf ffmpeg-src
@@ -57,6 +77,43 @@ git -C ffmpeg-src fetch --depth 1 origin "n${FFMPEG_VERSION}"
5777git -C ffmpeg-src checkout --force FETCH_HEAD
5878
5979cd ffmpeg-src
80+
81+ # Platform-specific hardware acceleration flags
82+ HW_FLAGS=()
83+ if [ " $PLATFORM " = " Linux" ]; then
84+ HW_FLAGS+=(
85+ # NVIDIA CUDA/NVDEC (uses dlopen at runtime, no driver needed at build time)
86+ --enable-ffnvcodec --enable-cuda --enable-cuvid --enable-nvdec
87+ --enable-hwaccel=h264_nvdec,hevc_nvdec,vp9_nvdec,av1_nvdec,mpeg2_nvdec,mpeg4_nvdec,vc1_nvdec,vp8_nvdec
88+ --enable-decoder=h264_cuvid,hevc_cuvid,vp9_cuvid,av1_cuvid,mpeg2_cuvid,mpeg4_cuvid,vc1_cuvid,vp8_cuvid
89+
90+ # VAAPI (Intel/AMD)
91+ --enable-vaapi
92+ --enable-hwaccel=h264_vaapi,hevc_vaapi,vp8_vaapi,vp9_vaapi,av1_vaapi,mpeg2_vaapi
93+
94+ # VDPAU (NVIDIA legacy)
95+ --enable-vdpau
96+ --enable-hwaccel=h264_vdpau,hevc_vdpau,mpeg2_vdpau,mpeg4_vdpau,vc1_vdpau,vp9_vdpau
97+
98+ # V4L2 Memory-to-Memory (embedded: RPi, Qualcomm, Rockchip)
99+ --enable-v4l2-m2m
100+ --enable-decoder=h264_v4l2m2m,hevc_v4l2m2m,mpeg2_v4l2m2m,mpeg4_v4l2m2m,vp8_v4l2m2m,vp9_v4l2m2m
101+ --enable-encoder=h264_v4l2m2m,hevc_v4l2m2m
102+
103+ # Vulkan video decode/encode
104+ --enable-vulkan
105+ --enable-hwaccel=h264_vulkan,hevc_vulkan,av1_vulkan
106+ --enable-encoder=h264_vulkan,hevc_vulkan
107+ )
108+ elif [ " $PLATFORM " = " Darwin" ]; then
109+ HW_FLAGS+=(
110+ # VideoToolbox (Apple Silicon / macOS)
111+ --enable-videotoolbox
112+ --enable-hwaccel=h264_videotoolbox,hevc_videotoolbox,vp9_videotoolbox,mpeg1_videotoolbox,mpeg2_videotoolbox,mpeg4_videotoolbox,prores_videotoolbox
113+ --enable-encoder=h264_videotoolbox,hevc_videotoolbox,prores_videotoolbox
114+ )
115+ fi
116+
60117PKG_CONFIG_PATH=" $PREFIX /lib/pkgconfig${PKG_CONFIG_PATH: +: $PKG_CONFIG_PATH } " \
61118./configure \
62119 --cc=" ${CC:- cc} " \
@@ -80,7 +137,8 @@ PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" \
80137 --enable-filter=blend,vflip,format,scale,aformat,anull,aresample,null \
81138 --enable-bsf=extract_extradata,h264_mp4toannexb,hevc_mp4toannexb \
82139 --extra-cflags=" -I$PREFIX /include" \
83- --extra-ldflags=" -L$PREFIX /lib"
140+ --extra-ldflags=" -L$PREFIX /lib" \
141+ " ${HW_FLAGS[@]} "
84142make -j" $NJOBS "
85143make install
86144cd " $DIR "
0 commit comments