6 Commits

Author SHA1 Message Date
marfrit ce2fff1a4f libva-v4l2-request-fourier: bump pin to c454618 (#15 transparent resize)
Bumps both Arch PKGBUILD and Debian build-deb.sh pins to PR #16 —
codec_store_buffer + request_pool_resize transparent OUTPUT-pool grow
on a mid-session resolution upshift overrun.  Picks up the frame-
survival path that supersedes #13's drop-and-recreate fallback.

Dual-pin per feedback_marfrit_packages_dual_pin so both Arch and
Debian repos see check-already-published.sh report a new version.
2026-05-21 13:24:21 +02:00
marfrit 9301894997 Merge pull request 'daedalus-v4l2{,-dkms}: f0d4186 -> 79256dc — H.264 B-frame reorder fix + menu ctrls' (#67) from claude-noether/marfrit-packages:noether/daedalus-bump-79256dc into main
Reviewed-on: marfrit/marfrit-packages#67
2026-05-21 10:51:14 +00:00
claude-noether f21c1ff80a daedalus-v4l2{,-dkms}: f0d4186 -> 79256dc — H.264 B-frame reorder + menu ctrls
Lock-step bump of both packages to daedalus-v4l2#7 + #4.  PROTO_VERSION
bumps 0 → 1 at the daemon ↔ kernel chardev wire: REQ_DECODE adds
__u64 src_pts (the OUTPUT vb2 timestamp); RESP_FRAME adds __u32 flags
(HAS_PIXELS / SRC_CONSUMED) + __u64 output_src_pts (= frame->pts on
drain).  Both .debs must be installed atomically or the chardev
handshake rejects the version mismatch.

  * daedalus-v4l2: daemon's send_packet → receive_frame loop now
    stamps pkt->pts = req->src_pts and looks up the cookie for each
    drained frame via frame->pts.  chardev_client emits multiple
    RESP_FRAME messages per REQ_DECODE when libavcodec's display-
    order DPB releases an earlier frame on receipt of a later
    bitstream — fixes the "2 1 4 3 6 5" pair-swap on H.264 streams
    with B-frames.

  * daedalus-v4l2-dkms: kernel device_run mirrors src_buf timestamp
    into REQ_DECODE.src_pts.  Completion path splits HAS_PIXELS /
    SRC_CONSUMED: src is released as soon as send_packet succeeds
    (so the m2m scheduler moves on), dst stays parked until the
    matching frame is drained later.  TIMESTAMP_COPY's auto src→dst
    pairing no longer applies once lifecycles decouple — dst is
    stamped explicitly from inflight->src_pts at HAS_PIXELS time.

  * daedalus-v4l2-dkms also carries forward the -2 multi-kernel
    postinst fix (#64) from the prior PKGREL.  PKGREL resets to 1 on
    the new upstream pin.

The daedalus-v4l2#4 H.264 DECODE_MODE + START_CODE menu controls (a
cosmetic warning fix that PR landed alongside #7) is also subsumed —
"Unable to set control(s) error_idx=2/2" no longer fires.

Refs:
  * reauktion/daedalus-v4l2#7
  * reauktion/daedalus-v4l2#4
  * reauktion/daedalus-v4l2#6
2026-05-21 12:41:12 +02:00
marfrit e15b887d8d Merge pull request 'libva-v4l2-request-fourier: bump pin to 2860d75 (#13 bounds-check fix)' (#66) from claude-noether/marfrit-packages:bump-libva-fourier-2860d75-issue-13 into main
Reviewed-on: marfrit/marfrit-packages#66
2026-05-21 10:38:03 +00:00
marfrit b69db65037 libva-v4l2-request-fourier: bump pin to 2860d75 (#13 bounds-check fix)
Bumps both the Arch PKGBUILD and the Debian build-deb.sh pins to PR
#14 merge — codec_store_buffer bounds-checks for VASliceDataBufferType.
Picks up the SIGSEGV fix for mpv --hwdec=vaapi-copy on resolution
upshift mid-stream (issue #13).

Dual-pin so check-already-published.sh detects both pool ABIs as
needing a fresh build.
2026-05-21 12:19:04 +02:00
marfrit adcc824bf7 Merge pull request 'daedalus-v4l2-dkms: postinst — autoinstall for all installed kernels (#64)' (#65) from claude-noether/marfrit-packages:fix/daedalus-dkms-multi-kernel-64 into main
Reviewed-on: marfrit/marfrit-packages#65
2026-05-21 09:28:47 +00:00
8 changed files with 108 additions and 53 deletions
+5 -3
View File
@@ -18,10 +18,12 @@ _module=daedalus_v4l2
# Same pin as arch/daedalus-v4l2 — keep kernel module + daemon # Same pin as arch/daedalus-v4l2 — keep kernel module + daemon
# bit-versioned together so the chardev wire protocol stays in sync. # bit-versioned together so the chardev wire protocol stays in sync.
_commit=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 # PROTO_VERSION 0 → 1 at this pin (H.264 B-frame reorder fix); must
# install both packages atomically.
_commit=79256dc7ef41f83873ca9c23db20f5888858e65d
pkgver=0.1.0.r24.f0d4186 pkgver=0.1.0.r28.79256dc
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) pkgrel=1 # reset for new upstream pin (79256dc — H.264 B-frame reorder fix)
pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5" pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5"
arch=('any') arch=('any')
url="https://git.reauktion.de/reauktion/daedalus-v4l2" url="https://git.reauktion.de/reauktion/daedalus-v4l2"
+9 -8
View File
@@ -16,17 +16,18 @@
pkgname=daedalus-v4l2 pkgname=daedalus-v4l2
_upstreampkg=daedalus-v4l2 _upstreampkg=daedalus-v4l2
# Pin the daedalus-v4l2 tip. 481279c = "Phase 8.13: byte-exact end-to- # Pin the daedalus-v4l2 tip. 79256dc = "kernel + daemon: H.264 B-frame
# end via libva (consumer target hit)" — first commit where the full # display reorder fix (closes #6)" — adds the wire-protocol src_pts /
# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a # output_src_pts / RESP_FRAME flags split that lets H.264 streams with
# pixel-correct decoded frame back in ffmpeg. Promote to a later pin # B-frames preserve display order through libva → kernel → daemon.
# only after a future phase closes cleanly. # PROTO_VERSION bumps 0 → 1; lock-step userspace + kernel rebuild
_commit=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 # REQUIRED (daedalus-v4l2-dkms PKGBUILD pinned to the same commit).
_commit=79256dc7ef41f83873ca9c23db20f5888858e65d
# 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each # 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each
# Phase 8.x close. pkgver() recomputes at build time. # Phase 8.x close. pkgver() recomputes at build time.
pkgver=0.1.0.r24.f0d4186 pkgver=0.1.0.r28.79256dc
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) pkgrel=1 # reset for new upstream pin (79256dc — H.264 B-frame reorder fix)
pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)" pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)"
arch=('aarch64') arch=('aarch64')
url="https://git.reauktion.de/reauktion/daedalus-v4l2" url="https://git.reauktion.de/reauktion/daedalus-v4l2"
+17 -17
View File
@@ -24,29 +24,29 @@ pkgname=libva-v4l2-request-fourier
epoch=1 epoch=1
_upstreampkg=libva-v4l2-request _upstreampkg=libva-v4l2-request
# Pin the fork tip. 77f9236 = PR #12 merge "av1: populate # Pin the fork tip. c454618 = PR #16 merge "picture, request_pool:
# V4L2_CID_STATELESS_AV1_SEQUENCE in codec_set_controls (#11 libva side)" # transparent OUTPUT-pool resize on bitstream overrun (#15)" —
# — addresses the libva-side portion of marfrit/libva-v4l2-request-fourier#11. # follow-up root-cause fix to #13/#14. On a mid-stream bitstream-
# Adds src/av1.{c,h} with av1_set_controls that maps VAAPI's # budget overrun (typical cause: SPS-driven resolution upshift in an
# VAPictureParameterBufferAV1.seq_info_fields onto struct # adaptive-bitrate stream), codec_store_buffer now snapshots the in-
# v4l2_ctrl_av1_sequence and queues V4L2_CID_STATELESS_AV1_SEQUENCE via # flight surface's accumulated bytes, releases its OUTPUT pool slot,
# S_EXT_CTRLS. The daedalus_v4l2 daemon track is the consumer that turns # calls request_pool_resize (STREAMOFF → REQBUFS(0) → S_FMT with
# the ctrl into an OBU_SEQUENCE_HEADER and prepends it to the slice # 2×sizeimage hint, capped at 1 GiB, page-aligned → CREATE_BUFS →
# bitstream so libdav1d can parse the (sequence-header-stripped) OUTPUT # mmap → media_request_alloc → STREAMON), re-acquires a slot, re-
# buffer that ffmpeg-vaapi delivers. Until the daemon side lands the ctrl # mirrors the surface's source_{data,size,request_fd}, restores the
# is just sitting in the request unused — no-cost no-op for HW decoders # bytes, and continues. The frame survives instead of being dropped
# (vpu981 parses OBU bytes directly). # back to libavcodec for surface recreation. CAPTURE side untouched
# (per-queue V4L2 streaming independence).
# #
# Prior pin (c1bb444) = PR #9 merge — h264_set_controls # Prior pin (2860d75) = PR #14 merge — codec_store_buffer bounds-
# max_num_ref_frames fallback + libva-boundary instrumentation for the # check floor (#13).
# daedalus consumer-strict path (issue #8 libva side). _commit=c454618ae11addce2e17b560f4deeacbed067d98
_commit=77f92364661419f6e5a7bd827c1b845b4e426569
# Project version from meson.build (1.0.0) + commit count + short sha, # Project version from meson.build (1.0.0) + commit count + short sha,
# matching the ffmpeg-v4l2-request-fourier convention. Recomputed at # matching the ffmpeg-v4l2-request-fourier convention. Recomputed at
# build time by pkgver() below; the static value here is a placeholder # build time by pkgver() below; the static value here is a placeholder
# so AUR-style consumers see something coherent before src/ exists. # so AUR-style consumers see something coherent before src/ exists.
pkgver=1.0.0.r386.77f9236 pkgver=1.0.0.r390.c454618
pkgrel=1 pkgrel=1
pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)" pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)"
arch=('aarch64') arch=('aarch64')
+3 -3
View File
@@ -14,9 +14,9 @@
# Sibling userspace package: ../daedalus-v4l2/build-deb.sh # Sibling userspace package: ../daedalus-v4l2/build-deb.sh
set -euo pipefail set -euo pipefail
UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 UPSTREAM_COMMIT=79256dc7ef41f83873ca9c23db20f5888858e65d
PKGVER=0.1.0+r24+gf0d4186 PKGVER=0.1.0+r28+g79256dc
PKGREL=2 # postinst: autoinstall for every installed kernel with headers (#64) PKGREL=1 # reset for new upstream pin (79256dc — H.264 B-frame reorder fix); still carries the #64 multi-kernel postinst fix
MODULE_NAME=daedalus_v4l2 MODULE_NAME=daedalus_v4l2
HERE=$(dirname "$(readlink -f "$0")") HERE=$(dirname "$(readlink -f "$0")")
+22
View File
@@ -1,3 +1,25 @@
daedalus-v4l2-dkms (0.1.0+r28+g79256dc-1) bookworm trixie; urgency=medium
* Bump to 79256dc — H.264 B-frame display reorder fix (closes
daedalus-v4l2#6). libavcodec's H.264 decoder reorders output to
display order before returning from avcodec_receive_frame; the
daemon was binding each REQ_DECODE's pixels to the cookie of the
bitstream that triggered the receive_frame call, not the cookie
of the bitstream that actually produced the picture. For B-frame
sequences this paired cookie N's CAPTURE buffer with cookie N-2's
pixels and silently lost intermediate frames — visible as
"2 1 4 3 6 5" frame pairing in mpv / Firefox on Pi CM5.
* Wire-protocol bump (DAEDALUS_PROTO_VERSION 0 → 1): REQ_DECODE
gains __u64 src_pts; RESP_FRAME gains __u32 flags +
__u64 output_src_pts. Kernel + daemon must install atomically
(this package + daedalus-v4l2 0.1.0+r28+g79256dc).
* Carries forward the #64 multi-kernel postinst fix from -2:
autoinstall for every /lib/modules/*/build that resolves to real
headers, not just $(uname -r).
* Closes #64.
-- Markus Fritsche <mfritsche@reauktion.de> Thu, 21 May 2026 12:00:00 +0000
daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-2) bookworm trixie; urgency=medium daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-2) bookworm trixie; urgency=medium
* postinst: autoinstall for every installed kernel with headers, not * postinst: autoinstall for every installed kernel with headers, not
+10 -7
View File
@@ -11,13 +11,16 @@
# Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2 # Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2
set -euo pipefail set -euo pipefail
# Same pin as the Arch PKGBUILD. 481279c = "Phase 8.13: byte-exact # Same pin as the Arch PKGBUILD. 79256dc = "kernel + daemon: H.264
# end-to-end via libva (consumer target hit)" — first commit where the # B-frame display reorder fix (closes #6)" — adds the wire-protocol
# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands # src_pts / output_src_pts / RESP_FRAME flags split that lets H.264
# a pixel-correct decoded frame back in ffmpeg. # streams with B-frames preserve display order through libva → kernel
UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 # → daemon. PROTO_VERSION bumps 0 → 1; lock-step userspace + kernel
PKGVER=0.1.0+r24+gf0d4186 # rebuild REQUIRED (daedalus-v4l2-dkms build-deb.sh pinned to the same
PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) # commit).
UPSTREAM_COMMIT=79256dc7ef41f83873ca9c23db20f5888858e65d
PKGVER=0.1.0+r28+g79256dc
PKGREL=1 # reset for new upstream pin (79256dc — H.264 B-frame reorder fix)
HERE=$(dirname "$(readlink -f "$0")") HERE=$(dirname "$(readlink -f "$0")")
+24
View File
@@ -1,3 +1,27 @@
daedalus-v4l2 (0.1.0+r28+g79256dc-1) bookworm trixie; urgency=medium
* Bump to 79256dc — H.264 B-frame display reorder fix (closes
daedalus-v4l2#6 + #4 menu controls). Daemon side: the
avcodec_send_packet → receive_frame loop now stamps pkt->pts =
req->src_pts so libavcodec's display-ordered frame->pts identifies
which OUTPUT bitstream's pixels each drained frame belongs to.
chardev_client maintains a (src_pts → cookie) lookup table so the
daemon can ship pixels to the cookie of the *originating*
bitstream, not the cookie of whatever REQ triggered the
receive_frame call. Multiple RESP_FRAME messages per REQ_DECODE
are now possible (one for the just-consumed src, one or more for
drained pixels).
* Wire-protocol bump (DAEDALUS_PROTO_VERSION 0 → 1): REQ_DECODE
gains __u64 src_pts; RESP_FRAME gains __u32 flags +
__u64 output_src_pts. Daemon + kernel must install atomically
(this package + daedalus-v4l2-dkms 0.1.0+r28+g79256dc).
* Also subsumes 79256dc's predecessor 7ff2d89 — H.264 DECODE_MODE +
START_CODE menu-control registration that retires the
"Unable to set control(s) error_idx=2/2" warning libva-v4l2-
request emitted on every context init.
-- Markus Fritsche <mfritsche@reauktion.de> Thu, 21 May 2026 12:00:00 +0000
daedalus-v4l2 (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium daedalus-v4l2 (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium
* Bump to f0d4186 — kernel per-ctx vb2 lock fix. daedalus_queue_init * Bump to f0d4186 — kernel per-ctx vb2 lock fix. daedalus_queue_init
+18 -15
View File
@@ -10,22 +10,25 @@
# Upstream fork: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier # Upstream fork: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
set -euo pipefail set -euo pipefail
# Same pin as the Arch PKGBUILD. 77f9236 = PR #12 merge "av1: # Same pin as the Arch PKGBUILD. c454618 = PR #16 merge "picture,
# populate V4L2_CID_STATELESS_AV1_SEQUENCE in codec_set_controls # request_pool: transparent OUTPUT-pool resize on bitstream overrun
# (#11 libva side)" — adds src/av1.{c,h} with av1_set_controls that # (#15)" — follow-up root-cause fix to #13/#14. On a mid-stream
# maps VAAPI's VAPictureParameterBufferAV1.seq_info_fields onto # bitstream-budget overrun (typical cause: SPS-driven resolution
# struct v4l2_ctrl_av1_sequence and queues V4L2_CID_STATELESS_AV1_ # upshift in an adaptive-bitrate stream), codec_store_buffer now
# SEQUENCE via S_EXT_CTRLS. The daedalus_v4l2 daemon track is the # snapshots the in-flight surface's accumulated bytes, releases its
# consumer that turns the ctrl into an OBU_SEQUENCE_HEADER and # OUTPUT pool slot, calls request_pool_resize (STREAMOFF →
# prepends it to the slice bitstream so libdav1d can parse the # REQBUFS(0) → S_FMT with 2×sizeimage hint, capped at 1 GiB, page-
# (sequence-header-stripped) OUTPUT buffer that ffmpeg-vaapi # aligned → CREATE_BUFS → mmap → media_request_alloc → STREAMON),
# delivers. # re-acquires a slot, re-mirrors the surface's source_{data,size,
# request_fd}, restores the bytes, and continues. The frame
# survives instead of being dropped back to libavcodec for surface
# recreation. CAPTURE side untouched (per-queue V4L2 streaming
# independence).
# #
# Prior pin (c1bb444) = PR #9 merge — h264_set_controls # Prior pin (2860d75) = PR #14 merge — codec_store_buffer bounds-
# max_num_ref_frames fallback + libva-boundary instrumentation for # check floor (#13).
# the daedalus consumer-strict path (issue #8 libva side). UPSTREAM_COMMIT=c454618ae11addce2e17b560f4deeacbed067d98
UPSTREAM_COMMIT=77f92364661419f6e5a7bd827c1b845b4e426569 PKGVER=1.0.0+r390+gc454618
PKGVER=1.0.0+r386+g77f9236
PKGREL=1 PKGREL=1
HERE=$(dirname "$(readlink -f "$0")") HERE=$(dirname "$(readlink -f "$0")")