diff --git a/arch/daedalus-v4l2-dkms/PKGBUILD b/arch/daedalus-v4l2-dkms/PKGBUILD index db175211a..b26432949 100644 --- a/arch/daedalus-v4l2-dkms/PKGBUILD +++ b/arch/daedalus-v4l2-dkms/PKGBUILD @@ -18,10 +18,12 @@ _module=daedalus_v4l2 # Same pin as arch/daedalus-v4l2 — keep kernel module + daemon # 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 -pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) +pkgver=0.1.0.r28.79256dc +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" arch=('any') url="https://git.reauktion.de/reauktion/daedalus-v4l2" diff --git a/arch/daedalus-v4l2/PKGBUILD b/arch/daedalus-v4l2/PKGBUILD index 728594322..62546de4e 100644 --- a/arch/daedalus-v4l2/PKGBUILD +++ b/arch/daedalus-v4l2/PKGBUILD @@ -16,17 +16,18 @@ pkgname=daedalus-v4l2 _upstreampkg=daedalus-v4l2 -# Pin the daedalus-v4l2 tip. 481279c = "Phase 8.13: byte-exact end-to- -# end via libva (consumer target hit)" — first commit where the full -# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a -# pixel-correct decoded frame back in ffmpeg. Promote to a later pin -# only after a future phase closes cleanly. -_commit=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 +# Pin the daedalus-v4l2 tip. 79256dc = "kernel + daemon: H.264 B-frame +# display reorder fix (closes #6)" — adds the wire-protocol src_pts / +# output_src_pts / RESP_FRAME flags split that lets H.264 streams with +# B-frames preserve display order through libva → kernel → daemon. +# PROTO_VERSION bumps 0 → 1; lock-step userspace + kernel rebuild +# 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 # Phase 8.x close. pkgver() recomputes at build time. -pkgver=0.1.0.r24.f0d4186 -pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) +pkgver=0.1.0.r28.79256dc +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)" arch=('aarch64') url="https://git.reauktion.de/reauktion/daedalus-v4l2" diff --git a/debian/daedalus-v4l2-dkms/build-deb.sh b/debian/daedalus-v4l2-dkms/build-deb.sh index a78c517c3..b10f4e7f8 100755 --- a/debian/daedalus-v4l2-dkms/build-deb.sh +++ b/debian/daedalus-v4l2-dkms/build-deb.sh @@ -14,9 +14,9 @@ # Sibling userspace package: ../daedalus-v4l2/build-deb.sh set -euo pipefail -UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 -PKGVER=0.1.0+r24+gf0d4186 -PKGREL=2 # postinst: autoinstall for every installed kernel with headers (#64) +UPSTREAM_COMMIT=79256dc7ef41f83873ca9c23db20f5888858e65d +PKGVER=0.1.0+r28+g79256dc +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 HERE=$(dirname "$(readlink -f "$0")") diff --git a/debian/daedalus-v4l2-dkms/debian/changelog b/debian/daedalus-v4l2-dkms/debian/changelog index e78f9978b..f825493e8 100644 --- a/debian/daedalus-v4l2-dkms/debian/changelog +++ b/debian/daedalus-v4l2-dkms/debian/changelog @@ -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 Thu, 21 May 2026 12:00:00 +0000 + daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-2) bookworm trixie; urgency=medium * postinst: autoinstall for every installed kernel with headers, not diff --git a/debian/daedalus-v4l2/build-deb.sh b/debian/daedalus-v4l2/build-deb.sh index 25560971d..9d3ae4b0f 100755 --- a/debian/daedalus-v4l2/build-deb.sh +++ b/debian/daedalus-v4l2/build-deb.sh @@ -11,13 +11,16 @@ # Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2 set -euo pipefail -# Same pin as the Arch PKGBUILD. 481279c = "Phase 8.13: byte-exact -# end-to-end via libva (consumer target hit)" — first commit where the -# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands -# a pixel-correct decoded frame back in ffmpeg. -UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 -PKGVER=0.1.0+r24+gf0d4186 -PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) +# Same pin as the Arch PKGBUILD. 79256dc = "kernel + daemon: H.264 +# B-frame display reorder fix (closes #6)" — adds the wire-protocol +# src_pts / output_src_pts / RESP_FRAME flags split that lets H.264 +# streams with B-frames preserve display order through libva → kernel +# → daemon. PROTO_VERSION bumps 0 → 1; lock-step userspace + kernel +# rebuild REQUIRED (daedalus-v4l2-dkms build-deb.sh pinned to the same +# 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")") diff --git a/debian/daedalus-v4l2/debian/changelog b/debian/daedalus-v4l2/debian/changelog index 19294756d..b9bf56d13 100644 --- a/debian/daedalus-v4l2/debian/changelog +++ b/debian/daedalus-v4l2/debian/changelog @@ -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 Thu, 21 May 2026 12:00:00 +0000 + daedalus-v4l2 (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium * Bump to f0d4186 — kernel per-ctx vb2 lock fix. daedalus_queue_init