code wiki / _hdl_build / nx_vcodec_t8noise_gate.nx

nx_vcodec_t8noise_gate.nx source

↩ module page · 172 lines · 8016 B

1import "nx_gate_base.nx" 2// nx_vcodec_t8noise_gate.nx -- the FIELD-REPRESENTATIVE t8 gate (rounds 1-4 taught that synthetic stripes 3// and clean stills pass while real calls look blocky). Field conditions reproduced: REAL frames (held-out 4// 8..11) + per-frame TEMPORAL CAMERA NOISE (deterministic LCG, +-3, reseeded per frame like a sensor) at 5// the qps the live ladder actually runs (vvQp of the rung table = ~24..33; it NEVER goes below ~22 in 6// normal operation). Measures, t8 stream vs legacy stream, over a key+5P chain: 7// (1) 8-px-grid blockiness ratio per plane on the LAST recon (the structure the eye reported) 8// (2) luma PSNR vs the noisy source 9// (3) bit-exact decode 10// GREEN iff every frame decodes bit-exact AND t8 blockiness <= legacy*110% on BOTH planes at every qp AND 11// t8 PSNR >= legacy - 50 cdb. This is the bar t8 must clear BEFORE another field test. license_tier: ORIGINAL 12import "nx_syscalls.nx" 13import "nx_video_codec_wasm.nx" 14import "nx_quality_metric.nx" 15import "nx_gate_verdict.nx" 16 17const NW: i64 = 576 18const NH: i64 = 1024 19 20func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 21" as *u8); return ok } 22func gn(v: i64) -> i64 { 23 let b: *u8=sys_mmap(28); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} 24 let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} 25 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 26func eqb(a: *u8, b: *u8, n: i64) -> i64 { var i: i64=0; while i<n { if (a[i]&0xff)!=(b[i]&0xff) { return 0 } i=i+1 } return 1 } 27func cpb(d: *u8, s: *u8, n: i64) -> i64 { var i: i64=0; while i<n { d[i]=s[i]; i=i+1 } return 0 } 28func absi(x: i64) -> i64 { if x<0 { return 0-x } return x } 29 30func blki(p: *u8, W: i64, H: i64, g: i64) -> i64 { 31 var bs: i64=0; var bn: i64=0; var isum: i64=0; var iN: i64=0 32 var y: i64=0 33 while y<H { var x: i64=1 34 while x<W { let d: i64=absi((p[y*W+x]&0xff)-(p[y*W+x-1]&0xff)) 35 if (x % g)==0 { bs=bs+d; bn=bn+1 } else { isum=isum+d; iN=iN+1 } x=x+1 } y=y+1 } 36 var y2: i64=1 37 while y2<H { var x2: i64=0 38 while x2<W { let d2: i64=absi((p[y2*W+x2]&0xff)-(p[(y2-1)*W+x2]&0xff)) 39 if (y2 % g)==0 { bs=bs+d2; bn=bn+1 } else { isum=isum+d2; iN=iN+1 } x2=x2+1 } y2=y2+1 } 40 if iN==0 { return 0 } 41 if isum==0 { return 999 } 42 return (bs*iN*100)/(isum*bn) } 43 44// add deterministic temporal sensor noise (+-3) to a full YUV frame; LCG reseeded per frame index 45func addnoise(dst: *u8, src: *u8, sz: i64, fseed: i64) -> i64 { 46 var s: i64 = fseed*2654435761 + 12345 47 var i: i64 = 0 48 while i < sz { 49 s = (s * 1103515245 + 12345) & 0x7fffffff 50 var v: i64 = (dst as i64) * 0 // keep shape simple 51 v = (src[i] & 0xff) + ((s >> 16) % 7) - 3 52 if v < 0 { v = 0 } 53 if v > 255 { v = 255 } 54 dst[i] = v as u8 55 i = i + 1 56 } 57 return 0 } 58 59func seedctx(rctx: *i64, est: *i64, probs: *i64, rcbuf: *u8, t8c: *i64) -> i64 { 60 rctx[0]=0; rctx[1]=est as i64; rctx[2]=probs as i64; rctx[3]=rcbuf as i64; rctx[4]=t8c as i64 61 rctx[5]=0; rctx[6]=0; rctx[7]=0; return 0 } 62 63// key+5P chain on noisy real frames; kind 0=legacy 1=t8. 64// out[0]=luma blk8, out[1]=chroma blk8 (max of U/V), out[2]=exact frames, out[3]=mean luma PSNR cdb 65func run_noise(yuv: *u8, qp: i64, kind: i64, bufs: *i64, out: *i64) -> i64 { 66 let N: i64=NW*NH; let C2: i64=(NW/2)*(NH/2); let sz: i64=N+2*C2 67 let FB: i64 = N + N/2 68 let cur: *u8 = bufs[12] as *u8 69 let prevE: *u8 = bufs[0] as *u8 70 let reconE: *u8 = bufs[1] as *u8 71 let prevD: *u8 = bufs[2] as *u8 72 let reconD: *u8 = bufs[3] as *u8 73 let wire: *u8 = bufs[4] as *u8 74 let blk: *i64 = bufs[5] as *i64 75 let mv: *i64 = bufs[6] as *i64 76 let est: *i64 = bufs[7] as *i64 77 let probs: *i64 = bufs[8] as *i64 78 let rcbuf: *u8 = bufs[9] as *u8 79 let t8c: *i64 = bufs[10] as *i64 80 let rctx: *i64 = bufs[11] as *i64 81 var z: i64=0 82 while z<sz { prevE[z]=0 as u8; prevD[z]=0 as u8; z=z+1 } 83 var exact: i64=0 84 var cdb: i64=0 85 var f: i64=0 86 while f<6 { 87 var si: i64 = 8 + f 88 if si > 11 { si = 11 } // hold on the last real frame (noise still moves) 89 let srcf: *u8 = ((yuv as i64) + si*FB) as *u8 90 addnoise(cur, srcf, sz, f) 91 var key: i64=0 92 if f==0 { key=1 } 93 var nb: i64=0 94 if kind==1 { seedctx(rctx, est, probs, rcbuf, t8c) 95 nb = vv_enc_t8(cur, prevE, reconE, NW, NH, qp, key, qp*188, wire, 4194304, blk, mv, rctx) } 96 else { nb = vv_enc(cur, prevE, reconE, NW, NH, qp, key, qp*188, wire, 4194304, blk, mv) } 97 if nb <= 0 { out[0]=0; out[1]=0; out[2]=exact; out[3]=0; return 0-1 } 98 if kind==1 { seedctx(rctx, est, probs, rcbuf, t8c) 99 vv_dec_t8(prevD, reconD, NW, NH, qp, wire, nb, blk, mv, rctx) } 100 else { vv_dec(prevD, reconD, NW, NH, qp, wire, nb, blk, mv) } 101 if eqb(reconD, reconE, sz)==1 { exact=exact+1 } 102 cdb = cdb + qm_psnr_cdb(reconD, cur, N) 103 cpb(prevE, reconE, sz) 104 cpb(prevD, reconD, sz) 105 f=f+1 106 } 107 out[0] = blki(reconD, NW, NH, 8) 108 let up: *u8 = ((reconD as i64) + N) as *u8 109 let vp: *u8 = ((reconD as i64) + N + C2) as *u8 110 let bu: i64 = blki(up, NW/2, NH/2, 8) 111 let bv: i64 = blki(vp, NW/2, NH/2, 8) 112 var bc: i64 = bu 113 if bv > bc { bc = bv } 114 out[1] = bc 115 out[2] = exact 116 out[3] = cdb / 6 117 return 0 } 118 119func main() -> i64 { 120 gw("=== nx_vcodec_t8noise_gate: REAL frames + temporal camera noise at LADDER qp, t8 vs legacy ===\n" as *u8) 121 let box: *i64 = sys_mmap(16) as *i64 122 let yuv: *u8 = sys_read_file("knowledge/staging/media/bframe_test_decoded.yuv" as *u8, box) 123 if (yuv as i64) == 0 { gw("cannot read yuv -> RED\n" as *u8); return 1 } 124 let N: i64=NW*NH; let C2: i64=(NW/2)*(NH/2); let sz: i64=N+2*C2 125 if box[0] < 12 * (N + N/2) { gw("file too small -> RED\n" as *u8); return 1 } 126 let bufs: *i64 = sys_mmap(16*8) as *i64 127 bufs[0]=sys_mmap(sz+64) as i64 128 bufs[1]=sys_mmap(sz+64) as i64 129 bufs[2]=sys_mmap(sz+64) as i64 130 bufs[3]=sys_mmap(sz+64) as i64 131 bufs[4]=sys_mmap(4194304) as i64 132 bufs[5]=sys_mmap(512) as i64 133 bufs[6]=sys_mmap(128) as i64 134 bufs[7]=sys_mmap(64) as i64 135 bufs[8]=sys_mmap(32*8) as i64 136 bufs[9]=sys_mmap(2097152) as i64 137 bufs[10]=sys_mmap(5120) as i64 138 bufs[11]=sys_mmap(64) as i64 139 bufs[12]=sys_mmap(sz+64) as i64 140 vc_t8_init(bufs[10] as *i64) 141 let oL: *i64=sys_mmap(64) as *i64 142 let oT: *i64=sys_mmap(64) as *i64 143 let qs: *i64=sys_mmap(32) as *i64 144 qs[0]=24; qs[1]=28; qs[2]=33 145 var pass: i64=0 146 var total: i64=0 147 var qi: i64=0 148 while qi<3 { 149 run_noise(yuv, qs[qi], 0, bufs, oL) 150 run_noise(yuv, qs[qi], 1, bufs, oT) 151 gw(" qp=" as *u8); gn(qs[qi]) 152 gw(" LUMA blk8 legacy=" as *u8); gn(oL[0]); gw(" t8=" as *u8); gn(oT[0]) 153 gw(" CHROMA legacy=" as *u8); gn(oL[1]); gw(" t8=" as *u8); gn(oT[1]) 154 gw(" PSNR legacy=" as *u8); gn(oL[3]/100); gw("." as *u8); gn(oL[3]%100) 155 gw(" t8=" as *u8); gn(oT[3]/100); gw("." as *u8); gn(oT[3]%100) 156 gw("dB exact=" as *u8); gn(oT[2]); gw("/6\n" as *u8) 157 total=total+1 158 if oT[2]==6 { pass=pass+1 } 159 total=total+1 160 if oT[0] <= (oL[0]*110)/100 { pass=pass+1 } 161 total=total+1 162 if oT[1] <= (oL[1]*110)/100 { pass=pass+1 } 163 total=total+1 164 if oT[3] >= oL[3] - 50 { pass=pass+1 } 165 qi=qi+1 166 } 167 gw("T8NOISE: " as *u8); gn(pass); gw("/" as *u8); gn(total) 168 if pass==total { gw(" GREEN -- t8 holds legacy structure + quality under FIELD conditions\n" as *u8) } else { gw(" RED -- t8 must clear this before the next field test\n" as *u8) } 169 let ctr: *i64 = gv_ctr() 170 ctr[0] = pass 171 ctr[1] = total 172 return gv_verdict("T8NOISE-GATE" as *u8, ctr, "t8 holds legacy structure + quality under field noise at ladder qp" as *u8) }