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}