code wiki / (root) / nx_mise_en_scene_test.nx

nx_mise_en_scene_test.nx source

↩ module page · 81 lines · 2539 B

1// nx_mise_en_scene_test.nx -- smoke for background-clutter detector. 2 3import "nx_syscalls.nx" 4import "nx_image.nx" 5import "nx_mise_en_scene.nx" 6 7func fill_rect_skin(img: *Image, x0: i64, y0: i64, x1: i64, y1: i64) -> i64 { 8 var y: i64 = y0 9 while y < y1 { 10 var x: i64 = x0 11 while x < x1 { 12 nx_image_set(img, x, y, 0, 200); nx_image_set(img, x, y, 1, 150); nx_image_set(img, x, y, 2, 130) 13 x = x + 1 14 } 15 y = y + 1 16 } 17 return 0 18} 19 20func fill_black(img: *Image) -> i64 { 21 var y: i64 = 0 22 while y < img.height { 23 var x: i64 = 0 24 while x < img.width { 25 nx_image_set(img, x, y, 0, 0); nx_image_set(img, x, y, 1, 0); nx_image_set(img, x, y, 2, 0) 26 x = x + 1 27 } 28 y = y + 1 29 } 30 return 0 31} 32 33// Striped chaos in non-skin area 34func fill_stripes_outside(img: *Image, bx0: i64, by0: i64, bx1: i64, by1: i64) -> i64 { 35 var y: i64 = 0 36 while y < img.height { 37 var x: i64 = 0 38 while x < img.width { 39 var in_box: i64 = 0 40 if x >= bx0 { 41 if x < bx1 { if y >= by0 { if y < by1 { in_box = 1 } } } 42 } 43 if in_box == 0 { 44 var v: i64 = 0 45 let parity: i64 = x - (x / 2) * 2 46 if parity == 1 { v = 255 } 47 nx_image_set(img, x, y, 0, v); nx_image_set(img, x, y, 1, v); nx_image_set(img, x, y, 2, v) 48 } 49 x = x + 1 50 } 51 y = y + 1 52 } 53 return 0 54} 55 56func main() -> i64 { 57 let v: *MiseEnSceneVerdict = (sys_mmap(64)) as *MiseEnSceneVerdict 58 59 // T1: all-black -> CLEAN 60 let img1: *Image = nx_image_alloc(64, 64, 3) 61 fill_black(img1) 62 nx_mise_en_scene_compute(img1, v) 63 if v.kind != NX_MES_CLEAN { return 1 } 64 if v.background_edge_pixels != 0 { return 2 } 65 66 // T2: torso + clean black bg -> CLEAN 67 let img2: *Image = nx_image_alloc(64, 64, 3) 68 fill_black(img2) 69 fill_rect_skin(img2, 20, 20, 45, 45) 70 nx_mise_en_scene_compute(img2, v) 71 if v.kind != NX_MES_CLEAN { return 10 } 72 73 // T3: torso + striped chaos in bg -> CHAOTIC 74 let img3: *Image = nx_image_alloc(64, 64, 3) 75 fill_stripes_outside(img3, 20, 20, 45, 45) 76 fill_rect_skin(img3, 20, 20, 45, 45) 77 nx_mise_en_scene_compute(img3, v) 78 if v.kind != NX_MES_CHAOTIC { return 20 } 79 80 return 0 81}