diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e05173305..d474d978c 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" @@ -412,46 +420,12 @@ jobs: echo "PROCESSOR_COUNT=${PROCESSOR_COUNT}" >> "${GITHUB_OUTPUT}" echo "PROCESSOR_COUNT: ${PROCESSOR_COUNT}" - - name: Setup FreeBSD - if: startsWith(matrix.shell, 'freebsd') - uses: vmactions/freebsd-vm@c54ba3b62f49de9b67a2f3af017ab6152f0ebb6f # v1.3.4 - with: - arch: ${{ matrix.arch }} - cpu: ${{ steps.processor_count.outputs.PROCESSOR_COUNT }} - prepare: | - pkg install -y \ - devel/autoconf \ - devel/automake \ - devel/cmake \ - devel/git \ - devel/gmake \ - devel/llvm${{ env.FREEBSD_CLANG_VERSION }} \ - devel/nasm \ - devel/ninja \ - devel/pkgconf \ - multimedia/libass \ - multimedia/libv4l \ - multimedia/libva \ - multimedia/v4l_compat \ - print/freetype2 \ - security/gnutls \ - shells/bash \ - x11/libxcb \ - x11/libX11 \ - x11/libXfixes - - # 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 - - name: Setup ENV id: root + shell: bash run: | set -e - cd $GITHUB_WORKSPACE + cd "$GITHUB_WORKSPACE" echo "ROOT_PATH=$PWD" >> "${GITHUB_ENV}" MAKE_CMD="make" @@ -464,9 +438,10 @@ jobs: - name: Setup cross compilation id: cross if: matrix.target != '' + shell: bash run: | set -e - cd $GITHUB_WORKSPACE + cd "$GITHUB_WORKSPACE" TOOLCHAIN=${{ env.ROOT_PATH }}/cmake/toolchains/${{ matrix.target }}.cmake # fail if file does not exist @@ -480,6 +455,48 @@ jobs: echo "CCPREFIX=/usr/bin/${{ matrix.target }}-" >> "${GITHUB_ENV}" fi + - name: Setup FreeBSD + if: startsWith(matrix.shell, 'freebsd') + uses: vmactions/freebsd-vm@c54ba3b62f49de9b67a2f3af017ab6152f0ebb6f # v1.3.4 + with: + arch: ${{ matrix.arch }} + cpu: ${{ steps.processor_count.outputs.PROCESSOR_COUNT }} + prepare: | + pkg install -y \ + devel/autoconf \ + devel/automake \ + 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/v4l_compat \ + print/freetype2 \ + security/gnutls \ + shells/bash \ + x11/libX11 \ + x11/libxcb \ + 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: rsync + copyback: false + - name: Configure run: | set -e @@ -523,6 +540,11 @@ jobs: cd $GITHUB_WORKSPACE ${{ env.MAKE_CMD }} -C build install + - name: Sync FreeBSD build output to host + if: startsWith(matrix.shell, 'freebsd') + shell: bash + run: rsync -av --mkpath -e ssh "freebsd:$GITHUB_WORKSPACE/build/dist" "$GITHUB_WORKSPACE/build" + - name: Debug logs if: >- always() && 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..f283afab6 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.23.0 + GIT_REPOSITORY https://github.com/intel/libva.git + GIT_TAG 2.23.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