h264: promote remaining intra prediction modes (17) to public API
Follows PR #26 (Intra_4x4 luma) with the same promotion pattern for the rest of the intra prediction primitive set: Intra_16x16 luma (4 modes, PR #13) — V/H/DC/Plane Intra_8x8 chroma (4 modes, PR #14) — DC/H/V/Plane (4:2:0) Intra_8x8 luma (9 modes, PRs #21 + #22) — High profile, with 1-2-1 pre-filter 3 file moves via `git mv`, ~17 function renames stripping the `_ref` suffix. Test binaries rewired to link daedalus_core instead of compiling the (now moved) ref files directly. No code change — pure plumbing for substitution-arc consumers. 26 intra prediction modes total now in the public API after this PR. Verified on hertz: test_intra_pred_16x16: 5/5 PASS test_intra_pred_chroma8x8: 5/5 PASS test_intra_pred_8x8_luma: 11/11 PASS All via public symbols (test binaries linked against daedalus_core). Unblocks marfrit-packages substitution arc patch 0014 — wires H264PredContext.pred4x4[], pred16x16[], pred8x8[], pred8x8l[] through daedalus alongside the existing IDCT / deblock / qpel / DC Hadamard substitutions. After 0014 lands, the libavcodec.so built by marfrit-packages will have EVERY hot-path pixel-math kernel of an H.264 8-bit 4:2:0 decode routing through daedalus — the substitution arc is feature- complete for the campaign target (Pi 5 Firefox YouTube playback).
This commit is contained in:
@@ -14,15 +14,15 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
extern void daedalus_h264_pred_8x8l_vertical_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_horizontal_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_dc_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_ddl_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_ddr_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_vr_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_hd_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_vl_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_hu_ref(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_vertical(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_horizontal(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_dc(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_ddl(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_ddr(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_vr(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_hd(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_vl(uint8_t *dst, ptrdiff_t stride);
|
||||
extern void daedalus_h264_pred_8x8l_hu(uint8_t *dst, ptrdiff_t stride);
|
||||
|
||||
#define STRIDE 17
|
||||
#define ROWS 9
|
||||
@@ -61,7 +61,7 @@ int main(void)
|
||||
for (int i = 0; i < 16; i++) t[i] = 50;
|
||||
for (int j = 0; j < 8; j++) l[j] = 0;
|
||||
set_ctx(buf, 50, t, l);
|
||||
daedalus_h264_pred_8x8l_vertical_ref(&buf[1][1], STRIDE);
|
||||
daedalus_h264_pred_8x8l_vertical(&buf[1][1], STRIDE);
|
||||
fail |= check_uniform(buf, "Vertical (mode 0, uniform top)", 50);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ int main(void)
|
||||
int t[16] = {0}, l[8];
|
||||
for (int j = 0; j < 8; j++) l[j] = 70;
|
||||
set_ctx(buf, 70, t, l);
|
||||
daedalus_h264_pred_8x8l_horizontal_ref(&buf[1][1], STRIDE);
|
||||
daedalus_h264_pred_8x8l_horizontal(&buf[1][1], STRIDE);
|
||||
fail |= check_uniform(buf, "Horizontal (mode 1, uniform left)", 70);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ int main(void)
|
||||
for (int i = 0; i < 16; i++) t[i] = 33;
|
||||
for (int j = 0; j < 8; j++) l[j] = 33;
|
||||
set_ctx(buf, 33, t, l);
|
||||
daedalus_h264_pred_8x8l_dc_ref(&buf[1][1], STRIDE);
|
||||
daedalus_h264_pred_8x8l_dc(&buf[1][1], STRIDE);
|
||||
fail |= check_uniform(buf, "DC (mode 2, uniform)", 33);
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ int main(void)
|
||||
int t[16], l[8] = {0};
|
||||
for (int i = 0; i < 16; i++) t[i] = i;
|
||||
set_ctx(buf, 0, t, l);
|
||||
daedalus_h264_pred_8x8l_vertical_ref(&buf[1][1], STRIDE);
|
||||
daedalus_h264_pred_8x8l_vertical(&buf[1][1], STRIDE);
|
||||
int diff = 0;
|
||||
for (int r = 0; r < 8; r++)
|
||||
for (int c = 0; c < 8; c++)
|
||||
@@ -129,7 +129,7 @@ int main(void)
|
||||
int t[16] = {0}, l[8];
|
||||
for (int j = 0; j < 8; j++) l[j] = j;
|
||||
set_ctx(buf, 0, t, l);
|
||||
daedalus_h264_pred_8x8l_horizontal_ref(&buf[1][1], STRIDE);
|
||||
daedalus_h264_pred_8x8l_horizontal(&buf[1][1], STRIDE);
|
||||
int diff = 0;
|
||||
for (int r = 0; r < 8; r++)
|
||||
for (int c = 0; c < 8; c++)
|
||||
@@ -146,12 +146,12 @@ int main(void)
|
||||
{
|
||||
typedef void (*pred_fn_t)(uint8_t *dst, ptrdiff_t stride);
|
||||
struct { const char *name; pred_fn_t fn; } modes[] = {
|
||||
{ "DDL (mode 3, uniform)", daedalus_h264_pred_8x8l_ddl_ref },
|
||||
{ "DDR (mode 4, uniform)", daedalus_h264_pred_8x8l_ddr_ref },
|
||||
{ "VR (mode 5, uniform)", daedalus_h264_pred_8x8l_vr_ref },
|
||||
{ "HD (mode 6, uniform)", daedalus_h264_pred_8x8l_hd_ref },
|
||||
{ "VL (mode 7, uniform)", daedalus_h264_pred_8x8l_vl_ref },
|
||||
{ "HU (mode 8, uniform)", daedalus_h264_pred_8x8l_hu_ref },
|
||||
{ "DDL (mode 3, uniform)", daedalus_h264_pred_8x8l_ddl },
|
||||
{ "DDR (mode 4, uniform)", daedalus_h264_pred_8x8l_ddr },
|
||||
{ "VR (mode 5, uniform)", daedalus_h264_pred_8x8l_vr },
|
||||
{ "HD (mode 6, uniform)", daedalus_h264_pred_8x8l_hd },
|
||||
{ "VL (mode 7, uniform)", daedalus_h264_pred_8x8l_vl },
|
||||
{ "HU (mode 8, uniform)", daedalus_h264_pred_8x8l_hu },
|
||||
};
|
||||
for (size_t i = 0; i < sizeof(modes)/sizeof(modes[0]); i++) {
|
||||
uint8_t buf[ROWS][STRIDE];
|
||||
|
||||
Reference in New Issue
Block a user