code wiki / _hdl_build / nx_vcodec_quarter_gate.nx

nx_vcodec_quarter_gate.nx source

↩ module page · 64 lines · 3655 B

1// nx_vcodec_quarter_gate.nx -- proves QUARTER-pel motion is realized INSIDE the codec: a frame shifted by exactly 2// 0.25px is encoded inter, round-trips BIT-EXACT, and the codec's quarter-pel predictor matches a shift that half-pel 3// (only 0 / 0.5) structurally cannot -- the in-codec H.264/VP9 motion-precision win past half-pel. 4import "nx_syscalls.nx" 5import "nx_gate_emit_lib.nx" 6import "nx_vcodec.nx" 7 8func g_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } 9func frame_equal(a: *u8, b: *u8, n: i64) -> i64 { var i: i64=0; while i<n { if a[i]!=b[i] { return 0 } i=i+1 } return 1 } 10func frame_maxerr(a: *u8, b: *u8, n: i64) -> i64 { var m: i64=0; var i: i64=0; while i<n { let e: i64=g_abs((a[i] as i64)-(b[i] as i64)); if e>m { m=e } i=i+1 } return m } 11// one-MB residual SAD of f vs ref sampled at quarter offset (qx,qy) 12func mb_sad(f: *u8, ref: *u8, W: i64, qx: i64, qy: i64) -> i64 { 13 var s: i64=0; var ry: i64=0 14 while ry < 16 { var rx: i64=0 15 while rx < 16 { s = s + g_abs((f[ry*W+rx] as i64) - qp_pixel(ref, W, rx, ry, qx, qy)); rx=rx+1 } ry=ry+1 } 16 return s 17} 18 19func main() -> i64 { 20 g_puts("nx_vcodec quarter-pel gate (0.25px motion realized IN the codec, BIT-EXACT)\n" as *u8) 21 var pass: i64 = 0; var total: i64 = 0 22 let W: i64 = 48; let H: i64 = 32; let N: i64 = W*H 23 let QP: i64 = 12; let SAD_THRESH: i64 = 64 24 25 let f0: *u8 = sys_mmap(N) as *u8 26 let f1: *u8 = sys_mmap(N) as *u8 27 let recon0: *u8 = sys_mmap(N) as *u8 28 let enc1: *u8 = sys_mmap(N) as *u8 29 let dec1: *u8 = sys_mmap(N) as *u8 30 let stream: *u8 = sys_mmap(8192) as *u8 31 let blk: *i64 = sys_mmap(16*8) as *i64 32 let mv: *i64 = sys_mmap(2*8) as *i64 33 34 var y: i64 = 0 35 while y < H { var x: i64 = 0 36 while x < W { f0[y*W+x] = (40 + ((x*11 + y*7) % 120)) as u8; x = x + 1 } y = y + 1 } 37 // f1 = f0 shifted +0.25px in x (== qp_pixel at qx=1) 38 y = 0 39 while y < H { var x: i64 = 0 40 while x < W - 1 { f1[y*W+x] = (((3*(f0[y*W+x] as i64) + (f0[y*W+(x+1)] as i64) + 2) / 4)) as u8; x = x + 1 } 41 f1[y*W + (W-1)] = f0[y*W + (W-1)]; y = y + 1 } 42 43 vc_enc_frame_packed(f0, recon0, recon0, W, H, QP, 1, SAD_THRESH, stream, blk, mv) 44 vc_dec_frame_packed(recon0, recon0, W, H, QP, stream, blk, mv) 45 let bits: i64 = vc_enc_frame_packed(f1, recon0, enc1, W, H, QP, 0, SAD_THRESH, stream, blk, mv) 46 vc_dec_frame_packed(recon0, dec1, W, H, QP, stream, blk, mv) 47 48 let eq: i64 = frame_equal(enc1, dec1, N) 49 let q: i64 = frame_maxerr(enc1, f1, N) 50 let int_sad: i64 = mb_sad(f1, recon0, W, 0, 0) 51 let half_sad: i64 = mb_sad(f1, recon0, W, 2, 0) 52 let qtr_sad: i64 = mb_sad(f1, recon0, W, 1, 0) 53 54 g_puts(" [measure] 0.25px-shift inter stream=" as *u8); g_pn((bits+7)/8); g_puts(" B recon max-err=" as *u8); g_pn(q); g_puts("\n" as *u8) 55 g_puts(" [measure] one MB residual SAD: integer=" as *u8); g_pn(int_sad); g_puts(" half=" as *u8); g_pn(half_sad); g_puts(" quarter=" as *u8); g_pn(qtr_sad); g_puts("\n" as *u8) 56 57 pass = pass + g_check("0.25px-shift frame round-trips BIT-EXACT through the codec (decoder == encoder)" as *u8, eq); total=total+1 58 pass = pass + g_check("reconstruction faithful (max-err <= 16)" as *u8, q <= 16); total=total+1 59 pass = pass + g_check("codec's quarter-pel matches a 0.25 shift half-pel CANNOT (quarter << half)" as *u8, qtr_sad * 4 < half_sad); total=total+1 60 61 g_puts("---- vcodec quarter gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 62 if pass == total { g_puts("verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 63 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 64}