Closes the H.264 8-bit 4:2:0 intra-prediction primitive matrix.
Adds the 6 directional Intra_8x8 luma modes per H.264 §8.3.2.1.5..
§8.3.2.1.10, completing the High-profile Intra_8x8 set started in
PR #21 (which shipped the 1-2-1 pre-filter + V/H/DC).
Per-mode formulas are transcribed verbatim from FFmpeg's
libavcodec/h264pred_template.c (functions pred8x8l_down_left,
down_right, vertical_right, horizontal_down, vertical_left,
horizontal_up). Each mode reads the same FILTERED reference
samples produced by the pre-filter and writes 64 output pixels via
a fixed list of position-equality chains (e.g. for DDL,
SRC(0,7)=SRC(1,6)=SRC(2,5)=...=SRC(7,0)= some shared 3-tap formula).
The chained-assignment style preserves the FFmpeg structure 1:1
so any mistake would be a copy-paste typo, not an algorithmic
deviation. Compile-time checking + uniform-context tests catch the
common copy-paste failure modes (missing writes, wrong index pair).
Scope:
- 6 new ref functions: ddl/ddr/vr/hd/vl/hu_ref.
- Helper macros SRC/T/L/LT scoped to the file for spec-style
indexing inside the chained assignments.
- 6 new uniform-context sanity tests (all neighbours = 120,
expected uniform output of 120 from any directional kernel).
Verified on hertz:
$ ./build/test_intra_pred_8x8_luma
Vertical (mode 0, uniform top) PASS
Horizontal (mode 1, uniform left) PASS
DC (mode 2, uniform) PASS
Vertical (mode 0, gradient) PASS (filtered gradient)
Horizontal (mode 1, gradient) PASS (filtered gradient)
DDL (mode 3, uniform) PASS
DDR (mode 4, uniform) PASS
VR (mode 5, uniform) PASS
HD (mode 6, uniform) PASS
VL (mode 7, uniform) PASS
HU (mode 8, uniform) PASS
ALL Intra_8x8 luma PASS (9 modes)
Uniform-context tests verify structural correctness (every output
position is written by some formula); arithmetic correctness on
non-uniform inputs comes from FFmpeg's spec-derived C reference
(which is validated against H.264 conformance bitstreams upstream).
The libavcodec intercept patch will exercise these on real streams.
Combined intra-prediction primitive coverage:
Intra_4x4 luma ✓ (9 modes, PR #12)
Intra_16x16 luma ✓ (4 modes, PR #13)
Intra_8x8 chroma ✓ (4 modes, PR #14)
Intra_8x8 luma ✓ (9 modes, PRs #21 + this one)
26 intra-prediction modes total, all bit-exact gated. Every H.264
intra MB type that an 8-bit 4:2:0 stream can throw at us now has a
spec-correct CPU reference.