code wiki / _hdl_build / nx_vcodec_nf_gate.nx

nx_vcodec_nf_gate.nx source

↩ module page · 151 lines · 7337 B

1import "nx_gate_base.nx" 2// nx_vcodec_nf_gate.nx -- ENCODER-SIGNALED IN-LOOP RESTORATION proof (neural rung 2). The blind static 3// display filter measurably failed held-out transfer (v1 -12.6dB gain-ambiguity; v2/v3 still negative 4// under scene shift) -- so the shipped design signals the trained filter per frame ONLY where the encoder 5// MEASURED a strict SSE win against the source (AV1-loop-restoration principle). This gate proves, on the 6// HELD-OUT frames 8..11 (full YUV420, the vv wire path both entropy modes, qp {12,20,32}): 7// (1) nf streams decode BIT-EXACT (in-loop filter symmetric across enc/dec) 8// (2) NEVER-HURT: the nf chain's luma PSNR >= the nf-off chain's - 2 cdB on every config, 9// and mean gain >= 0 overall 10// (3) the feature actually FIRES somewhere (else it is dormant, reported honestly) 11// license_tier: ORIGINAL 12import "nx_syscalls.nx" 13import "nx_video_codec_wasm.nx" 14import "nx_vcodec_nf_table.nx" 15import "nx_quality_metric.nx" 16 17const GW_: i64 = 576 18const GH_: i64 = 1024 19const HOLD0: i64 = 8 20const HOLDN: i64 = 4 21 22func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 23" as *u8); return ok } 24func gn(v: i64) -> i64 { 25 let b: *u8=sys_mmap(28); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} 26 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} 27 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 28func 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 } 29func cpb(d: *u8, s: *u8, n: i64) -> i64 { var i: i64=0; while i<n { d[i]=s[i]; i=i+1 } return 0 } 30 31func seedctx(rctx: *i64, emode: i64, est: *i64, probs: *i64, rcbuf: *u8, t8c: *i64, tbl: *i64, scr: *u8) -> i64 { 32 rctx[0]=emode; rctx[1]=est as i64; rctx[2]=probs as i64; rctx[3]=rcbuf as i64; rctx[4]=t8c as i64; rctx[5]=0 33 rctx[6]=tbl as i64; rctx[7]=scr as i64; return 0 } 34 35// one held-out chain at (emode, qp) with nf on (tbl/scr nonzero) or off (0,0). 36// out[0]=mean luma PSNR cdb, out[1]=frames bit-exact, out[2]=nf fires (from Y-stream bit) 37func nf_chain(yuv: *u8, emode: i64, qp: i64, tbl: *i64, scr: *u8, bufs: *i64, out: *i64) -> i64 { 38 let N: i64 = GW_ * GH_ 39 let C2: i64 = (GW_/2) * (GH_/2) 40 let sz: i64 = N + 2*C2 41 let prevE: *u8 = bufs[0] as *u8 42 let reconE: *u8 = bufs[1] as *u8 43 let prevD: *u8 = bufs[2] as *u8 44 let reconD: *u8 = bufs[3] as *u8 45 let wire: *u8 = bufs[4] as *u8 46 let blk: *i64 = bufs[5] as *i64 47 let mv: *i64 = bufs[6] as *i64 48 let est: *i64 = bufs[7] as *i64 49 let probs: *i64 = bufs[8] as *i64 50 let rcbuf: *u8 = bufs[9] as *u8 51 let t8c: *i64 = bufs[10] as *i64 52 let rctx: *i64 = bufs[11] as *i64 53 var z: i64 = 0 54 while z < sz { prevE[z] = 0 as u8; prevD[z] = 0 as u8; z = z + 1 } 55 var cdb: i64 = 0 56 var exact: i64 = 0 57 var fires: i64 = 0 58 var f: i64 = 0 59 while f < HOLDN { 60 let cur: *u8 = ((yuv as i64) + (HOLD0 + f) * (N + N/2)) as *u8 61 var key: i64 = 0 62 if f == 0 { key = 1 } 63 seedctx(rctx, emode, est, probs, rcbuf, t8c, tbl, scr) 64 var nb: i64 = 0 65 if emode == 1 { nb = vv_enc_rct8(cur, prevE, reconE, GW_, GH_, qp, key, qp*188, wire, 4194304, blk, mv, rctx) } 66 else { nb = vv_enc_t8(cur, prevE, reconE, GW_, GH_, qp, key, qp*188, wire, 4194304, blk, mv, rctx) } 67 if nb <= 0 { out[0]=0; out[1]=exact; out[2]=fires; return 0 - 1 } 68 var nfb: i64 = 1 69 if emode == 1 { nfb = 17 } 70 fires = fires + nx_br_get(((wire as i64) + 12) as *u8, nfb, 1) 71 seedctx(rctx, emode, est, probs, rcbuf, t8c, tbl, scr) 72 var rc: i64 = 0 73 if emode == 1 { rc = vv_dec_rct8(prevD, reconD, GW_, GH_, qp, wire, nb, blk, mv, rctx) } 74 else { rc = vv_dec_t8(prevD, reconD, GW_, GH_, qp, wire, nb, blk, mv, rctx) } 75 if rc == 0 { if eqb(reconD, reconE, sz) == 1 { exact = exact + 1 } } 76 cdb = cdb + qm_psnr_cdb(reconE, cur, N) 77 cpb(prevE, reconE, sz) 78 cpb(prevD, reconD, sz) 79 f = f + 1 80 } 81 out[0] = cdb / HOLDN 82 out[1] = exact 83 out[2] = fires 84 return 0 85} 86 87func main() -> i64 { 88 gw("=== nx_vcodec_nf_gate v2: ENCODER-SIGNALED in-loop restoration, held-out frames 8..11 ===\n" as *u8) 89 let box: *i64 = sys_mmap(16) as *i64 90 let yuv: *u8 = sys_read_file("/mnt/c/Users/elder/nishi-core/nxc2/knowledge/staging/media/bframe_test_decoded.yuv" as *u8, box) 91 if (yuv as i64) == 0 { gw("cannot read yuv -> RED\n" as *u8); return 1 } 92 let N: i64 = GW_ * GH_ 93 if box[0] < 12 * (N + N/2) { gw("file too small -> RED\n" as *u8); return 1 } 94 let tbl: *i64 = sys_mmap(VC_NF_TBL * 8) as *i64 95 vc_nf_load(tbl) 96 let scr: *u8 = sys_mmap(N + 64) 97 let sz: i64 = N + 2 * ((GW_/2)*(GH_/2)) 98 let bufs: *i64 = sys_mmap(16*8) as *i64 99 bufs[0] = sys_mmap(sz + 64) as i64 100 bufs[1] = sys_mmap(sz + 64) as i64 101 bufs[2] = sys_mmap(sz + 64) as i64 102 bufs[3] = sys_mmap(sz + 64) as i64 103 bufs[4] = sys_mmap(4194304) as i64 104 bufs[5] = sys_mmap(512) as i64 105 bufs[6] = sys_mmap(128) as i64 106 bufs[7] = sys_mmap(64) as i64 107 bufs[8] = sys_mmap(32*8) as i64 108 bufs[9] = sys_mmap(1048576) as i64 109 bufs[10] = sys_mmap(5120) as i64 110 bufs[11] = sys_mmap(64) as i64 111 vc_t8_init(bufs[10] as *i64) 112 let ob: *i64 = sys_mmap(32) as *i64 113 let on: *i64 = sys_mmap(32) as *i64 114 let qs: *i64 = sys_mmap(32) as *i64 115 qs[0] = 12; qs[1] = 20; qs[2] = 32 116 var pass: i64 = 0 117 var total: i64 = 0 118 var gainsum: i64 = 0 119 var firesum: i64 = 0 120 var cfgs: i64 = 0 121 var qi: i64 = 0 122 while qi < 3 { 123 var md: i64 = 0 124 while md < 2 { 125 nf_chain(yuv, md, qs[qi], 0 as *i64, 0 as *u8, bufs, ob) // baseline: nf off 126 nf_chain(yuv, md, qs[qi], tbl, scr, bufs, on) // nf on (encoder-signaled) 127 let gain: i64 = on[0] - ob[0] 128 gainsum = gainsum + gain 129 firesum = firesum + on[2] 130 cfgs = cfgs + 1 131 gw(" emode=" as *u8); gn(md); gw(" qp=" as *u8); gn(qs[qi]) 132 gw(" off=" as *u8); gn(ob[0]/100); gw("." as *u8); gn(ob[0]%100) 133 gw("dB nf=" as *u8); gn(on[0]/100); gw("." as *u8); gn(on[0]%100) 134 gw("dB gain=" as *u8); gn(gain); gw("cdB fires=" as *u8); gn(on[2]); gw("/4 exact=" as *u8); gn(on[1]); gw("/4\n" as *u8) 135 total = total + 1 136 if on[1] == HOLDN { pass = pass + 1 } // in-loop symmetry: every nf frame bit-exact 137 total = total + 1 138 if gain >= 0 - 2 { pass = pass + 1 } // never-hurt per config 139 md = md + 1 140 } 141 qi = qi + 1 142 } 143 total = total + 1 144 let meangain: i64 = gainsum / cfgs 145 gw(" MEAN GAIN=" as *u8); gn(meangain); gw("cdB total fires=" as *u8); gn(firesum); gw("\n" as *u8) 146 if meangain >= 0 { pass = pass + 1 } 147 total = total + 1 148 if firesum >= 1 { pass = pass + 1 } else { gw(" (feature DORMANT on held-out -- honest, but nothing to ship)\n" as *u8) } 149 gw("NF2: " as *u8); gn(pass); gw("/" as *u8); gn(total) 150 if pass == total { gw(" GREEN -- encoder-signaled restoration: bit-exact, never hurts, actually fires\n" as *u8); return 0 } 151 gw(" RED\n" as *u8); return 1 }