diff --git a/.github/actions/sync-shared-fsdk-files/action.yaml b/.github/actions/sync-shared-fsdk-files/action.yaml new file mode 100644 index 0000000..5f08529 --- /dev/null +++ b/.github/actions/sync-shared-fsdk-files/action.yaml @@ -0,0 +1,51 @@ +name: Sync shared Freedesktop SDK files +inputs: + fsdk-element: + description: Freedesktop SDK BuildStream element + default: freedesktop-sdk.bst +outputs: + fsdk-element: + description: Freedesktop SDK BuildStream element + value: ${{ inputs.fsdk-element }} + version: + description: Version of Freedesktop SDK + value: ${{ steps.sync.outputs.version }} +runs: + using: composite + steps: + - name: Parse ref + id: parse-ref + shell: bash + run: | + python .github/scripts/parse-bst-git-tag-ref.py elements/${{ inputs.fsdk-element }} + + - name: Sync shared files + id: sync + shell: bash + run: | + git clone --branch=${{ steps.parse-ref.outputs.tag }} --depth=1 https://gitlab.com/freedesktop-sdk/freedesktop-sdk + + for file in elements/plugins/*; do + if [ -f "freedesktop-sdk/$file" ]; then + cp freedesktop-sdk/$file $file + else + rm $file + fi + done + + cp freedesktop-sdk/include/strip.yml include/strip.yml + sed -i "s/strip-binaries/strip-binaries-base/g" include/strip.yml + + cp freedesktop-sdk/elements/include/ffmpeg.yml elements/include/ffmpeg.yml + sed -i '/public:/,/^$/d' elements/include/ffmpeg.yml + sed -i '/sources:/,/^$/d' elements/include/ffmpeg.yml + sed -i 's|public-stacks/|freedesktop-sdk.bst:public-stacks/|g' elements/include/ffmpeg.yml + sed -i 's|components/|freedesktop-sdk.bst:components/|g' elements/include/ffmpeg.yml + + tag="${{ steps.parse-ref.outputs.tag }}" + prefix="freedesktop-sdk-" + version="${tag#$prefix}" + + echo "version=$version" >> $GITHUB_OUTPUT + + rm -rf freedesktop-sdk diff --git a/.github/workflows/bst-maintainance.yaml b/.github/workflows/bst-maintainance.yaml index b794067..12cf212 100644 --- a/.github/workflows/bst-maintainance.yaml +++ b/.github/workflows/bst-maintainance.yaml @@ -53,36 +53,12 @@ jobs: echo "changed=true" >> $GITHUB_OUTPUT fi - - name: Parse the new ref - id: parse-ref - if: ${{ fromJSON(steps.check.outputs.changed) }} - shell: bash - run: | - python .github/scripts/parse-bst-git-tag-ref.py elements/${{ env.ELEMENT }} - - name: Sync shared files id: sync if: ${{ fromJSON(steps.check.outputs.changed) }} - shell: bash - run: | - git clone --branch=${{ steps.parse-ref.outputs.tag }} --depth=1 https://gitlab.com/freedesktop-sdk/freedesktop-sdk - - for file in elements/plugins/*; do - if [ -f "freedesktop-sdk/$file" ]; then - cp freedesktop-sdk/$file $file - else - rm $file - fi - done - - cp freedesktop-sdk/include/strip.yml include/strip.yml - sed -i "s/strip-binaries/strip-binaries-base/g" include/strip.yml - - tag="${{ steps.parse-ref.outputs.tag }}" - prefix="freedesktop-sdk-" - version="${tag#$prefix}" - - echo "version=$version" >> $GITHUB_OUTPUT + uses: ./.github/actions/sync-shared-fsdk-files + with: + fsdk-element: ${{ env.ELEMENT }} - name: Create pull request if: ${{ fromJSON(steps.check.outputs.changed) }} diff --git a/.github/workflows/check-code.yaml b/.github/workflows/check-code.yaml index 7ae4256..26fb858 100644 --- a/.github/workflows/check-code.yaml +++ b/.github/workflows/check-code.yaml @@ -29,3 +29,37 @@ jobs: uses: astral-sh/ruff-action@v3 with: args: "format --check" + + fsdk: + name: Re-sync Freedesktop SDK shared files + runs-on: ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for Changed Files + id: check + uses: obsproject/obs-studio/.github/actions/check-changes@19646f9434857120625524fbf15f254efa1afecc + with: + checkGlob: "'${{ env.WORKFLOW_FILEPATH }}' 'elements/plugins/*' 'elements/freedesktop-sdk.bst' 'include/strip.yml'" + diffFilter: 'ACM' + + - name: Sync shared files + id: sync + if: ${{ fromJSON(steps.check.outputs.hasChangedFiles) }} + uses: ./.github/actions/sync-shared-fsdk-files + + - name: Check if files have changed + if: ${{ !cancelled() && fromJSON(steps.check.outputs.hasChangedFiles) }} + shell: bash + run: | + : Check if the element has changed + + if [[ -z "$(git status --porcelain)" ]]; then + echo "::notice::Files are in sync" + else + echo "::error::Files are not in sync" + exit 2 + fi diff --git a/elements/components/ffmpeg.bst b/elements/components/ffmpeg.bst index 3389ccd..43247c2 100644 --- a/elements/components/ffmpeg.bst +++ b/elements/components/ffmpeg.bst @@ -2,8 +2,7 @@ kind: make description: FFmpeg component based on Freedesktop SDK version (@): -# Include file created by 'create_custom_fdo_sdk_include_ffmpeg' source in freedesktop-sdk junction. -- freedesktop-sdk.bst:elements/include/ffmpeg-custom.yml +- elements/include/ffmpeg.yml build-depends: (>): @@ -13,11 +12,14 @@ depends: (>): - components/librist.bst - components/srt.bst - - components/svt-av1.bst - components/x264.bst variables: - obs-conf-extra: >- + conf-extra: >- + --enable-encoders + --enable-decoders + --disable-programs + --disable-devices --enable-gnutls --enable-gpl --enable-libx264 @@ -29,23 +31,6 @@ variables: --enable-libaom --enable-libsvtav1 --enable-nvenc - --disable-doc - --disable-programs - --disable-devices - - # Only x264 is disabled in Freedesktop SDK - obs-missing-encoders: libx264,libx264rgb - - conf-extra: >- - --enable-encoder=%{fdo-encoders},%{obs-missing-encoders} - --enable-decoder=%{fdo-decoders} - %{obs-conf-extra} - %{fdo-conf-extra} - -config: - configure-commands: - - ./configure --prefix="%{prefix}" --libdir="%{libdir}" --arch="%{arch}" %{conf-local} - %{conf-extra} public: bst: @@ -65,8 +50,10 @@ sources: - kind: patch path: patches/ffmpeg/0002-libaomenc-presets.patch - kind: patch - path: patches/ffmpeg/0010-fdo-people-fdk-aac-gpl-compatible.patch + path: patches/ffmpeg/0010-lavc-vaapi_encode-Query-surface-alignment.patch +- kind: patch + path: patches/ffmpeg/0011-lavc-vaapi_encode_h265-Use-surface-alignment.patch - kind: patch - path: patches/ffmpeg/0011-lavc-vaapi_encode-Query-surface-alignment.patch + path: patches/ffmpeg/0012-posix-ioctl-hack.patch - kind: patch - path: patches/ffmpeg/0012-lavc-vaapi_encode_h265-Use-surface-alignment.patch + path: patches/ffmpeg/0013-svt-av1-v3.patch diff --git a/elements/components/jansson.bst b/elements/components/jansson.bst index 054e988..d98cf3d 100644 --- a/elements/components/jansson.bst +++ b/elements/components/jansson.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: cmake-local: >- diff --git a/elements/components/libajantv2.bst b/elements/components/libajantv2.bst index 5409d0a..65878af 100644 --- a/elements/components/libajantv2.bst +++ b/elements/components/libajantv2.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: cmake-local: >- diff --git a/elements/components/libfdk-aac.bst b/elements/components/libfdk-aac.bst new file mode 100644 index 0000000..9575c1c --- /dev/null +++ b/elements/components/libfdk-aac.bst @@ -0,0 +1,12 @@ +kind: autotools + +build-depends: +- freedesktop-sdk.bst:public-stacks/buildsystem-autotools.bst + +depends: +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst + +sources: +- kind: git_repo + url: freedesktop:wtaymans/fdk-aac-stripped + ref: 0fc0e0e0b89de3becd5f099eae725f13eeecc0d1 diff --git a/elements/components/libqrcodegencpp.bst b/elements/components/libqrcodegencpp.bst index 3c99da1..89eca6c 100644 --- a/elements/components/libqrcodegencpp.bst +++ b/elements/components/libqrcodegencpp.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: qrcodegen-version: 1.8.0 diff --git a/elements/components/libvpl.bst b/elements/components/libvpl.bst index 0d3dc52..7e4227c 100644 --- a/elements/components/libvpl.bst +++ b/elements/components/libvpl.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: cmake-local: >- diff --git a/elements/components/luajit.bst b/elements/components/luajit.bst index 6a17186..196ebb0 100644 --- a/elements/components/luajit.bst +++ b/elements/components/luajit.bst @@ -1,10 +1,11 @@ kind: make build-depends: +- freedesktop-sdk.bst:public-stacks/buildsystem-make.bst - freedesktop-sdk.bst:components/git-minimal.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: # Build amalgamation as shared library without early stripping diff --git a/elements/components/mbedtls.bst b/elements/components/mbedtls.bst index 3621c40..e01ffb6 100644 --- a/elements/components/mbedtls.bst +++ b/elements/components/mbedtls.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: mbedtls-version: 3.6.4 @@ -18,7 +18,7 @@ variables: sources: # MbedTLS provide a release tarball that allows to avoid maintaining git submodules - kind: tar - url: + url: github:Mbed-TLS/mbedtls/releases/download/mbedtls-%{mbedtls-version}/mbedtls-%{mbedtls-version}.tar.bz2 ref: ec35b18a6c593cf98c3e30db8b98ff93e8940a8c4e690e66b41dfc011d678110 - kind: patch diff --git a/elements/components/nv-codec.bst b/elements/components/nv-codec.bst index c1c9bc0..4d514e7 100644 --- a/elements/components/nv-codec.bst +++ b/elements/components/nv-codec.bst @@ -1,7 +1,7 @@ kind: make build-depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/buildsystem-make.bst variables: make-args: >- diff --git a/elements/components/rnnoise.bst b/elements/components/rnnoise.bst index cfc4675..e85dcd1 100644 --- a/elements/components/rnnoise.bst +++ b/elements/components/rnnoise.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-autotools.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: conf-local: >- diff --git a/elements/components/svt-av1.bst b/elements/components/svt-av1.bst deleted file mode 100644 index 2d7c4a1..0000000 --- a/elements/components/svt-av1.bst +++ /dev/null @@ -1,24 +0,0 @@ -kind: cmake - -build-depends: -- freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst -- freedesktop-sdk.bst:components/nasm.bst - -depends: -- freedesktop-sdk.bst:bootstrap-import.bst - -variables: - cmake-local: >- - -DNATIVE=OFF - -DENABLE_NASM=ON - -DBUILD_SHARED_LIBS=ON - -DBUILD_APPS=OFF - -DBUILD_DEC=ON - -DBUILD_ENC=ON - -DBUILD_TESTING=OFF - -sources: -- kind: git_repo - url: gitlab:AOMediaCodec/SVT-AV1.git - track: v2.3.0 - ref: 6e69def4ec283fe0b71195671245c3b768bebdef diff --git a/elements/components/swig.bst b/elements/components/swig.bst index f562844..be9ad2d 100644 --- a/elements/components/swig.bst +++ b/elements/components/swig.bst @@ -6,7 +6,7 @@ build-depends: - components/luajit.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: conf-local: >- diff --git a/elements/components/usrsctp.bst b/elements/components/usrsctp.bst index 65eaa14..967ad60 100644 --- a/elements/components/usrsctp.bst +++ b/elements/components/usrsctp.bst @@ -4,7 +4,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: # Disable SCTP IP code. Packets are handled by WebRTC so we don't need it diff --git a/elements/components/uthash.bst b/elements/components/uthash.bst index aed4ff6..3e712bc 100644 --- a/elements/components/uthash.bst +++ b/elements/components/uthash.bst @@ -1,7 +1,7 @@ kind: manual build-depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/buildsystem-make.bst config: install-commands: diff --git a/elements/components/x264.bst b/elements/components/x264.bst index b184f53..3cf7ed7 100644 --- a/elements/components/x264.bst +++ b/elements/components/x264.bst @@ -1,10 +1,11 @@ kind: make build-depends: +- freedesktop-sdk.bst:public-stacks/buildsystem-make.bst - freedesktop-sdk.bst:components/nasm.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: conf-local: >- diff --git a/elements/deps.bst b/elements/deps.bst index c380033..bced55d 100644 --- a/elements/deps.bst +++ b/elements/deps.bst @@ -8,6 +8,7 @@ depends: - components/jansson.bst - components/libajantv2.bst - components/libdatachannel.bst +- components/libfdk-aac.bst - components/libqrcodegencpp.bst - components/librist.bst - components/luajit.bst @@ -17,7 +18,6 @@ depends: - components/rnnoise.bst - components/simde.bst - components/srt.bst -- components/svt-av1.bst - components/swig.bst - components/uthash.bst - components/websocketpp.bst diff --git a/elements/freedesktop-sdk.bst b/elements/freedesktop-sdk.bst index 53708cf..2a36f4e 100644 --- a/elements/freedesktop-sdk.bst +++ b/elements/freedesktop-sdk.bst @@ -3,10 +3,10 @@ kind: junction sources: - kind: git_tag url: gitlab:freedesktop-sdk/freedesktop-sdk.git - track: release/24.08 + # Update include/strip.yml, elements/include/ffmpeg.yml and elements/plugins if bumping Freedesktop SDK release branch + track: release/25.08 track-tags: True - ref: freedesktop-sdk-24.08.26-0-g9673d931e0bbd49d60f808ab1d4389ffa443b342 -- kind: create_custom_fdo_sdk_include_ffmpeg + ref: freedesktop-sdk-25.08.1-0-g3405120e658f2e84c594aeedff456e16a1a2b185 config: options: diff --git a/elements/include/ffmpeg.yml b/elements/include/ffmpeg.yml new file mode 100644 index 0000000..a408cb3 --- /dev/null +++ b/elements/include/ffmpeg.yml @@ -0,0 +1,108 @@ +build-depends: +- freedesktop-sdk.bst:components/nasm.bst +- freedesktop-sdk.bst:components/vulkan-headers.bst +- freedesktop-sdk.bst:public-stacks/buildsystem-autotools.bst + +(?): +- target_arch in ["x86_64", "i686", "aarch64", "ppc64le"]: + build-depends: + (>): + - freedesktop-sdk.bst:components/nv-codec-headers.bst + +depends: +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst +- freedesktop-sdk.bst:components/dav1d.bst +- freedesktop-sdk.bst:components/fontconfig.bst +- freedesktop-sdk.bst:components/freetype.bst +- freedesktop-sdk.bst:components/fribidi.bst +- freedesktop-sdk.bst:components/lame.bst +- freedesktop-sdk.bst:components/libjxl.bst +- freedesktop-sdk.bst:components/libva.bst +- freedesktop-sdk.bst:components/libvdpau.bst +- freedesktop-sdk.bst:components/librsvg.bst +- freedesktop-sdk.bst:components/mpg123.bst +- freedesktop-sdk.bst:components/openal.bst +- freedesktop-sdk.bst:components/libpulse.bst +- freedesktop-sdk.bst:components/sdl2-compat.bst +- freedesktop-sdk.bst:components/aom.bst +- freedesktop-sdk.bst:components/gnutls.bst +- freedesktop-sdk.bst:components/speex.bst +- freedesktop-sdk.bst:components/ladspa-sdk.bst +- freedesktop-sdk.bst:components/lcms.bst +- freedesktop-sdk.bst:components/libtheora.bst +- freedesktop-sdk.bst:components/libgcrypt.bst +- freedesktop-sdk.bst:components/libvorbis.bst +- freedesktop-sdk.bst:components/libvpx.bst +- freedesktop-sdk.bst:components/opus.bst +- freedesktop-sdk.bst:components/openjpeg.bst +- freedesktop-sdk.bst:components/svt-av1.bst +- freedesktop-sdk.bst:components/vulkan-icd-loader.bst +- freedesktop-sdk.bst:components/v4l-utils.bst +- freedesktop-sdk.bst:components/libwebp.bst +- freedesktop-sdk.bst:components/xorg-lib-xcb.bst +- freedesktop-sdk.bst:components/libmysofa.bst + +variables: + optimize-debug: "false" + arch-conf: '' + ffmpeg-arch: '%{arch}' + (?): + - target_arch == "i686": + ffmpeg-arch: x86 + - target_arch in ["x86_64", "i686", "aarch64", "ppc64le"]: + arch-conf: >- + --enable-ffnvcodec + + conf-local: >- + --prefix="%{prefix}" + --libdir="%{libdir}" + --optflags="${CFLAGS}" + --extra-ldflags="${LDFLAGS}" + --disable-stripping + --disable-doc + --disable-static + --disable-encoders + --disable-decoders + --enable-shared + --enable-gnutls + --enable-gcrypt + --enable-ladspa + --enable-lcms2 + --enable-libaom + --enable-libdav1d + --enable-libmp3lame + --enable-libfontconfig + --enable-libfreetype + --enable-libfribidi + --enable-libjxl + --enable-libopus + --enable-libpulse + --enable-libspeex + --enable-libtheora + --enable-libvorbis + --enable-libvpx + --enable-librsvg + --enable-libwebp + --enable-libxml2 + --enable-libopenjpeg + --enable-libsvtav1 + --enable-openal + --enable-opengl + --enable-sdl2 + --enable-vulkan + --enable-zlib + --enable-libv4l2 + --enable-libxcb + --enable-vdpau + --enable-vaapi + --enable-pthreads + --enable-libmysofa + --arch="%{ffmpeg-arch}" + + conf-extra: '' + +# ffmpeg is not using autotools, but a configure and Makefile files +config: + configure-commands: + - ./configure %{conf-local} %{conf-extra} %{arch-conf} + diff --git a/elements/include/qt.yml b/elements/include/qt.yml index 8b89cf9..4ec4e17 100644 --- a/elements/include/qt.yml +++ b/elements/include/qt.yml @@ -2,7 +2,7 @@ build-depends: - freedesktop-sdk.bst:public-stacks/buildsystem-cmake.bst depends: -- freedesktop-sdk.bst:bootstrap-import.bst +- freedesktop-sdk.bst:public-stacks/runtime-minimal.bst variables: qt-api-version: "6.8" diff --git a/include/aliases.yml b/include/aliases.yml index 51cd08c..6ceaf81 100644 --- a/include/aliases.yml +++ b/include/aliases.yml @@ -14,5 +14,6 @@ aliases: # git aliases go here code_videolan: https://code.videolan.org/ + freedesktop: https://gitlab.freedesktop.org/ github: https://github.com/ gitlab: https://gitlab.com/ diff --git a/include/strip.yml b/include/strip.yml index ab002b5..265729d 100644 --- a/include/strip.yml +++ b/include/strip.yml @@ -22,12 +22,10 @@ variables: for p in %{toolchain-prefixes}; do OPTS+=("-t" "${p}") done - if [ -x "$(command -v freedesktop-sdk-stripper)" ]; then - freedesktop-sdk-stripper \ + freedesktop-sdk-stripper \ "${OPTS[@]}" \ "%{build-root}" \ "%{sourcedir}/%{stripdir-suffix}" \ "%{debugdatadir}/dwz/%{stripdir-suffix}" \ "%{debugdir}" \ "%{install-root}" - fi diff --git a/patches/ffmpeg/0010-fdo-people-fdk-aac-gpl-compatible.patch b/patches/ffmpeg/0010-fdo-people-fdk-aac-gpl-compatible.patch deleted file mode 100644 index 3ad414b..0000000 --- a/patches/ffmpeg/0010-fdo-people-fdk-aac-gpl-compatible.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 9723c1d91d8d3100397a8f3b684c41ccacb1c3f3 Mon Sep 17 00:00:00 2001 -From: tytan652 -Date: Mon, 6 May 2024 19:45:45 +0200 -Subject: [PATCH] Freedesktop SDK fdk-aac is GPL compatible - -It is the same as Fedora provides in their repo. - -See https://gitlab.com/freedesktop-sdk/mirrors/freedesktop_people/fdk-aac - -See https://bugzilla.redhat.com/show_bug.cgi?id=1501522#c112 ---- - configure | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure b/configure -index 4f5353f84b..f90e82ba43 100755 ---- a/configure -+++ b/configure -@@ -1872,7 +1872,6 @@ EXTERNAL_LIBRARY_GPL_LIST=" - - EXTERNAL_LIBRARY_NONFREE_LIST=" - decklink -- libfdk_aac - libtls - " - -@@ -1912,6 +1911,7 @@ EXTERNAL_LIBRARY_LIST=" - libcodec2 - libdav1d - libdc1394 -+ libfdk_aac - libflite - libfontconfig - libfreetype --- -2.45.0 diff --git a/patches/ffmpeg/0011-lavc-vaapi_encode-Query-surface-alignment.patch b/patches/ffmpeg/0010-lavc-vaapi_encode-Query-surface-alignment.patch similarity index 100% rename from patches/ffmpeg/0011-lavc-vaapi_encode-Query-surface-alignment.patch rename to patches/ffmpeg/0010-lavc-vaapi_encode-Query-surface-alignment.patch diff --git a/patches/ffmpeg/0012-lavc-vaapi_encode_h265-Use-surface-alignment.patch b/patches/ffmpeg/0011-lavc-vaapi_encode_h265-Use-surface-alignment.patch similarity index 100% rename from patches/ffmpeg/0012-lavc-vaapi_encode_h265-Use-surface-alignment.patch rename to patches/ffmpeg/0011-lavc-vaapi_encode_h265-Use-surface-alignment.patch diff --git a/patches/ffmpeg/0012-posix-ioctl-hack.patch b/patches/ffmpeg/0012-posix-ioctl-hack.patch new file mode 100644 index 0000000..9e81afd --- /dev/null +++ b/patches/ffmpeg/0012-posix-ioctl-hack.patch @@ -0,0 +1,35 @@ +diff --git a/configure b/configure +index ffa407d53d..aa73b1c067 100755 +--- a/configure ++++ b/configure +@@ -2522,7 +2522,7 @@ HAVE_LIST=" + opencl_videotoolbox + perl + pod2man +- posix_ioctl ++ ffmpeg_posix_ioctl + texi2html + xmllint + zlib_gzip +@@ -7181,7 +7181,7 @@ xmllint --version > /dev/null 2>&1 && enable xmllint || disable xmllint + check_headers linux/fb.h + check_headers linux/videodev2.h + test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete +-test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable posix_ioctl ++test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable ffmpeg_posix_ioctl + + # check V4L2 codecs available in the API + if enabled v4l2_m2m; then +diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c +index 0ae6872338..be42aaaf88 100644 +--- a/libavdevice/v4l2.c ++++ b/libavdevice/v4l2.c +@@ -111,7 +111,7 @@ struct video_data { + int (*open_f)(const char *file, int oflag, ...); + int (*close_f)(int fd); + int (*dup_f)(int fd); +-#if HAVE_POSIX_IOCTL ++#if HAVE_FFMPEG_POSIX_IOCTL + int (*ioctl_f)(int fd, int request, ...); + #else + int (*ioctl_f)(int fd, unsigned long int request, ...); diff --git a/patches/ffmpeg/0013-svt-av1-v3.patch b/patches/ffmpeg/0013-svt-av1-v3.patch new file mode 100644 index 0000000..fb1a372 --- /dev/null +++ b/patches/ffmpeg/0013-svt-av1-v3.patch @@ -0,0 +1,30 @@ +From d1ed5c06e3edc5f2b5f3664c80121fa55b0baa95 Mon Sep 17 00:00:00 2001 +From: Gyan Doshi +Date: Sat, 22 Feb 2025 10:38:53 +0530 +Subject: [PATCH] avcodec/libsvtav1: unbreak build with latest svtav1 + +SVT-AV1 made a change in their public API in 988e930c but without a +version bump or any other accessible marker, thus breaking ffmpeg build +with current versions of SVT-AV1. + +They have finally bumped versions a month later, so check added. +--- + libavcodec/libsvtav1.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c +index 79b28eb4df546..43fe531fde74d 100644 +--- a/libavcodec/libsvtav1.c ++++ b/libavcodec/libsvtav1.c +@@ -435,7 +435,11 @@ static av_cold int eb_enc_init(AVCodecContext *avctx) + + svt_enc->eos_flag = EOS_NOT_REACHED; + ++#if SVT_AV1_CHECK_VERSION(3, 0, 0) ++ svt_ret = svt_av1_enc_init_handle(&svt_enc->svt_handle, &svt_enc->enc_params); ++#else + svt_ret = svt_av1_enc_init_handle(&svt_enc->svt_handle, svt_enc, &svt_enc->enc_params); ++#endif + if (svt_ret != EB_ErrorNone) { + return svt_print_error(avctx, svt_ret, "Error initializing encoder handle"); + } diff --git a/plugins/sources/create_custom_fdo_sdk_include_ffmpeg.py b/plugins/sources/create_custom_fdo_sdk_include_ffmpeg.py deleted file mode 100644 index dbd2ecb..0000000 --- a/plugins/sources/create_custom_fdo_sdk_include_ffmpeg.py +++ /dev/null @@ -1,228 +0,0 @@ -""" -create_custom_fdo_sdk_include_ffmpeg - Freedesktop SDK base FFmpeg dependencies and variables as an include -========================================= - -This source is only meant to be used with 'elements/freedesktop-sdk.bst' as a -junction of the Freedesktop SDK project. - -It reads 'elements/include/ffmpeg.yml' and 'elements/components/ffmpeg.bst' -from Freedesktop SDK and creates 'elements/include/ffmpeg-custom.yml' in -the junction. - -This created include file contains the dependencies list and variables of -Freedesktop SDK base FFmpeg. - -The purpose of this file is to be used as a base for OBS Studio FFmpeg build -by adding dependencies and flags to it. - -**Available variables in the include:** - - conf-local: Main Freedesktop SDK FFmpeg config flags, some flags need - to be re-added see next list - - fdo-encoders: Freedesktop SDK allowed encoders - - fdo-decoders: Freedesktop SDK allowed decoders - - fdo-conf-extra: Base Freedesktop SDK FFmpeg extra config flags, some - flags need to be re-added see next list - -**Config option to re-add in the FFmpeg element configure command:** - - '--prefix="%{prefix}"' - - '--libdir="%{libdir}"' - - '--arch="%{arch}"' - - '%{conf-local}' - - '%{fdo-conf-extra}' - - '--enable-encoder=%{fdo-encoders}' - - '--enable-decoder=%{fdo-decoders}' - - '--disable-decoder=h264,hevc' (optional, also disables hwaccels) -""" - -import os -from ruamel.yaml import YAML -from buildstream import Source, SourceError -from buildstream import utils - - -class CreateCustomFdoSdkIncludeFFmpeg(Source): - BST_MIN_VERSION = "2.0" - - BST_REQUIRES_PREVIOUS_SOURCES_STAGE = True - - FDO_SDK_INCLUDE_FFMPEG_PATH = "elements/include/ffmpeg.yml" - FDO_SDK_BASE_FFMPEG_PATH = "elements/components/ffmpeg.bst" - CUSTOM_INCLUDE_FFMPEG_PATH = "elements/include/ffmpeg-custom.yml" - - def configure(self, node): - pass - - def preflight(self): - self.path = os.path.realpath(__file__) - self.yaml = YAML() - - def get_unique_key(self): - # Unavoidable use of private API to get Freedesktop SDK digest - with self._cache_directory() as directory: - self.include_digest = directory._get_digest() - - return [ - utils.sha256sum(self.path), - self.CUSTOM_INCLUDE_FFMPEG_PATH, - self.include_digest.hash, - ] - - def load_ref(self, node): - pass - - def is_resolved(self): - return True - - def is_cached(self): - return True - - def get_ref(self): - return None - - def set_ref(self, ref, node): - pass - - def fetch(self): - pass - - def stage(self, directory): - with self.timed_activity( - f"Creating '{self.CUSTOM_INCLUDE_FFMPEG_PATH}' based on '{self.FDO_SDK_INCLUDE_FFMPEG_PATH}' and '{self.FDO_SDK_BASE_FFMPEG_PATH}'" - ): - data = {} - try: - with open( - os.path.join(directory, self.FDO_SDK_INCLUDE_FFMPEG_PATH), - mode="r", - encoding="utf-8", - ) as include: - data = self.yaml.load(include) - - except IOError as e: - raise SourceError( - f"'{self.FDO_SDK_INCLUDE_FFMPEG_PATH}' not found", - reason="include-ffmpeg-not-found", - ) from e - - # Adapt dependencies by adding the junction name - for depends in ["build-depends", "depends"]: - data[depends] = add_junction(data[depends]) - - # Remove variables relying only on another variable - for variable in ["ffmpeg-arch", "(?)"]: - data["variables"].pop(variable) - - # Remove variable usage in conf-local - old_conf_local = data["variables"]["conf-local"].split(" ") - conf_local = [] - for s in old_conf_local: - if not ( - s.startswith("--prefix") # Removed to be modifiable - or s.startswith("--libdir") # Removed to be modifiable - or s.startswith("--arch") - ): # Relies on a removed variable - conf_local.append(s) - - data["variables"]["conf-local"] = " ".join(conf_local) - - # Remove conf-extra which is just a placeholder for the config item - data["variables"].pop("conf-extra") - - # Remove sources (we use our own) and cpe if present since it is bound to removed sources - data.pop("sources") - if "cpe" in data["public"]: - data["public"].pop("cpe") - - # Remove split-rules since they rely on variable and also we will apply our own - data["public"]["bst"].pop("split-rules") - - # Remove bst if empty and public if bst was the only remaining item - if len(data["public"]["bst"].items()) == 0: - if len(data["public"].items()) == 1: - data.pop("public") - else: - data["public"].pop["bst"] - - # Remove config since it relies on variable - data.pop("config") - - try: - with open( - os.path.join(directory, self.FDO_SDK_BASE_FFMPEG_PATH), - mode="r", - encoding="utf-8", - ) as element: - base = self.yaml.load(element) - - # Add base FFmpeg dependencies - for depends in ["build-depends", "depends"]: - if depends not in base: - continue - - # Adapt dependencies by adding the junction name - for depend in base[ - depends - ][ - "(>)" - ]: # '(>)' is always present to avoid overriding include dependencies - data[depends].append(f"freedesktop-sdk.bst:{depend}") - - # Add base FFmpeg variables with a prefix (e.g. allowed encoders/decoders and extra option flags) - for name, value in base["variables"].items(): - if name in ["encoders", "decoders"]: - extra_name = f"extra-{name}" - - # Remove variables usage from allowed encoders/decoders lists - value = value.replace(",%{" + extra_name + "}", "") - - # Merge extra encoder/decoders to it if non-empty - if extra_name in base["variables"]: - extra = base["variables"][extra_name] - if len(extra) != 0: - value += f",{extra}" - - # Skip extra encoder/decoders since it was merged in non-extra - if name.startswith("extra-") and name.endswith("coders"): - continue - - # Remove variables usage from extra option flags and remove H264 and HEVC from the disable argument - if name == "conf-extra": - value = ( - value.replace(" --enable-encoder=%{" + "encoders}", "") - .replace(" --enable-decoder=%{" + "decoders}", "") - .replace( - 'disable-decoder="h264,hevc,', 'disable-decoder="' - ) - ) - - data["variables"][f"fdo-{name}"] = value - - except IOError as e: - raise SourceError( - f"'{self.FDO_SDK_BASE_FFMPEG_PATH}' not found", - reason="ffmpeg-element-not-found", - ) from e - - try: - with open( - os.path.join(directory, self.CUSTOM_INCLUDE_FFMPEG_PATH), - mode="w", - encoding="utf-8", - ) as include: - self.yaml.dump(data, include) - - except IOError as e: - raise SourceError( - f"Unable to create '{self.CUSTOM_INCLUDE_FFMPEG_PATH}'", - reason="custom-include-not-created", - ) from e - - -def add_junction(depends_array): - for i, s in enumerate(depends_array): - depends_array[i] = f"freedesktop-sdk.bst:{s}" - return depends_array - - -def setup(): - return CreateCustomFdoSdkIncludeFFmpeg diff --git a/project.conf b/project.conf index 67fc61b..14476b6 100644 --- a/project.conf +++ b/project.conf @@ -90,6 +90,7 @@ elements: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_FLAGS_RELWITHDEBINFO="-DNDEBUG" -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-DNDEBUG" + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 generator: Ninja # srt buildsystem disobeys CMAKE_BUILD_TYPE but setting ENABLE_DEBUG to 2 works around the issue # https://github.com/Haivision/srt/blob/09f35c0f1743e23f514cb41444504a7faeacf89e/CMakeLists.txt#L70 @@ -104,11 +105,6 @@ elements: -Ddefault_library=shared plugins: -- origin: local - path: plugins/sources - sources: - - create_custom_fdo_sdk_include_ffmpeg - - origin: junction junction: plugins/buildstream-plugins.bst elements: