code wiki / (root) / nx_h264_pps_gate.nx

nx_h264_pps_gate.nx source

↩ module page · 75 lines · 2931 B

1// nx_h264_pps_gate.nx -- REFEREE for the H.264 PPS parser (rung 4b). 2// Hand-built PPS RBSP (all fields known), bit-traced: 3// CE 38 -> pps_id=0 sps_id=0 entropy_coding_mode=0 (CAVLC) pic_init_qp=26 4// num_slice_groups_minus1=0 weighted_pred=0 deblock=0 constrained_intra=0 5// EE 38 -> same but entropy_coding_mode=1 (CABAC) [bit2 flipped] 6// Every value PRINTED. stdout + knowledge/status/h264_pps_gate.log. Exit 0/1. 7// Sovereign: nx_syscalls + nx_h264_bits + nx_h264_pps. license_tier: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_h264_bits.nx" 10import "nx_h264_pps.nx" 11 12func gp(logfd: i64, s: *u8) -> i64 { 13 var n: i64 = 0 14 while s[n] != (0 as u8) { n = n + 1 } 15 sys_write(1, s, n) 16 if logfd > 0 { sys_write(logfd, s, n) } 17 return 0 18} 19func gn(logfd: i64, v: i64) -> i64 { 20 let bb: *u8 = sys_mmap(28) 21 var m: i64 = v 22 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 23 let t: *u8 = sys_mmap(28) 24 var k: i64 = 0 25 if m == 0 { t[0] = 48 as u8; k = 1 } 26 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 27 var i: i64 = 0 28 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 29 sys_write(1, bb, k) 30 if logfd > 0 { sys_write(logfd, bb, k) } 31 return 0 32} 33 34func main() -> i64 { 35 let logfd: i64 = sys_openat_append("knowledge/status/h264_pps_gate.log\x00" as *u8, 0x1a4) 36 gp(logfd, "H264-PPS-GATE (rung 4b)\n\x00" as *u8) 37 38 let cavlc: *u8 = sys_mmap(8) 39 cavlc[0] = 0xCE as u8; cavlc[1] = 0x38 as u8 40 let cabac: *u8 = sys_mmap(8) 41 cabac[0] = 0xEE as u8; cabac[1] = 0x38 as u8 42 43 let o1: *i64 = sys_mmap(16 * 8) as *i64 44 let o2: *i64 = sys_mmap(16 * 8) as *i64 45 nx_h264_parse_pps(cavlc, 2, o1) 46 nx_h264_parse_pps(cabac, 2, o2) 47 48 gp(logfd, " CAVLC pps: id=\x00" as *u8); gn(logfd, o1[0]); gp(logfd, " sps=\x00" as *u8); gn(logfd, o1[1]) 49 gp(logfd, " entropy=\x00" as *u8); gn(logfd, o1[2]); gp(logfd, " qp=\x00" as *u8); gn(logfd, o1[3]) 50 gp(logfd, " nsg=\x00" as *u8); gn(logfd, o1[4]); gp(logfd, "\n\x00" as *u8) 51 gp(logfd, " CABAC pps: entropy=\x00" as *u8); gn(logfd, o2[2]); gp(logfd, " qp=\x00" as *u8); gn(logfd, o2[3]); gp(logfd, "\n\x00" as *u8) 52 53 var ok: i64 = 1 54 if o1[0] != 0 { ok = 0 } 55 if o1[1] != 0 { ok = 0 } 56 if o1[2] != 0 { ok = 0 } // CAVLC 57 if o1[3] != 26 { ok = 0 } // base QP 26 58 if o1[4] != 0 { ok = 0 } // 1 slice group 59 if o1[5] != 0 { ok = 0 } 60 if o1[6] != 0 { ok = 0 } 61 if o1[7] != 0 { ok = 0 } 62 if o2[2] != 1 { ok = 0 } // CABAC 63 if o2[3] != 26 { ok = 0 } 64 65 if ok == 1 { 66 gp(logfd, "H264-PPS-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 67 if logfd > 0 { sys_close(logfd) } 68 sys_exit(0) 69 return 0 70 } 71 gp(logfd, "H264-PPS-GATE result=FAIL verdict=RED\n\x00" as *u8) 72 if logfd > 0 { sys_close(logfd) } 73 sys_exit(1) 74 return 1 75}