code wiki / (root) / nx_uxf_negotiate_test.nx

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}