nx_uxf_negotiate_test.nx source
↩ module page · 73 lines · 4373 B
1// nx_uxf_negotiate_test.nx -- KAT for endpoint-adaptive negotiation. Headline: MKV(H.264/AAC) @
2// Chrome -> REMUX (Chrome can't read the MKV container, but CAN decode H.264/AAC -> lossless rewrap
3// to MP4, no re-encode). Plus DIRECT + TRANSCODE cases + a Safari row, all from the data-driven
4// caps TSV. expect_exit: 0 license_tier: ORIGINAL
5import "nx_syscalls.nx"
6import "nx_uxf_negotiate.nx"
7
8func t_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
9func t_plan(p: i64) -> i64 {
10 if p == PLAN_DIRECT { t_puts("DIRECT" as *u8) }
11 if p == PLAN_REMUX { t_puts("REMUX" as *u8) }
12 if p == PLAN_TRANSCODE { t_puts("TRANSCODE" as *u8) }
13 return 0
14}
15
16func main() -> i64 {
17 let lenp: *i64 = sys_mmap(8) as *i64
18 let tsv: *u8 = sys_read_file("knowledge/registry/endpoint_caps.tsv\x00" as *u8, lenp)
19 if (tsv as i64) == 0 { t_puts("endpoint_caps.tsv not found\n" as *u8); sys_exit(1); return 1 }
20 let n: i64 = lenp[0]
21
22 let chrome_c: *u8 = sys_mmap(256)
23 let chrome_k: *u8 = sys_mmap(256)
24 let safari_c: *u8 = sys_mmap(256)
25 let safari_k: *u8 = sys_mmap(256)
26 let okc: i64 = ng_caps_lookup(tsv, n, "chrome\x00" as *u8, chrome_c, chrome_k)
27 let oks: i64 = ng_caps_lookup(tsv, n, "safari\x00" as *u8, safari_c, safari_k)
28
29 var pass: i64 = 0
30 var total: i64 = 0
31
32 t_puts("B ENDPOINT-ADAPTIVE NEGOTIATION (data-driven endpoint_caps.tsv)\n" as *u8)
33 t_puts(" chrome caps loaded=" as *u8); if okc == 1 { t_puts("yes" as *u8) } else { t_puts("NO" as *u8) }
34 t_puts(" safari caps loaded=" as *u8); if oks == 1 { t_puts("yes\n" as *u8) } else { t_puts("NO\n" as *u8) }
35
36 // HEADLINE: MKV(H.264/AAC) @ Chrome -> REMUX (the "Chrome can't play MKV" fix, lossless)
37 let p1: i64 = ng_negotiate("mkv\x00" as *u8, "h264\x00" as *u8, "aac\x00" as *u8, chrome_c, chrome_k)
38 total = total + 1
39 t_puts(" [mkv/h264/aac @ chrome] -> " as *u8); t_plan(p1); t_puts(" (want REMUX -- container-only mismatch, lossless rewrap): " as *u8)
40 if p1 == PLAN_REMUX { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
41
42 // DIRECT: WebM(VP9/Opus) @ Chrome
43 let p2: i64 = ng_negotiate("webm\x00" as *u8, "vp9\x00" as *u8, "opus\x00" as *u8, chrome_c, chrome_k)
44 total = total + 1
45 t_puts(" [webm/vp9/opus @ chrome] -> " as *u8); t_plan(p2); t_puts(" (want DIRECT): " as *u8)
46 if p2 == PLAN_DIRECT { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
47
48 // TRANSCODE: MKV(H.265/AAC) @ Chrome -- H.265 unsupported -> must re-encode
49 let p3: i64 = ng_negotiate("mkv\x00" as *u8, "h265\x00" as *u8, "aac\x00" as *u8, chrome_c, chrome_k)
50 total = total + 1
51 t_puts(" [mkv/h265/aac @ chrome] -> " as *u8); t_plan(p3); t_puts(" (want TRANSCODE -- h265 unsupported): " as *u8)
52 if p3 == PLAN_TRANSCODE { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
53
54 // DIRECT on Safari: MP4(H.264/AAC)
55 let p4: i64 = ng_negotiate("mp4\x00" as *u8, "h264\x00" as *u8, "aac\x00" as *u8, safari_c, safari_k)
56 total = total + 1
57 t_puts(" [mp4/h264/aac @ safari] -> " as *u8); t_plan(p4); t_puts(" (want DIRECT): " as *u8)
58 if p4 == PLAN_DIRECT { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
59
60 // TRANSCODE on Safari: WebM(VP9/Opus) -- neither container nor codecs supported
61 let p5: i64 = ng_negotiate("webm\x00" as *u8, "vp9\x00" as *u8, "opus\x00" as *u8, safari_c, safari_k)
62 total = total + 1
63 t_puts(" [webm/vp9/opus @ safari] -> " as *u8); t_plan(p5); t_puts(" (want TRANSCODE): " as *u8)
64 if p5 == PLAN_TRANSCODE { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
65
66 t_puts("UXF-NEGOTIATE-GATE passed " as *u8)
67 let bb: *u8 = sys_mmap(8); var pv: i64 = pass; var kk: i64 = 0
68 if pv == 0 { bb[0] = 48 as u8; kk = 1 } else { let tt: *u8 = sys_mmap(8); var mm: i64 = pv; while mm > 0 { tt[kk] = (48 + (mm % 10)) as u8; mm = mm / 10; kk = kk + 1 } var qi: i64 = 0; while qi < kk { bb[qi] = tt[kk - 1 - qi]; qi = qi + 1 } }
69 sys_write(1, bb, kk); t_puts("/" as *u8)
70 let cb: *u8 = sys_mmap(8); cb[0] = (48 + total) as u8; sys_write(1, cb, 1)
71 if pass == total { t_puts(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
72 t_puts(" verdict=RED\n" as *u8); sys_exit(1); return 1
73}