ffmpeg-v4l2-request-fourier: route remaining H.264 qpel 8x8 positions through daedalus-fourier (0012) #101

Merged
marfrit merged 1 commits from claude-noether/marfrit-packages:noether/h264-substitute-qpel-rest into main 2026-05-25 12:19:56 +00:00
Owner

Closes the H.264 qpel substitution. Extends 0007 (mc20 put_ only) to all 15 useful positions in both put_ and avg_ tables — 29 substitutions total.

Each is a uniform wrapper around daedalus_recipe_dispatch_h264_qpel_{avg_,}mcXY (fourier PRs #15-#20) via a single DEFINE_QPEL_WRAPPER macro on the libavcodec shim side.

All recipe entries route AUTO to CPU NEON — no QPU shaders for non-mc20 positions yet. Plumbing-only NEON-to-NEON; bit-exact against ff_*_h264_qpel8_*_neon (each dispatch already bit-exact-gated in its fourier PR).

16x16 qpel tables stay on in-tree NEON (daedalus only exposes 8x8 today).

After this PR: the substitution arc covers nearly all H.264 8-bit 4:2:0 hot-path kernels — IDCT 4×4 + 8×8, all 4 luma deblock (inter+intra), chroma v/h deblock (non-intra), chroma DC Hadamard, and all 30 qpel 8×8 positions. Remaining bits are minor edge cases: chroma intra deblock (4:2:0 gating) and intra prediction primitives.

Closes the H.264 qpel substitution. Extends 0007 (mc20 put_ only) to **all 15 useful positions in both put_ and avg_ tables** — 29 substitutions total. Each is a uniform wrapper around `daedalus_recipe_dispatch_h264_qpel_{avg_,}mcXY` (fourier PRs #15-#20) via a single DEFINE_QPEL_WRAPPER macro on the libavcodec shim side. All recipe entries route AUTO to CPU NEON — no QPU shaders for non-mc20 positions yet. Plumbing-only NEON-to-NEON; bit-exact against `ff_*_h264_qpel8_*_neon` (each dispatch already bit-exact-gated in its fourier PR). 16x16 qpel tables stay on in-tree NEON (daedalus only exposes 8x8 today). **After this PR**: the substitution arc covers nearly all H.264 8-bit 4:2:0 hot-path kernels — IDCT 4×4 + 8×8, all 4 luma deblock (inter+intra), chroma v/h deblock (non-intra), chroma DC Hadamard, and all 30 qpel 8×8 positions. Remaining bits are minor edge cases: chroma intra deblock (4:2:0 gating) and intra prediction primitives.
marfrit added 1 commit 2026-05-25 12:06:01 +00:00
Closes the H.264 qpel substitution.  Extends 0007 (which routed only
mc20 put_) to ALL 15 useful positions in BOTH the put_ and avg_
tables, skipping mc00 (integer copy / pointer-only fast path).

29 substitutions total: 14 new put_ + 15 avg_.  Each wraps a single
daedalus_recipe_dispatch_h264_qpel_{avg_,}mcXY call (the dispatches
landed in daedalus-fourier PRs #15-#20).  Collapsed via a single
DEFINE_QPEL_WRAPPER macro on the libavcodec shim side so the diff
is uniform.

All recipe-table entries route AUTO to CPU NEON — no QPU shaders
for any qpel position other than mc20 yet.  Plumbing-only
NEON-to-NEON via the daedalus recipe layer; bit-exact against
the in-tree ff_*_h264_qpel8_*_neon path (each daedalus dispatch is
already bit-exact-gated by the corresponding fourier PR's test).

16x16 qpel tables ([0][...]) stay on the in-tree NEON.  daedalus
only exposes 8x8 today; 16x16 substitution can land once fourier
provides those variants.

Verified the patch applies cleanly on top of 0001-0011 against the
pinned upstream commit b57fbbe5 on hertz.
marfrit merged commit f07824adb7 into main 2026-05-25 12:19:56 +00:00
marfrit deleted branch noether/h264-substitute-qpel-rest 2026-05-25 12:19:56 +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#101