code wiki / _hdl_build / nx_vcodec_seqdiag_gate.nx

nx_vcodec_seqdiag_gate.nx source

↩ module page · 84 lines · 4823 B

1import "nx_gate_base.nx" 2// nx_vcodec_seqdiag_gate.nx -- consolidated MSU per-sequence diagnostic (reads /tmp/seq.y4m so a harness can 3// run it across the whole xiph/derf CIF set: akiyo=static, foreman=motion, bus=motion+detail, mobile=high-detail). 4// Reports, at qp=8: keyframe vs P bit split, P-frame SKIP RATE (is skip the leak on THIS content?), and P-total 5// under each shipped encoder feature cumulatively (range/+RD-auto/+rich-intra/+sig-map) so we see whether the 6// inert-on-akiyo features (RD-auto, rich-intra) activate on motion content or are dead debt. Grounds every codec 7// decision on standard sequences per the MSU foundation, not one clip. CIF only (352x288). license: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_video_codec_wasm.nx" 10import "nx_vmotion.nx" 11 12const SW: i64 = 352 13const SH: i64 = 288 14const NF: i64 = 48 15 16func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 17" as *u8); return ok } 18func gn(v: i64) -> i64 { 19 let b: *u8=sys_mmap(28); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} 20 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} 21 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 22func cpb(d: *u8, s: *u8, n: i64) -> i64 { var i: i64=0; while i<n { d[i]=s[i]; i=i+1 } return 0 } 23 24// frame pointers into the raw Y4M buffer 25func frames(yuv: *u8, hi: i64, total: i64, fp: *i64, fdata: i64) -> i64 { 26 var nf: i64=0; var p: i64=hi 27 while nf < NF { if p>=total { break } 28 var q: i64=p; while q<total { if (yuv[q]&0xff)==10 { break } q=q+1 } q=q+1 29 if q+fdata>total { break } fp[nf]=(yuv as i64)+q; nf=nf+1; p=q+fdata } 30 return nf } 31 32func encpass(fp: *i64, qp: i64, emode: i64, sz: i64, rep_split: i64) -> i64 { 33 let prevE: *u8=sys_mmap(sz+64); let reconE: *u8=sys_mmap(sz+64) 34 let wire: *u8=sys_mmap(2097152); let blk: *i64=sys_mmap(512) as *i64; let mv: *i64=sys_mmap(128) as *i64 35 let est: *i64=sys_mmap(64) as *i64; let probs: *i64=sys_mmap(32*8) as *i64; let rcbuf: *u8=sys_mmap(2097152) 36 let t8c: *i64=sys_mmap(5120) as *i64; let rctx: *i64=sys_mmap(64) as *i64 37 vc_t8_init(t8c) 38 var z: i64=0; while z<sz { prevE[z]=0 as u8; z=z+1 } 39 rctx[1]=est as i64; rctx[2]=probs as i64; rctx[3]=rcbuf as i64; rctx[4]=t8c as i64; rctx[5]=0; rctx[6]=0; rctx[7]=0 40 let mbx: i64=SW/16; let mby: i64=SH/16 41 var keyB: i64=0; var pB: i64=0; var tot_mb: i64=0; var sk1: i64=0 42 var f: i64=0 43 while f < NF { 44 let cur: *u8=fp[f] as *u8 45 var key: i64=0; if f==0 { key=1 } 46 if rep_split==1 { if key==0 { 47 var by: i64=0 48 while by<mby { var bx: i64=0 49 while bx<mbx { let zs: i64=vm_sad_zero(cur, prevE, SW, bx, by, 16) 50 tot_mb=tot_mb+1; if zs < qp*188 { sk1=sk1+1 } bx=bx+1 } by=by+1 } } } 51 rctx[0]=emode 52 let nb: i64 = vv_enc_rct8(cur, prevE, reconE, SW, SH, qp, key, qp*188, wire, 2097152, blk, mv, rctx) 53 if nb<=0 { gw("enc fail\n" as *u8); return 0-1 } 54 if key==1 { keyB=nb } else { pB=pB+nb } 55 cpb(prevE, reconE, sz) 56 f=f+1 57 } 58 if rep_split==1 { 59 gw(" KEY=" as *u8); gn(keyB); gw("B P-total=" as *u8); gn(pB); gw("B P%=" as *u8); gn(pB*100/(keyB+pB)) 60 var skpct: i64=0; if tot_mb>0 { skpct=sk1*100/tot_mb } 61 gw(" SKIP=" as *u8); gn(skpct); gw("% coded-MB/frame=" as *u8); gn((tot_mb-sk1)/(NF-1)); gw("\n" as *u8) 62 } 63 return pB } 64 65func main() -> i64 { 66 gw("=== nx_vcodec_seqdiag_gate: MSU per-sequence diagnostic (/tmp/seq.y4m, qp=8) ===\n" as *u8) 67 let box: *i64 = sys_mmap(16) as *i64 68 let yuv: *u8 = sys_read_file("/tmp/seq.y4m" as *u8, box) 69 if (yuv as i64)==0 { gw("cannot read /tmp/seq.y4m -> RED\n" as *u8); return 1 } 70 let total: i64=box[0] 71 var hi: i64=0; while hi<total { if (yuv[hi]&0xff)==10 { break } hi=hi+1 } hi=hi+1 72 let C2: i64=(SW/2)*(SH/2); let fdata: i64=SW*SH+2*C2; let sz: i64=fdata 73 let fp: *i64=sys_mmap(128*8) as *i64 74 let nf: i64=frames(yuv, hi, total, fp, fdata) 75 if nf < NF { gw("too few frames (need 48) -> RED\n" as *u8); return 1 } 76 gw(" --- split + skip rate (shipped emode 45) ---\n" as *u8) 77 encpass(fp, 8, 45, sz, 1) 78 gw(" --- P-total per cumulative feature ---\n" as *u8) 79 let p1: i64=encpass(fp, 8, 1, sz, 0); gw(" range-only P=" as *u8); gn(p1); gw("B\n" as *u8) 80 let p5: i64=encpass(fp, 8, 1+4, sz, 0); gw(" +RD-auto P=" as *u8); gn(p5); gw("B\n" as *u8) 81 let p13: i64=encpass(fp, 8, 1+4+8, sz, 0); gw(" +rich-intra P=" as *u8); gn(p13); gw("B\n" as *u8) 82 let p45: i64=encpass(fp, 8, 45, sz, 0); gw(" +sig-map P=" as *u8); gn(p45); gw("B (SHIPPED)\n" as *u8) 83 gw("SEQDIAG: DONE\n" as *u8) 84 return 0 }