code wiki / (root) / nx_mp4_stbl_gate.nx

nx_mp4_stbl_gate.nx source

↩ module page · 111 lines · 5291 B

1// nx_mp4_stbl_gate.nx -- REFEREE for the MP4 sample-table reader (rung 1). 2// Synthesizes a byte-exact MP4 with a full video stbl using a cursor builder: 3// ftyp + moov{ trak{ mdia{ hdlr(vide) + minf{ stbl{ 4// stsd(entry fourCC=avc1) + stsz(size=0,count=3,[100,120,90]) + stco(1) }}}}} 5// Asserts nx_mp4_video_info reports codec=H264, frames=3, chunks=1. 6// Also a VP9 variant -> codec=VP9. Every value PRINTED. Exit 0/1. 7// Sovereign: nx_syscalls + nx_mp4_demux + nx_mp4_stbl. license_tier: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_mp4_demux.nx" 10import "nx_mp4_stbl.nx" 11 12func gp(logfd: i64, s: *u8) -> i64 { 13 var n: i64 = 0 14 while s[n] != (0 as u8) { n = n + 1 } 15 sys_write(1, s, n) 16 if logfd > 0 { sys_write(logfd, s, n) } 17 return 0 18} 19func gn(logfd: i64, v: i64) -> i64 { 20 let bb: *u8 = sys_mmap(28) 21 var m: i64 = v 22 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 23 let t: *u8 = sys_mmap(28) 24 var k: i64 = 0 25 if m == 0 { t[0] = 48 as u8; k = 1 } 26 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 27 var i: i64 = 0 28 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 29 sys_write(1, bb, k) 30 if logfd > 0 { sys_write(logfd, bb, k) } 31 return 0 32} 33func wbe32(b: *u8, o: i64, v: i64) -> i64 { 34 b[o] = ((v / 16777216) % 256) as u8; b[o + 1] = ((v / 65536) % 256) as u8 35 b[o + 2] = ((v / 256) % 256) as u8; b[o + 3] = (v % 256) as u8 36 return 0 37} 38func wt4(b: *u8, o: i64, s: *u8) -> i64 { b[o] = s[0]; b[o + 1] = s[1]; b[o + 2] = s[2]; b[o + 3] = s[3]; return 0 } 39 40// cursor box open: reserve 8-byte header, set type, advance; return header offset 41func bopen(b: *u8, cur: *i64, ty: *u8) -> i64 { let o: i64 = cur[0]; wt4(b, o + 4, ty); cur[0] = o + 8; return o } 42func bclose(b: *u8, cur: *i64, hdr: i64) -> i64 { wbe32(b, hdr, cur[0] - hdr); return 0 } 43func w32(b: *u8, cur: *i64, v: i64) -> i64 { wbe32(b, cur[0], v); cur[0] = cur[0] + 4; return 0 } 44func wty(b: *u8, cur: *i64, s: *u8) -> i64 { wt4(b, cur[0], s); cur[0] = cur[0] + 4; return 0 } 45 46// build a full MP4 with a video stbl carrying the given codec fourCC; returns len 47func build(b: *u8, codec: *u8) -> i64 { 48 let cur: *i64 = sys_mmap(16) as *i64 49 cur[0] = 0 50 let hf: i64 = bopen(b, cur, "ftyp\x00" as *u8); wty(b, cur, "isom\x00" as *u8); w32(b, cur, 0); wty(b, cur, "isom\x00" as *u8); bclose(b, cur, hf) 51 let hm: i64 = bopen(b, cur, "moov\x00" as *u8) 52 let ht: i64 = bopen(b, cur, "trak\x00" as *u8) 53 let hd: i64 = bopen(b, cur, "mdia\x00" as *u8) 54 let hh: i64 = bopen(b, cur, "hdlr\x00" as *u8) 55 w32(b, cur, 0); w32(b, cur, 0); wty(b, cur, "vide\x00" as *u8); w32(b, cur, 0); w32(b, cur, 0); w32(b, cur, 0) 56 bclose(b, cur, hh) 57 let hi: i64 = bopen(b, cur, "minf\x00" as *u8) 58 let hs: i64 = bopen(b, cur, "stbl\x00" as *u8) 59 let hsd: i64 = bopen(b, cur, "stsd\x00" as *u8) 60 w32(b, cur, 0); w32(b, cur, 1) // ver/flags, entry_count 61 w32(b, cur, 16); wty(b, cur, codec); w32(b, cur, 0); w32(b, cur, 0) // entry: size, fourCC, filler 62 bclose(b, cur, hsd) 63 let hsz: i64 = bopen(b, cur, "stsz\x00" as *u8) 64 w32(b, cur, 0); w32(b, cur, 0); w32(b, cur, 3); w32(b, cur, 100); w32(b, cur, 120); w32(b, cur, 90) 65 bclose(b, cur, hsz) 66 let hco: i64 = bopen(b, cur, "stco\x00" as *u8) 67 w32(b, cur, 0); w32(b, cur, 1); w32(b, cur, 99999) 68 bclose(b, cur, hco) 69 bclose(b, cur, hs); bclose(b, cur, hi); bclose(b, cur, hd); bclose(b, cur, ht); bclose(b, cur, hm) 70 return cur[0] 71} 72 73func main() -> i64 { 74 let logfd: i64 = sys_openat_append("knowledge/status/mp4_stbl_gate.log\x00" as *u8, 0x1a4) 75 gp(logfd, "MP4-STBL-GATE (sample-table / codec id, rung1)\n\x00" as *u8) 76 77 let h264: *u8 = sys_mmap(512) 78 let lh: i64 = build(h264, "avc1\x00" as *u8) 79 let vp9: *u8 = sys_mmap(512) 80 let lv: i64 = build(vp9, "vp09\x00" as *u8) 81 82 let o1: *i64 = sys_mmap(64) as *i64 83 let o2: *i64 = sys_mmap(64) as *i64 84 let f1: i64 = nx_mp4_video_info(h264, lh, o1) 85 let f2: i64 = nx_mp4_video_info(vp9, lv, o2) 86 87 gp(logfd, " H264 file(\x00" as *u8); gn(logfd, lh); gp(logfd, "B): found=\x00" as *u8); gn(logfd, f1) 88 gp(logfd, " codec=\x00" as *u8); gn(logfd, o1[0]); gp(logfd, " frames=\x00" as *u8); gn(logfd, o1[1]) 89 gp(logfd, " samp_size=\x00" as *u8); gn(logfd, o1[2]); gp(logfd, " chunks=\x00" as *u8); gn(logfd, o1[3]); gp(logfd, "\n\x00" as *u8) 90 gp(logfd, " VP9 file: codec=\x00" as *u8); gn(logfd, o2[0]); gp(logfd, " (1=H264 3=VP9)\n\x00" as *u8) 91 92 var ok: i64 = 1 93 if f1 != 1 { ok = 0 } 94 if o1[0] != NX_CODEC_H264 { ok = 0 } // codec named correctly 95 if o1[1] != 3 { ok = 0 } // 3 frames 96 if o1[2] != 0 { ok = 0 } // per-sample size table (size field 0) 97 if o1[3] != 1 { ok = 0 } // 1 chunk 98 if f2 != 1 { ok = 0 } 99 if o2[0] != NX_CODEC_VP9 { ok = 0 } // VP9 variant classified 100 101 if ok == 1 { 102 gp(logfd, "MP4-STBL-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 103 if logfd > 0 { sys_close(logfd) } 104 sys_exit(0) 105 return 0 106 } 107 gp(logfd, "MP4-STBL-GATE result=FAIL verdict=RED\n\x00" as *u8) 108 if logfd > 0 { sys_close(logfd) } 109 sys_exit(1) 110 return 1 111}