code wiki / (root) / nx_h264_cabac_ctxinc_gate.nx

nx_h264_cabac_ctxinc_gate.nx source

↩ module page · 72 lines · 3133 B

1// nx_h264_cabac_ctxinc_gate.nx -- REFEREE for the H.264 CABAC ctxIdxInc derivation logic. 2// Each expected value is hand-derived directly from the normative procedure (clause 9.3.3.1.1) -- these 3// are spec-logic KATs, independent of the (m,n) init tables. GREEN proves the context-SELECTION layer; 4// the context-VALUE tables + the full I-slice decode remain (verified end-to-end by full_sync once wired). 5// stdout + knowledge/status/h264_cabac_ctxinc_gate.log. license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "nx_h264_cabac_ctxinc.nx" 8 9func gp(logfd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); if logfd > 0 { sys_write(logfd, s, n) } return 0 } 10func gn(logfd: i64, v: i64) -> i64 { 11 let bb: *u8 = sys_mmap(28); var m: i64 = v 12 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 13 let t: *u8 = sys_mmap(28); var k: i64 = 0 14 if m == 0 { t[0] = 48 as u8; k = 1 } 15 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 16 var i: i64 = 0 17 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 18 sys_write(1, bb, k); if logfd > 0 { sys_write(logfd, bb, k) } 19 return 0 20} 21 22func main() -> i64 { 23 let logfd: i64 = sys_openat_append("knowledge/status/h264_cabac_ctxinc_gate.log\x00" as *u8, 0x1a4) 24 gp(logfd, "H264-CABAC-CTXINC-GATE (9.3.3.1.1 context selection)\n\x00" as *u8) 25 var ok: i64 = 1 26 27 // coded_block_flag: condA + 2*condB 28 if cci_cbf(0, 0) != 0 { ok = 0 } 29 if cci_cbf(1, 0) != 1 { ok = 0 } 30 if cci_cbf(0, 1) != 2 { ok = 0 } 31 if cci_cbf(1, 1) != 3 { ok = 0 } 32 33 // significant/last for 4x4 frame: identity on scan position 34 if cci_sig4x4(0) != 0 { ok = 0 } 35 if cci_sig4x4(7) != 7 { ok = 0 } 36 if cci_sig4x4(14) != 14 { ok = 0 } 37 38 // coeff_abs_level_minus1 bin0: (gt1!=0)?0 : min(4,1+eq1) 39 if cci_abslevel_bin0(0, 0) != 1 { ok = 0 } 40 if cci_abslevel_bin0(0, 3) != 4 { ok = 0 } 41 if cci_abslevel_bin0(0, 10) != 4 { ok = 0 } 42 if cci_abslevel_bin0(2, 0) != 0 { ok = 0 } 43 if cci_abslevel_bin0(1, 9) != 0 { ok = 0 } 44 // coeff_abs_level_minus1 binN: 5 + min(4, gt1) 45 if cci_abslevel_binN(0) != 5 { ok = 0 } 46 if cci_abslevel_binN(3) != 8 { ok = 0 } 47 if cci_abslevel_binN(10) != 9 { ok = 0 } 48 49 // mb_qp_delta 50 if cci_mbqpdelta(0, 0) != 0 { ok = 0 } 51 if cci_mbqpdelta(0, 1) != 1 { ok = 0 } 52 if cci_mbqpdelta(1, 0) != 2 { ok = 0 } 53 if cci_mbqpdelta(5, 1) != 3 { ok = 0 } 54 55 // intra_chroma_pred_mode 56 if cci_chromapred(0, 0, 0) != 0 { ok = 0 } 57 if cci_chromapred(0, 1, 0) != 1 { ok = 0 } 58 if cci_chromapred(0, 1, 1) != 2 { ok = 0 } 59 if cci_chromapred(2, 0, 0) != 3 { ok = 0 } 60 61 gp(logfd, " ctxidxinc_kat=\x00" as *u8); gn(logfd, ok); gp(logfd, "\n\x00" as *u8) 62 if ok == 1 { 63 gp(logfd, "H264-CABAC-CTXINC-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 64 if logfd > 0 { sys_close(logfd) } 65 sys_exit(0) 66 return 0 67 } 68 gp(logfd, "H264-CABAC-CTXINC-GATE result=FAIL verdict=RED\n\x00" as *u8) 69 if logfd > 0 { sys_close(logfd) } 70 sys_exit(1) 71 return 1 72}