code wiki / (root) / nx_uxf_remux_test.nx

nx_uxf_remux_test.nx source

↩ module page · 111 lines · 6828 B

1// nx_uxf_remux_test.nx -- UXF arc #2 (real remux), rung 3: the remux DATA-FLOW, end to end. 2// Parses a SimpleBlock's frame bytes out of an EBML element (the MKV input side) and carries those 3// EXACT bytes into an MP4 mdat box, recording the sample size in a stsz box (the MP4 output side). 4// Proves the remux EXECUTES LOSSLESSLY at the byte level -- the frame is rewrapped, not re-encoded 5// (the cheap path B's negotiation selects). Composes the rung-1 (mp4box) + rung-2 (ebml) primitives 6// (inlined here for a self-contained proof). 7// 8// HONEST SCOPE: one frame, flat structure -- proves the parse->carry->write DATA PATH. A fully 9// spec-complete *playable* MKV->MP4 (real SimpleBlock header decode, multi-frame/track sample 10// tables stts/stsc/stco, codec-private in stsd, timestamps, proper moov nesting) is the next rung. 11// No hardware writes (Rule 26). expect_exit: 0 license_tier: ORIGINAL 12import "nx_syscalls.nx" 13 14func r_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 15func r_putn(v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } 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 } var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 } 16 17// --- EBML input primitives (from rung-2) --- 18func ev_len(b: i64) -> i64 { 19 if b >= 0x80 { return 1 } 20 if b >= 0x40 { return 2 } 21 if b >= 0x20 { return 3 } 22 if b >= 0x10 { return 4 } 23 if b >= 0x08 { return 5 } 24 if b >= 0x04 { return 6 } 25 if b >= 0x02 { return 7 } 26 if b >= 0x01 { return 8 } 27 return 0 28} 29func ev_id(buf: *u8, pos: *i64) -> i64 { 30 let p: i64 = pos[0] 31 let len: i64 = ev_len(buf[p] as i64) 32 if len == 0 { return 0 - 1 } 33 var v: i64 = 0 34 var i: i64 = 0 35 while i < len { v = (v * 256) + (buf[p + i] as i64); i = i + 1 } 36 pos[0] = p + len 37 return v 38} 39func ev_size(buf: *u8, pos: *i64) -> i64 { 40 let p: i64 = pos[0] 41 let len: i64 = ev_len(buf[p] as i64) 42 if len == 0 { return 0 - 1 } 43 var v: i64 = (buf[p] as i64) & (255 >> len) 44 var i: i64 = 1 45 while i < len { v = (v * 256) + (buf[p + i] as i64); i = i + 1 } 46 pos[0] = p + len 47 return v 48} 49 50// --- MP4 output primitives (from rung-1) --- 51func mw32(out: *u8, off: i64, v: i64) -> i64 { out[off] = ((v >> 24) & 0xff) as u8; out[off + 1] = ((v >> 16) & 0xff) as u8; out[off + 2] = ((v >> 8) & 0xff) as u8; out[off + 3] = (v & 0xff) as u8; return off + 4 } 52func mr32(buf: *u8, off: i64) -> i64 { return ((buf[off] as i64) * 16777216) + ((buf[off + 1] as i64) * 65536) + ((buf[off + 2] as i64) * 256) + (buf[off + 3] as i64) } 53func m4cc(out: *u8, off: i64, a: i64, b: i64, c: i64, d: i64) -> i64 { out[off] = a as u8; out[off + 1] = b as u8; out[off + 2] = c as u8; out[off + 3] = d as u8; return off + 4 } 54func mbegin(out: *u8, off: i64, a: i64, b: i64, c: i64, d: i64) -> i64 { mw32(out, off, 0); m4cc(out, off + 4, a, b, c, d); return off + 8 } 55func mend(out: *u8, start: i64, cur: i64) -> i64 { mw32(out, start, cur - start); return cur } 56func mcopy(out: *u8, off: i64, src: *u8, srcoff: i64, n: i64) -> i64 { var i: i64 = 0; while i < n { out[off + i] = src[srcoff + i]; i = i + 1 } return off + n } 57func mwalk(buf: *u8, n: i64) -> i64 { var off: i64 = 0; while (off + 8) <= n { let sz: i64 = mr32(buf, off); if sz < 8 { return 0 } off = off + sz } if off == n { return 1 } return 0 } 58func beq(a: *u8, aoff: i64, b: *u8, boff: i64, n: i64) -> i64 { var i: i64 = 0; while i < n { if a[aoff + i] != b[boff + i] { return 0 } i = i + 1 } return 1 } 59 60func main() -> i64 { 61 r_puts("#2 rung-3 REMUX DATA-FLOW -- parse EBML frame -> carry into MP4 mdat (lossless)\n" as *u8) 62 63 // synthetic MKV SimpleBlock element: [ID 0xA3][size 0x88=8][8 frame bytes] 64 let inb: *u8 = sys_mmap(64) 65 inb[0] = 0xA3 as u8; inb[1] = 0x88 as u8 66 inb[2] = 0x11 as u8; inb[3] = 0x22 as u8; inb[4] = 0x33 as u8; inb[5] = 0x44 as u8 67 inb[6] = 0x55 as u8; inb[7] = 0x66 as u8; inb[8] = 0x77 as u8; inb[9] = 0x88 as u8 68 69 // parse (input side) 70 let pos: *i64 = sys_mmap(8) as *i64 71 pos[0] = 0 72 let id: i64 = ev_id(inb, pos) 73 let fsize: i64 = ev_size(inb, pos) 74 let fdata_off: i64 = pos[0] 75 r_puts(" parsed SimpleBlock id=0x" as *u8); r_putn(id); r_puts(" frame_size=" as *u8); r_putn(fsize); r_puts(" frame_off=" as *u8); r_putn(fdata_off); r_puts("\n" as *u8) 76 77 // emit (output side): ftyp + mdat(frame bytes) + stsz(size) 78 let out: *u8 = sys_mmap(65536) 79 var off: i64 = 0 80 let ft: i64 = off 81 off = mbegin(out, off, 102, 116, 121, 112) // ftyp 82 off = m4cc(out, off, 105, 115, 111, 109) // isom 83 off = mw32(out, off, 512) 84 off = m4cc(out, off, 105, 115, 111, 109) 85 off = mend(out, ft, off) 86 let md: i64 = off 87 off = mbegin(out, off, 109, 100, 97, 116) // mdat 88 let mdat_data: i64 = off 89 off = mcopy(out, off, inb, fdata_off, fsize) // <-- the frame is REWRAPPED, not re-encoded 90 off = mend(out, md, off) 91 let sz: i64 = off 92 off = mbegin(out, off, 115, 116, 115, 122) // stsz 93 off = mw32(out, off, 0) // version+flags 94 off = mw32(out, off, fsize) // sample_size 95 off = mw32(out, off, 1) // sample_count 96 off = mend(out, sz, off) 97 let total: i64 = off 98 r_puts(" emitted MP4 total_bytes=" as *u8); r_putn(total); r_puts("\n" as *u8) 99 100 var pass: i64 = 0 101 var ttl: i64 = 0 102 ttl = ttl + 1; r_puts(" T1 frame parsed (size==8): " as *u8); if fsize == 8 { pass = pass + 1; r_puts("PASS\n" as *u8) } else { r_puts("FAIL\n" as *u8) } 103 ttl = ttl + 1; r_puts(" T2 mdat carries frame BYTE-IDENTICAL (lossless): " as *u8); if beq(out, mdat_data, inb, fdata_off, fsize) == 1 { pass = pass + 1; r_puts("PASS\n" as *u8) } else { r_puts("FAIL\n" as *u8) } 104 ttl = ttl + 1; r_puts(" T3 stsz sample_size==frame_size: " as *u8); if mr32(out, sz + 12) == fsize { pass = pass + 1; r_puts("PASS\n" as *u8) } else { r_puts("FAIL\n" as *u8) } 105 ttl = ttl + 1; r_puts(" T4 MP4 box structure valid (walk aligned): " as *u8); if mwalk(out, total) == 1 { pass = pass + 1; r_puts("PASS\n" as *u8) } else { r_puts("FAIL\n" as *u8) } 106 ttl = ttl + 1; r_puts(" T5 SimpleBlock id==0xA3: " as *u8); if id == 0xA3 { pass = pass + 1; r_puts("PASS\n" as *u8) } else { r_puts("FAIL\n" as *u8) } 107 108 r_puts("UXF-REMUX-GATE passed " as *u8); r_putn(pass); r_puts("/" as *u8); r_putn(ttl) 109 if pass == ttl { r_puts(" verdict=GREEN (remux data-flow executes losslessly; full playable muxer = downstream)\n" as *u8); sys_exit(0); return 0 } 110 r_puts(" verdict=RED\n" as *u8); sys_exit(1); return 1 111}