# Maintainer: Markus Fritsche <fritsche.markus@gmail.com>
#
# libva-v4l2-request-fourier — VA-API backend for V4L2 stateless decoders,
# multiplanar fork. Successor to the predecessor experimental package
# libva-v4l2-request-ohm-gl-fix (tarball + 18-patch stack); this package
# tracks the campaign fork's git history directly, so iteration sweeps
# (DEBUG removal, follow-up bugfixes) land in a clean linear log.
#
# Campaign: ~/src/libva-multiplanar/ (iter8 close 2026-05-06) plus
# ~/src/fresnel-fourier/ which carried the fork to iter38b — multi-device
# probe so a single libva session serves all 5 codecs (rkvdec H.264 +
# HEVC + VP9, hantro MPEG-2 + VP8) plus a bounds-check fix for
# MAX_PROFILES. Pinned below.
# Fork repo: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
# Bootlin upstream: https://github.com/bootlin/libva-v4l2-request
#
# Build target: fermi LXC actrunner-aarch64-hertz via marfrit-packages
# Gitea Actions (path=arch/libva-v4l2-request-fourier triggers the
# libva-v4l2-request-fourier-aarch64 job — wire up alongside the existing
# ffmpeg-v4l2-request-git job in .gitea/workflows/build.yml).
# Alternative: boltzmann via his subagent + marfrit-publish.

pkgname=libva-v4l2-request-fourier
epoch=1
_upstreampkg=libva-v4l2-request

# Pin the fork tip. c1bb444 = PR #9 merge "h264: max_num_ref_frames
# fallback + libva-boundary instrumentation (#8)" — addresses the
# libva-side portion of marfrit/libva-v4l2-request-fourier#8: the
# daedalus_v4l2-via-libavcodec strict consumer rejected frames whose
# sps.max_num_ref_frames was 0 (older ffmpeg-vaapi paths leave the
# field unset and HW decoders tolerated it). Adds a per-profile spec
# minimum fallback (counts valid DPB entries first; 1 for baseline /
# 4 for main+high if even that is 0) and a one-line request_log at
# h264_set_controls entry dumping raw VAAPI bitfields (seq_fields,
# pic_fields, num_ref_frames, bit_depth_*) for disambiguating where
# the still-open PPS-flag-zero portion of issue #8 originates.
#
# Prior pin (9898331) was the LIBVA-2 close — config-side video_fd_daedalus
# added to the profile enumeration probe array.  c332d34 (LIBVA-1) added
# the per-codec dispatch.  Earlier de27e95 (Phase 8.13 diagnostic),
# 7ac934e (iter38b multi-device probe + MAX_PROFILES bounds-check fix).
_commit=c1bb444d0731ca7ca831c7e01ec4b52ed736ca8e

# Project version from meson.build (1.0.0) + commit count + short sha,
# matching the ffmpeg-v4l2-request-fourier convention. Recomputed at
# build time by pkgver() below; the static value here is a placeholder
# so AUR-style consumers see something coherent before src/ exists.
pkgver=1.0.0.r382.c1bb444
pkgrel=1
pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)"
arch=('aarch64')
url="https://git.reauktion.de/marfrit/libva-v4l2-request-fourier"
license=('LGPL2.1' 'MIT')
depends=('libva' 'libdrm' 'systemd-libs')
makedepends=('meson' 'ninja' 'pkgconf' 'git')
provides=("${_upstreampkg}=${pkgver}" 'libva-driver')
conflicts=("${_upstreampkg}" 'libva-v4l2-request-ohm-gl-fix')
replaces=("${_upstreampkg}" 'libva-v4l2-request-ohm-gl-fix')

source=("git+https://git.reauktion.de/marfrit/libva-v4l2-request-fourier.git#commit=${_commit}")
sha256sums=('SKIP')

pkgver() {
    cd "${srcdir}/${_upstreampkg}-fourier"
    printf '1.0.0.r%s.%s' \
        "$(git rev-list --count HEAD)" \
        "$(git rev-parse --short=7 HEAD)"
}

build() {
    cd "${srcdir}/${_upstreampkg}-fourier"
    # meson_options.txt only exposes 'kernel_headers' — leave it empty to
    # use system /usr/include kernel UAPI headers. No per-codec toggles.
    #
    # b_lto=false: override arch-meson's wrapper default of `-D b_lto=true`,
    # which the makepkg.conf OPTIONS=(..., !lto, ...) line does NOT actually
    # override (arch-meson hard-codes b_lto=true). The hand-built reproducer
    # from issue #17 shows: LTO/ICF kernel-folds per-codec helpers and HEVC's
    # multi-control-struct chain (SPS+PPS+DECODE_PARAMS+SLICE_PARAMS) gets a
    # wrong helper-instance pulled in at vaEndPicture → segfault. The 4 other
    # codecs (single-control-struct) tolerate the folding by accident.
    arch-meson build --buildtype=release -Db_lto=false
    meson compile -C build
}

package() {
    cd "${srcdir}/${_upstreampkg}-fourier"
    meson install -C build --destdir "${pkgdir}"

    install -Dm644 COPYING       "${pkgdir}/usr/share/licenses/${pkgname}/COPYING"
    install -Dm644 COPYING.LGPL  "${pkgdir}/usr/share/licenses/${pkgname}/COPYING.LGPL"
    install -Dm644 COPYING.MIT   "${pkgdir}/usr/share/licenses/${pkgname}/COPYING.MIT"
}
