# Maintainer: Markus Fritsche <fritsche.markus@gmail.com>
#
# mpv-fourier — mpv with the fourier-umbrella patches. The first patch
# slot exists for the vo_dmabuf_wayland plane-semantics fix per
# marfrit/dmabuf-modifier-triage#1: mpv currently constructs the
# zwp_linux_buffer_params_v1 wl_protocol message with internally
# inconsistent plane semantics on V4L2 stateless decoder dmabufs (per-
# plane fds combined with single-allocation offset for plane 1), causing
# KWin to read the UV chroma plane past-EOF and render solid dark green
# on ohm (RK3566 + hantro G1 + Mali-G52). The patch is not yet written —
# this scaffold prepares the shipping path for when iter1 lands.
#
# Build configuration mirrors stock arch's mpv PKGBUILD (which builds
# successfully). Key detail: --auto-features auto is required because
# arch-meson defaults to --auto-features enabled, which makes mpv's
# platform-specific features (win32-threads, etc.) required and fails
# the build on Linux.
#
# Campaign: ~/src/dmabuf-modifier-triage/ (Phase 0 closed 2026-05-08)
# Upstream: https://github.com/mpv-player/mpv

pkgname=mpv-fourier
_upstreampkg=mpv
epoch=1
pkgver=0.41.0
pkgrel=2
pkgdesc='mpv with fourier-umbrella patches (vo_dmabuf_wayland plane-semantics fix slot)'
arch=('aarch64')
url='https://mpv.io/'
license=('GPL-2.0-or-later AND LGPL-2.1-or-later')
depends=(
    alsa-lib desktop-file-utils ffmpeg glibc hicolor-icon-theme
    jack lcms2 libarchive libass libbluray libcdio
    libcdio-paranoia libdisplay-info libdrm libdvdnav libdvdread libegl libgl
    libglvnd libjpeg-turbo libplacebo libpulse libsixel libva
    libvdpau libx11 libxext libxkbcommon libxpresent libxrandr
    libxss libxv luajit mesa mujs libpipewire rubberband sdl2
    openal uchardet vapoursynth vulkan-icd-loader wayland zlib
)
makedepends=(
    git meson python-docutils ladspa wayland-protocols
    vulkan-headers
)
optdepends=('yt-dlp: for video-sharing websites playback')
provides=("${_upstreampkg}=${pkgver}" 'libmpv.so')
conflicts=("${_upstreampkg}")
replaces=("${_upstreampkg}")
options=('!emptydirs')

source=(
    "${_upstreampkg}-${pkgver}.tar.gz::https://github.com/mpv-player/${_upstreampkg}/archive/v${pkgver}/${_upstreampkg}-${pkgver}.tar.gz"
)
sha256sums=(
    'ee21092a5ee427353392360929dc64645c54479aefdb5babc5cfbb5fad626209'
)

prepare() {
    cd "${_upstreampkg}-${pkgver}"

    # Patch slot — iter1 of dmabuf-modifier-triage will produce the actual
    # vo_dmabuf_wayland.c plane-semantics fix and add it as 0001-... here.
    # When the patch lands, add it to source=() above + sha256sums=() and
    # uncomment the patch -p1 below.
    #
    # patch -p1 < "${srcdir}/0001-vo_dmabuf_wayland-plane-semantics.patch"
    :
}

build() {
    local _meson_options=(
        --auto-features auto

        -Dlibmpv=true
        -Dgl-x11=enabled
        -Dcaca=disabled
        -Dcdda=enabled
        -Ddrm=enabled
        -Ddvbin=enabled
        -Ddvdnav=enabled
        -Dlibarchive=enabled
        -Dopenal=enabled
        -Dsdl2-audio=enabled
        -Dsdl2-video=enabled
        -Dsdl2-gamepad=enabled
    )

    arch-meson "${_upstreampkg}-${pkgver}" build "${_meson_options[@]}"
    meson compile -C build
}

package() {
    meson install -C build --destdir "${pkgdir}"

    # Drop private linkage entries (they only matter for static linking).
    sed -i -e '/Requires.private/d' -e '/Libs.private/d' \
        "${pkgdir}/usr/lib/pkgconfig/mpv.pc"

    install -m0644 "${_upstreampkg}-${pkgver}/DOCS/encoding.rst" \
        "${_upstreampkg}-${pkgver}/DOCS/tech-overview.txt" \
        -t "${pkgdir}/usr/share/doc/mpv/"

    install -m0644 "${_upstreampkg}-${pkgver}"/TOOLS/{umpv,mpv_identify.sh,stats-conv.py,idet.sh,lua/*} \
        -D -t "${pkgdir}/usr/share/mpv/scripts/"
}
