code wiki / _hdl_build / nx_vcodec_sigwire_gate.nx

nx_vcodec_sigwire_gate.nx source

↩ module page · 96 lines · 5737 B

1import "nx_gate_base.nx" 2// nx_vcodec_sigwire_gate.nx -- proves the SIG-MAP coder WIRED INTO THE FULL CODEC (emode bit5, vcv-6). 3// Encodes a real key+5P GOP through vv_enc_rct8/vv_dec_rct8 twice: baseline (rctx0=1, range run-length) vs 4// sig-map (rctx0=33, bit5). Asserts: (1) sig-map decode is BIT-EXACT (enc recon == dec recon, every frame), 5// (2) sig-map bytes < baseline bytes (the measured win, full-frame this time not just coeff blocks), 6// (3) PSNR identical (sig-map re-codes the SAME coefficients -> same recon). This is the go/no-go for the 7// vcv-6 client wiring + deploy. license_tier: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_video_codec_wasm.nx" 10import "nx_quality_metric.nx" 11 12const NW: i64 = 576 13const NH: i64 = 1024 14 15func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 16" as *u8); return ok } 17func gn(v: i64) -> i64 { 18 let b: *u8=sys_mmap(28); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} 19 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} 20 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 21func g2(v: i64) -> i64 { gn(v/100); gw("." as *u8); let f: i64=v%100; if f<10{gw("0" as *u8)} gn(f); return 0 } 22func 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 } 23func cpb(d: *u8, s: *u8, n: i64) -> i64 { var i: i64=0; while i<n { d[i]=s[i]; i=i+1 } return 0 } 24 25func seedc(rctx: *i64, mode: i64, est: *i64, probs: *i64, rcbuf: *u8, t8c: *i64) -> i64 { 26 rctx[0]=mode; rctx[1]=est as i64; rctx[2]=probs as i64; rctx[3]=rcbuf as i64; rctx[4]=t8c as i64 27 rctx[5]=0; rctx[6]=0; rctx[7]=0; return 0 } 28 29// key+5P GOP at mode (1=baseline rct8, 33=bit5 sigmap). out[0]=total bytes, out[1]=exact frames, out[2]=mean luma PSNR cdb 30func run_gop(yuv: *u8, qp: i64, mode: i64, bufs: *i64, out: *i64) -> i64 { 31 let N: i64=NW*NH; let C2: i64=(NW/2)*(NH/2); let sz: i64=N+2*C2; let FB: i64=N+N/2 32 let prevE: *u8=bufs[0] as *u8; let reconE: *u8=bufs[1] as *u8 33 let prevD: *u8=bufs[2] as *u8; let reconD: *u8=bufs[3] as *u8 34 let wire: *u8=bufs[4] as *u8; let blk: *i64=bufs[5] as *i64; let mv: *i64=bufs[6] as *i64 35 let est: *i64=bufs[7] as *i64; let probs: *i64=bufs[8] as *i64; let rcbuf: *u8=bufs[9] as *u8 36 let t8c: *i64=bufs[10] as *i64; let rctx: *i64=bufs[11] as *i64 37 var z: i64=0; while z<sz { prevE[z]=0 as u8; prevD[z]=0 as u8; z=z+1 } 38 var bytes: i64=0; var exact: i64=0; var cdb: i64=0 39 var f: i64=0 40 while f < 6 { 41 var si: i64 = 6+f; if si>11 { si=11 } 42 let cur: *u8 = ((yuv as i64) + si*FB) as *u8 43 var key: i64=0; if f==0 { key=1 } 44 seedc(rctx, mode, est, probs, rcbuf, t8c) 45 let nb: i64 = vv_enc_rct8(cur, prevE, reconE, NW, NH, qp, key, qp*188, wire, 4194304, blk, mv, rctx) 46 if nb <= 0 { out[0]=0; out[1]=exact; out[2]=0; return 0-1 } 47 seedc(rctx, mode, est, probs, rcbuf, t8c) 48 vv_dec_rct8(prevD, reconD, NW, NH, qp, wire, nb, blk, mv, rctx) 49 if eqb(reconD, reconE, sz)==1 { exact=exact+1 } 50 bytes=bytes+nb 51 cdb=cdb+qm_psnr_cdb(reconE, cur, N) 52 cpb(prevE, reconE, sz); cpb(prevD, reconD, sz) 53 f=f+1 54 } 55 out[0]=bytes; out[1]=exact; out[2]=cdb/6 56 return 0 } 57 58func main() -> i64 { 59 gw("=== nx_vcodec_sigwire_gate: sig-map coder WIRED (emode bit5, vcv-6) vs baseline rct8, real GOP ===\n" as *u8) 60 let box: *i64 = sys_mmap(16) as *i64 61 let yuv: *u8 = sys_read_file("/mnt/c/Users/elder/nishi-core/nxc2/knowledge/staging/media/bframe_test_decoded.yuv" as *u8, box) 62 if (yuv as i64) == 0 { gw("cannot read yuv -> RED\n" as *u8); return 1 } 63 let N: i64=NW*NH; let C2: i64=(NW/2)*(NH/2); let sz: i64=N+2*C2 64 if box[0] < 12*(N+N/2) { gw("file too small -> RED\n" as *u8); return 1 } 65 let bufs: *i64 = sys_mmap(16*8) as *i64 66 bufs[0]=sys_mmap(sz+64) as i64; bufs[1]=sys_mmap(sz+64) as i64 67 bufs[2]=sys_mmap(sz+64) as i64; bufs[3]=sys_mmap(sz+64) as i64 68 bufs[4]=sys_mmap(4194304) as i64; bufs[5]=sys_mmap(512) as i64; bufs[6]=sys_mmap(128) as i64 69 bufs[7]=sys_mmap(64) as i64; bufs[8]=sys_mmap(32*8) as i64; bufs[9]=sys_mmap(2097152) as i64 70 bufs[10]=sys_mmap(5120) as i64; bufs[11]=sys_mmap(64) as i64 71 vc_t8_init(bufs[10] as *i64) 72 let oB: *i64=sys_mmap(64) as *i64; let oS: *i64=sys_mmap(64) as *i64 73 let qs: *i64=sys_mmap(32) as *i64; qs[0]=22; qs[1]=28; qs[2]=34 74 var pass: i64=0; var tot: i64=0 75 var allexact: i64=1; var allsmaller: i64=1; var allpsnr: i64=1 76 var qi: i64=0 77 while qi < 3 { 78 let qp: i64 = qs[qi] 79 run_gop(yuv, qp, 1, bufs, oB) // baseline rct8 80 run_gop(yuv, qp, 33, bufs, oS) // bit5 sig-map 81 let sv: i64 = (oB[0]-oS[0])*1000/oB[0] 82 gw(" qp=" as *u8); gn(qp) 83 gw(" baseline=" as *u8); gn(oB[0]); gw("B sigmap=" as *u8); gn(oS[0]) 84 gw("B saved=" as *u8); gn(sv); gw("permille exact=" as *u8); gn(oS[1]) 85 gw("/6 PSNR base=" as *u8); g2(oB[2]); gw(" sig=" as *u8); g2(oS[2]); gw("dB\n" as *u8) 86 if oS[1] != 6 { allexact=0 } 87 if oS[0] >= oB[0] { allsmaller=0 } 88 if oS[2] < oB[2]-2 { allpsnr=0 } // PSNR within 0.02 dB (should be identical) 89 qi=qi+1 90 } 91 tot=tot+1; if allexact==1 { pass=pass+1 } 92 tot=tot+1; if allsmaller==1 { pass=pass+1 } 93 tot=tot+1; if allpsnr==1 { pass=pass+1 } 94 gw("SIGWIRE: " as *u8); gn(pass); gw("/" as *u8); gn(tot) 95 if pass==tot { gw(" GREEN -- sig-map coder wired bit-exact, smaller, same quality (vcv-6 ready to ship)\n" as *u8); return 0 } 96 gw(" RED\n" as *u8); return 1 }