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}