daedalus-v4l2{,-dkms}: f0d4186 -> 79256dc — H.264 B-frame reorder fix + menu ctrls #67

Merged
marfrit merged 1 commits from claude-noether/marfrit-packages:noether/daedalus-bump-79256dc into main 2026-05-21 10:51:15 +00:00
Owner

Lock-step bump of both packages to pick up daedalus-v4l2 PR #7 (H.264 B-frame display-reorder fix) and PR #4 (DECODE_MODE + START_CODE menu control registration).

⚠ Lock-step install required

DAEDALUS_PROTO_VERSION bumps 0 → 1 at this commit. The kernel module and the userspace daemon must be installed together — apt install daedalus-v4l2 daedalus-v4l2-dkms in the same dpkg transaction. Independent upgrade leaves the chardev rejecting the version mismatch and /dev/daedalus-v4l2 non-functional until the second half lands.

What the bump does

  • daedalus-v4l2 (userspace daemon): send_packet → receive_frame loop now stamps pkt->pts = req->src_pts and looks up the owning cookie for each drained frame via frame->pts. Multiple RESP_FRAME messages per REQ_DECODE are possible 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 visible on H.264 streams with B-frames (mpv + Firefox confirmed on Pi CM5).

  • daedalus-v4l2-dkms (kernel module): device_run mirrors src_buf->vb2_buf.timestamp into REQ_DECODE.src_pts; completion path splits HAS_PIXELS / SRC_CONSUMED so src is released as soon as the daemon consumes the slice data (m2m scheduler moves on), while dst stays parked until its actual frame is drained later. dst_buf.timestamp is stamped explicitly from inflight src_pts (V4L2_BUF_FLAG_TIMESTAMP_COPY's auto-pairing no longer applies once src/dst lifecycles decouple).

  • daedalus-v4l2-dkms also carries the -2 multi-kernel postinst fix from the prior PKGREL (#64): dkms autoinstall runs for every kernel with installed headers, not just $(uname -r). PKGREL resets to 1 on the new upstream pin per the bump-resets-pkgrel convention; the postinst logic is still in build-deb.sh and ships in this build.

Refs

Verified

  • Both .debs build cleanly cross-compiled on higgs against 6.18.29+rpt-rpi-2712 (Pi CM5). Kernel module + daemon + tools all link without errors. Frame-size warning on device_run is pre-existing and unchanged.
  • Field test on higgs deferred until both .debs ship via this PR's CI build — the lock-step install constraint means a swap-in-place via local dpkg -i is the only reliable manual path, and it's safer to do it once via the published .deb stream.
Lock-step bump of both packages to pick up daedalus-v4l2 PR #7 (H.264 B-frame display-reorder fix) and PR #4 (DECODE_MODE + START_CODE menu control registration). ## ⚠ Lock-step install required `DAEDALUS_PROTO_VERSION` bumps `0 → 1` at this commit. The kernel module and the userspace daemon must be installed together — `apt install daedalus-v4l2 daedalus-v4l2-dkms` in the same dpkg transaction. Independent upgrade leaves the chardev rejecting the version mismatch and `/dev/daedalus-v4l2` non-functional until the second half lands. ## What the bump does - **daedalus-v4l2** (userspace daemon): `send_packet → receive_frame` loop now stamps `pkt->pts = req->src_pts` and looks up the owning cookie for each drained frame via `frame->pts`. Multiple `RESP_FRAME` messages per `REQ_DECODE` are possible 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 visible on H.264 streams with B-frames (mpv + Firefox confirmed on Pi CM5). - **daedalus-v4l2-dkms** (kernel module): `device_run` mirrors `src_buf->vb2_buf.timestamp` into `REQ_DECODE.src_pts`; completion path splits `HAS_PIXELS` / `SRC_CONSUMED` so src is released as soon as the daemon consumes the slice data (m2m scheduler moves on), while dst stays parked until its actual frame is drained later. `dst_buf.timestamp` is stamped explicitly from inflight `src_pts` (V4L2_BUF_FLAG_TIMESTAMP_COPY's auto-pairing no longer applies once src/dst lifecycles decouple). - **daedalus-v4l2-dkms** also carries the `-2` multi-kernel postinst fix from the prior PKGREL (#64): `dkms autoinstall` runs for every kernel with installed headers, not just `$(uname -r)`. `PKGREL` resets to `1` on the new upstream pin per the bump-resets-pkgrel convention; the postinst logic is still in `build-deb.sh` and ships in this build. ## Refs - reauktion/daedalus-v4l2 PR #7: https://git.reauktion.de/reauktion/daedalus-v4l2/pulls/7 - reauktion/daedalus-v4l2 PR #4: https://git.reauktion.de/reauktion/daedalus-v4l2/pulls/4 - reauktion/daedalus-v4l2 issue #6: https://git.reauktion.de/reauktion/daedalus-v4l2/issues/6 - marfrit-packages issue #64 (postinst fix subsumed): https://git.reauktion.de/marfrit/marfrit-packages/issues/64 ## Verified - Both .debs build cleanly cross-compiled on higgs against `6.18.29+rpt-rpi-2712` (Pi CM5). Kernel module + daemon + tools all link without errors. Frame-size warning on `device_run` is pre-existing and unchanged. - Field test on higgs deferred until both .debs ship via this PR's CI build — the lock-step install constraint means a swap-in-place via local `dpkg -i` is the only reliable manual path, and it's safer to do it once via the published .deb stream.
marfrit added 1 commit 2026-05-21 10:42:04 +00:00
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
marfrit merged commit 9301894997 into main 2026-05-21 10:51:15 +00:00
marfrit deleted branch noether/daedalus-bump-79256dc 2026-05-21 10:51:15 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: marfrit/marfrit-packages#67