From 5d4e9ff2fc26a93cda9e406a6a6d1025a9780fb9 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Thu, 6 Nov 2025 23:09:02 -0500 Subject: [PATCH 1/3] feat(FFmpeg): compile libva dependency --- .github/workflows/ci.yml | 30 ++++++--- CMakeLists.txt | 4 +- cmake/ffmpeg/_main.cmake | 8 +-- cmake/ffmpeg/ffmpeg.cmake | 7 +- cmake/ffmpeg/libva.cmake | 67 ++++++++++++++++++++ cmake/ffmpeg/vaapi.cmake | 7 -- package-lock.cmake | 9 +++ patches/FFmpeg/FFmpeg/{VAAPI => libva}/.keep | 0 8 files changed, 110 insertions(+), 22 deletions(-) create mode 100644 cmake/ffmpeg/libva.cmake delete mode 100644 cmake/ffmpeg/vaapi.cmake rename patches/FFmpeg/FFmpeg/{VAAPI => libva}/.keep (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5df528e8d..1e2805eb3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -193,10 +193,18 @@ jobs: echo "package architecture: $package_arch" dependencies+=( - "libva-dev:$package_arch" - "libva-glx2:$package_arch" - "libgl1:$package_arch" - "libglx0:$package_arch" + "libdrm-dev:$package_arch" + "libgl-dev:$package_arch" + "libglx-dev:$package_arch" + "libwayland-dev:$package_arch" + "libwayland-client0:$package_arch" + "libx11-dev:$package_arch" + "libx11-xcb-dev:$package_arch" + "libxcb1-dev:$package_arch" + "libxcb-dri3-dev:$package_arch" + "libxcb-xfixes0-dev:$package_arch" + "libxext-dev:$package_arch" + "libxfixes-dev:$package_arch" ) echo "::group::apt sources" @@ -425,27 +433,33 @@ jobs: devel/cmake \ devel/git \ devel/gmake \ + devel/libtool \ devel/llvm${{ env.FREEBSD_CLANG_VERSION }} \ + devel/meson \ devel/nasm \ devel/ninja \ devel/pkgconf \ + graphics/libdrm \ + graphics/libglvnd \ + graphics/wayland \ multimedia/libass \ multimedia/libv4l \ - multimedia/libva \ multimedia/v4l_compat \ print/freetype2 \ security/gnutls \ shells/bash \ - x11/libx11 \ + x11/libX11 \ x11/libxcb \ - x11/libXfixes + x11/libXext \ + x11/libXfixes \ + x11/xorgproto # create symlink for shebang bash compatibility ln -s /usr/local/bin/bash /bin/bash release: ${{ matrix.bsd_release }} run: | git config --global --add safe.directory "*" - sync: nfs + sync: sshfs - name: Setup ENV id: root diff --git a/CMakeLists.txt b/CMakeLists.txt index bbfaa90b0..420e21b72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,8 +28,8 @@ option(BUILD_FFMPEG_NV_CODEC_HEADERS "Build FFmpeg NV Codec Headers" ON) option(BUILD_FFMPEG_NV_CODEC_HEADERS_PATCHES "Apply FFmpeg NV Codec Headers patches" ON) option(BUILD_FFMPEG_SVT_AV1 "Build FFmpeg SVT-AV1" ON) option(BUILD_FFMPEG_SVT_AV1_PATCHES "Apply FFmpeg SVT-AV1 patches" ON) -option(BUILD_FFMPEG_VAAPI "Build FFmpeg with VAAPI support" ON) -option(BUILD_FFMPEG_VAAPI_PATCHES "Apply FFmpeg VAAPI patches" ON) +option(BUILD_FFMPEG_LIBVA "Build FFmpeg with libva support" ON) +option(BUILD_FFMPEG_LIBVA_PATCHES "Apply FFmpeg libva patches" ON) option(BUILD_FFMPEG_X264 "Build FFmpeg x264" ON) option(BUILD_FFMPEG_X264_PATCHES "Apply FFmpeg x264 patches" ON) option(BUILD_FFMPEG_X265 "Build FFmpeg x265" ON) diff --git a/cmake/ffmpeg/_main.cmake b/cmake/ffmpeg/_main.cmake index d533e9a6a..6433913ce 100644 --- a/cmake/ffmpeg/_main.cmake +++ b/cmake/ffmpeg/_main.cmake @@ -5,7 +5,7 @@ set(FFMPEG_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/FFmpeg) set(AVCODEC_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/libavcodec) if(WIN32) - set(BUILD_FFMPEG_VAAPI OFF) + set(BUILD_FFMPEG_LIBVA OFF) # We must disable CUDA and NVENC on ARM64 until following issues is resolved # https://github.com/FFmpeg/FFmpeg/blob/4e5523c98597a417eb43555933b1075d18ec5f8b/configure#L7443 @@ -16,7 +16,7 @@ elseif(APPLE) set(BUILD_FFMPEG_AMF OFF) set(BUILD_FFMPEG_MF OFF) set(BUILD_FFMPEG_NV_CODEC_HEADERS OFF) - set(BUILD_FFMPEG_VAAPI OFF) + set(BUILD_FFMPEG_LIBVA OFF) elseif(FREEBSD) set(BUILD_FFMPEG_AMF OFF) set(BUILD_FFMPEG_MF OFF) @@ -43,8 +43,8 @@ if(BUILD_FFMPEG_SVT_AV1) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ffmpeg/svt_av1.cmake) endif() -if(BUILD_FFMPEG_VAAPI) - include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ffmpeg/vaapi.cmake) +if(BUILD_FFMPEG_LIBVA) + include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ffmpeg/libva.cmake) endif() if(BUILD_FFMPEG_X264) diff --git a/cmake/ffmpeg/ffmpeg.cmake b/cmake/ffmpeg/ffmpeg.cmake index 8f24405ca..e1a0799d6 100644 --- a/cmake/ffmpeg/ffmpeg.cmake +++ b/cmake/ffmpeg/ffmpeg.cmake @@ -30,8 +30,10 @@ list(APPEND FFMPEG_EXTRA_CONFIGURE --pkg-config-flags='--static' --extra-cflags='-I${CMAKE_CURRENT_BINARY_DIR_UNIX}/usr/local/include' --extra-cflags='-I${CMAKE_CURRENT_BINARY_DIR_UNIX}/x264/include' + --extra-cflags='-I${CMAKE_CURRENT_BINARY_DIR_UNIX}/libva/include' --extra-ldflags='-L${CMAKE_CURRENT_BINARY_DIR_UNIX}/usr/local/lib' --extra-ldflags='-L${CMAKE_CURRENT_BINARY_DIR_UNIX}/x264/lib' + --extra-ldflags='-L${CMAKE_CURRENT_BINARY_DIR_UNIX}/libva/lib' --extra-libs='-lpthread -lm' --disable-all --disable-autodetect @@ -75,7 +77,7 @@ if(BUILD_FFMPEG_SVT_AV1) --enable-encoder=libsvtav1 ) endif() -if(BUILD_FFMPEG_VAAPI) +if(BUILD_FFMPEG_LIBVA) list(APPEND FFMPEG_EXTRA_CONFIGURE --enable-vaapi --enable-encoder=h264_vaapi,hevc_vaapi,av1_vaapi @@ -162,6 +164,9 @@ endif() if(BUILD_FFMPEG_SVT_AV1) add_dependencies(ffmpeg SvtAv1) endif() +if(BUILD_FFMPEG_LIBVA) + add_dependencies(ffmpeg libva) +endif() if(BUILD_FFMPEG_X264) add_dependencies(ffmpeg x264) endif() diff --git a/cmake/ffmpeg/libva.cmake b/cmake/ffmpeg/libva.cmake new file mode 100644 index 000000000..de7570f48 --- /dev/null +++ b/cmake/ffmpeg/libva.cmake @@ -0,0 +1,67 @@ +CPMGetPackage(libva) + +set(LIBVA_GENERATED_SRC_PATH ${libva_SOURCE_DIR}) + +if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_LIBVA_PATCHES) + file(GLOB FFMPEG_LIBVA_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/libva/*.patch) + + foreach(patch_file ${FFMPEG_LIBVA_PATCH_FILES}) + APPLY_GIT_PATCH(${LIBVA_GENERATED_SRC_PATH} ${patch_file}) + endforeach() +endif() + +# libva uses autotools build system +set(WORKING_DIR "${LIBVA_GENERATED_SRC_PATH}") +UNIX_PATH(WORKING_DIR_UNIX ${WORKING_DIR}) + +set(LIBVA_MAKE_ENV "MAKE=${MAKE_EXECUTABLE}") + +# Configure options for libva +list(APPEND LIBVA_EXTRA_CONFIGURE + --prefix=${CMAKE_CURRENT_BINARY_DIR_UNIX}/libva + --enable-static + --disable-shared + --enable-drm + --enable-x11 + --enable-glx + --enable-wayland + --without-legacy +) + +if(CMAKE_CROSSCOMPILING) + set(LIBVA_EXTRA_CONFIGURE + ${LIBVA_EXTRA_CONFIGURE} + --host=${CMAKE_C_COMPILER_TARGET} + ) +endif() + +# Convert list to string +# configure command will only take the first argument if not converted to string +string(REPLACE ";" " " LIBVA_EXTRA_CONFIGURE "${LIBVA_EXTRA_CONFIGURE}") + +add_custom_target(libva ALL + COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${LIBVA_MAKE_ENV} ./autogen.sh ${LIBVA_EXTRA_CONFIGURE}" + COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${MAKE_EXECUTABLE} --jobs=${N_PROC}" + COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${MAKE_EXECUTABLE} install" + WORKING_DIRECTORY ${WORKING_DIR} + COMMENT "Target: libva" + COMMAND_EXPAND_LISTS + USES_TERMINAL + VERBATIM + BYPRODUCTS + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva.a" + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-drm.a" + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-x11.a" + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-glx.a" +) +add_dependencies(${CMAKE_PROJECT_NAME} libva) + +# Install libva headers and libraries +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libva/include/" + DESTINATION include) +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/" + DESTINATION lib + FILES_MATCHING PATTERN "*.a") + +# Add to PKG_CONFIG_PATH for FFmpeg to find +set(PKG_CONFIG_PATH "${CMAKE_CURRENT_BINARY_DIR_UNIX}/libva/lib/pkgconfig:${PKG_CONFIG_PATH}") diff --git a/cmake/ffmpeg/vaapi.cmake b/cmake/ffmpeg/vaapi.cmake deleted file mode 100644 index 119f41c72..000000000 --- a/cmake/ffmpeg/vaapi.cmake +++ /dev/null @@ -1,7 +0,0 @@ -if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_VAAPI_PATCHES) - file(GLOB FFMPEG_VAAPI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/VAAPI/*.patch) - - foreach(patch_file ${FFMPEG_VAAPI_FILES}) - APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file}) - endforeach() -endif() diff --git a/package-lock.cmake b/package-lock.cmake index 50f0b8541..c928f0b17 100644 --- a/package-lock.cmake +++ b/package-lock.cmake @@ -22,3 +22,12 @@ CPMDeclarePackage(Boost "${PATCH_DIRECTORY}/boost/02-no-link-libatomic-clang-windows.patch" DOWNLOAD_ONLY YES ) + +# libva +CPMDeclarePackage(libva + NAME libva + VERSION 2.22.0 + GIT_REPOSITORY https://github.com/intel/libva.git + GIT_TAG 2.22.0 + DOWNLOAD_ONLY YES +) diff --git a/patches/FFmpeg/FFmpeg/VAAPI/.keep b/patches/FFmpeg/FFmpeg/libva/.keep similarity index 100% rename from patches/FFmpeg/FFmpeg/VAAPI/.keep rename to patches/FFmpeg/FFmpeg/libva/.keep From 895229fcd40f0bb5c2f56289930e0e90bb376d4e Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sun, 16 Nov 2025 22:50:49 -0500 Subject: [PATCH 2/3] Update libva build for FreeBSD and add Wayland support Removes unused LIBVA_MAKE_ENV variable and adds --disable-dependency-tracking for FreeBSD to address make/gmake compatibility. Also includes libva-wayland.a in the build outputs. --- cmake/ffmpeg/libva.cmake | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cmake/ffmpeg/libva.cmake b/cmake/ffmpeg/libva.cmake index de7570f48..21ef17052 100644 --- a/cmake/ffmpeg/libva.cmake +++ b/cmake/ffmpeg/libva.cmake @@ -14,8 +14,6 @@ endif() set(WORKING_DIR "${LIBVA_GENERATED_SRC_PATH}") UNIX_PATH(WORKING_DIR_UNIX ${WORKING_DIR}) -set(LIBVA_MAKE_ENV "MAKE=${MAKE_EXECUTABLE}") - # Configure options for libva list(APPEND LIBVA_EXTRA_CONFIGURE --prefix=${CMAKE_CURRENT_BINARY_DIR_UNIX}/libva @@ -28,6 +26,11 @@ list(APPEND LIBVA_EXTRA_CONFIGURE --without-legacy ) +# On FreeBSD, disable dependency tracking to avoid gmake/make compatibility issues +if(FREEBSD) + list(APPEND LIBVA_EXTRA_CONFIGURE --disable-dependency-tracking) +endif() + if(CMAKE_CROSSCOMPILING) set(LIBVA_EXTRA_CONFIGURE ${LIBVA_EXTRA_CONFIGURE} @@ -40,7 +43,7 @@ endif() string(REPLACE ";" " " LIBVA_EXTRA_CONFIGURE "${LIBVA_EXTRA_CONFIGURE}") add_custom_target(libva ALL - COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${LIBVA_MAKE_ENV} ./autogen.sh ${LIBVA_EXTRA_CONFIGURE}" + COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ./autogen.sh ${LIBVA_EXTRA_CONFIGURE}" COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${MAKE_EXECUTABLE} --jobs=${N_PROC}" COMMAND ${SHELL_CMD} "${MAKE_COMPILER_FLAGS} ${MAKE_EXECUTABLE} install" WORKING_DIRECTORY ${WORKING_DIR} @@ -53,6 +56,7 @@ add_custom_target(libva ALL "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-drm.a" "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-x11.a" "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-glx.a" + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-wayland.a" ) add_dependencies(${CMAKE_PROJECT_NAME} libva) From 8dc5a1b18b23ea3514f4700214e66e07b4dd384b Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:46:36 -0500 Subject: [PATCH 3/3] Switch sync method from sshfs to rsync in CI Updated the CI workflow to use rsync instead of sshfs for synchronization. This may improve reliability and performance during file transfers in the CI process. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e2805eb3..c96ebbcd0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -459,7 +459,7 @@ jobs: release: ${{ matrix.bsd_release }} run: | git config --global --add safe.directory "*" - sync: sshfs + sync: rsync - name: Setup ENV id: root