code wiki / (root) / nx_h264_slice_gate.nx

nx_h264_slice_gate.nx source

↩ module page · 69 lines · 2908 B

1// nx_h264_slice_gate.nx -- REFEREE for the H.264 slice header parser (rung 4a). 2// Hand-built IDR I-slice header (bit-traced), with SPS ctx 3// log2_max_frame_num=4, log2_max_poc_lsb=4, poc_type=0, frame_mbs_only=1, pic_init_qp=26: 4// RBSP 88 84 08 -> 5// first_mb=0, slice_type=7 (->I, %5=2), pps_id=0, frame_num=0, idr_pic_id=0, 6// poc_lsb=0, slice_qp_delta=0 -> QP=26 7// Every value PRINTED. stdout + knowledge/status/h264_slice_gate.log. Exit 0/1. 8// Sovereign: nx_syscalls + nx_h264_bits + nx_h264_slice. license_tier: ORIGINAL 9import "nx_syscalls.nx" 10import "nx_h264_bits.nx" 11import "nx_h264_slice.nx" 12 13func gp(logfd: i64, s: *u8) -> i64 { 14 var n: i64 = 0 15 while s[n] != (0 as u8) { n = n + 1 } 16 sys_write(1, s, n) 17 if logfd > 0 { sys_write(logfd, s, n) } 18 return 0 19} 20func gn(logfd: i64, v: i64) -> i64 { 21 let bb: *u8 = sys_mmap(28) 22 var m: i64 = v 23 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 24 let t: *u8 = sys_mmap(28) 25 var k: i64 = 0 26 if m == 0 { t[0] = 48 as u8; k = 1 } 27 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 28 var i: i64 = 0 29 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 30 sys_write(1, bb, k) 31 if logfd > 0 { sys_write(logfd, bb, k) } 32 return 0 33} 34 35func main() -> i64 { 36 let logfd: i64 = sys_openat_append("knowledge/status/h264_slice_gate.log\x00" as *u8, 0x1a4) 37 gp(logfd, "H264-SLICE-GATE (rung 4a IDR I-slice header)\n\x00" as *u8) 38 39 let sh: *u8 = sys_mmap(8) 40 sh[0] = 0x88 as u8; sh[1] = 0x84 as u8; sh[2] = 0x08 as u8 41 let o: *i64 = sys_mmap(16 * 8) as *i64 42 nx_h264_parse_slice_header(sh, 3, 5, 4, 4, 0, 1, 26, 0, o) 43 44 gp(logfd, " first_mb=\x00" as *u8); gn(logfd, o[0]); gp(logfd, " slice_type=\x00" as *u8); gn(logfd, o[1]); gp(logfd, " (I/P/B=\x00" as *u8); gn(logfd, o[8]); gp(logfd, ")\n\x00" as *u8) 45 gp(logfd, " pps_id=\x00" as *u8); gn(logfd, o[2]); gp(logfd, " frame_num=\x00" as *u8); gn(logfd, o[3]); gp(logfd, " idr_pic_id=\x00" as *u8); gn(logfd, o[4]) 46 gp(logfd, " poc_lsb=\x00" as *u8); gn(logfd, o[5]); gp(logfd, " qp_delta=\x00" as *u8); gn(logfd, o[6]); gp(logfd, " QP=\x00" as *u8); gn(logfd, o[7]); gp(logfd, "\n\x00" as *u8) 47 48 var ok: i64 = 1 49 if o[0] != 0 { ok = 0 } 50 if o[1] != 7 { ok = 0 } 51 if o[8] != 2 { ok = 0 } // I-slice 52 if o[2] != 0 { ok = 0 } 53 if o[3] != 0 { ok = 0 } 54 if o[4] != 0 { ok = 0 } // idr_pic_id 55 if o[5] != 0 { ok = 0 } 56 if o[6] != 0 { ok = 0 } 57 if o[7] != 26 { ok = 0 } // QP = 26 + 0 58 59 if ok == 1 { 60 gp(logfd, "H264-SLICE-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 61 if logfd > 0 { sys_close(logfd) } 62 sys_exit(0) 63 return 0 64 } 65 gp(logfd, "H264-SLICE-GATE result=FAIL verdict=RED\n\x00" as *u8) 66 if logfd > 0 { sys_close(logfd) } 67 sys_exit(1) 68 return 1 69}