diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5df528e8d..c96ebbcd0 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: rsync - 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..21ef17052 --- /dev/null +++ b/cmake/ffmpeg/libva.cmake @@ -0,0 +1,71 @@ +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}) + +# 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 +) + +# 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} + --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} ./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" + "${CMAKE_CURRENT_BINARY_DIR}/libva/lib/libva-wayland.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