code wiki / _hdl_build / nx_cam_poster.nx

nx_cam_poster.nx

buildroot/runtime/_hdl_build/nx_cam_poster.nx

14284 B288 linesdepth 7pulls 38 transitivereach 0 importersview sourcekind tooltopic cam
docsdependenciesstructsconstsfunctions

about

nx_cam_poster.nx -- SOVEREIGN cam-recording POSTER generator (STEP 4 glue), CAVLC path. TS -> first IDR (reuse nx_ts2fmp4's PAT/PMT/vidPID demux logic) -> nx_h264_decode_iframe (CAVLC full-YUV recon) -> YUV420->RGB (BT.601) -> integer box-average downscale (reuse nx_galx_thumb's scaler) -> jcw_write_color -> baseline JPEG on disk. No ffmpeg, no external calls. For CABAC streams it skips gracefully (the CABAC decoder is a separate rung). Usage: nx_cam_poster <in.ts> <out.jpg> license_tier: ORIGINAL

dependencies 15 imports · 0 importers

nx_syscalls.nx nx_ts_nal.nx nx_h264_sps.nx nx_h264_pps.nx nx_h264_iframe.nx nx_h264_bitwriter.nx nx_dct8.nx nx_quant_table.nx nx_zigzag.nx nx_jpeg_huff_enc.nx nx_cam_poster.nx

diagram shows first 10 each side; +5 more imports, +0 more importers in the complete lists below.

imports: nx_syscalls.nxnx_ts_nal.nxnx_h264_sps.nxnx_h264_pps.nxnx_h264_iframe.nxnx_h264_bitwriter.nxnx_dct8.nxnx_quant_table.nxnx_zigzag.nxnx_jpeg_huff_enc.nxnx_jpeg_block_enc.nxnx_jpeg_write.nxnx_jpeg_color_write.nxnx_ts_es.nxnx_mp4_es.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main cp_puts sys_write sys_openat_rd sys_mmap sys_read demux_video_es tsn_codec_of_stream_type find_first_nal nal_to_rbsp nx_h264_unescape_rbsp nx_h264_parse_pps sys_mmap ↻ br_init sys_mmap ↻ br_read_ue br_read_bit br_read_bits br_read_bit ↻ br_read_bits ↻ br_read_se br_read_ue ↻ sys_close nx_h264_parse_sps sys_mmap ↻ br_init ↻ br_read_bits ↻ br_read_ue ↻ nx_h264_is_high br_read_se ↻ nx_h264_decode_iframe sys_mmap ↻ br_init ↻ nx_h264_parse_slice_header br_read_ue ↻ br_read_bits ↻ br_read_se ↻ nx_h264_mb_parse_itype br_read_ue ↻ nx_h264_mb_type_class

structs

none

consts

22const POSTER_MAGIC_2026: i64 = 2026
23const POSTER_MAGIC_91881: i64 = 91881
24const POSTER_MAGIC_22554: i64 = 22554
25const POSTER_MAGIC_46802: i64 = 46802
26const POSTER_MAGIC_116130: i64 = 116130
27const POSTER_MAGIC_1024: i64 = 1024
28const POSTER_MAGIC_8192: i64 = 8192
30const PRECHECK: i64 = 262144 // phase-1 read: covers PAT/PMT/SPS/PPS -> fast CABAC skip (rule 11)
31const POSTER_MAX: i64 = 480 // longest poster side in px (data-driven cap, rule 11)
32const JPEG_QUALITY: i64 = 80
38const CP_MAX_MB_DIM: i64 = 1024 // per-axis MB cap (16384 px, above 8K) -- also prevents mbW*mbH i64 overflow
39const CP_MAX_MBS: i64 = 696320 // H.264 Level 6.2 MaxFS (largest legal coded frame, in macroblocks)

functions

41func cp_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
called by 1: main calls 1: sys_write
42func cp_num(v: i64) -> i64
called by 1: main calls 2: sys_mmapsys_write
56func read_head(path: *u8, buf: *u8) -> i64
70func build_poster_rgb(yf: *u8, uf: *u8, vf: *u8, W: i64, cpW: i64, cropW: i64, cropH: i64, dstW: i64, dstH: i64, dst: *u8) -> i64
called by 1: main
118func encode_jpeg(out: *u8, dstW: i64, dstH: i64, rgb: *u8) -> i64
148func rd8(v: i64) -> i64 { var r: i64 = (v/8)*8; if r < 8 { r = 8 } return r }
called by 1: main
150func main(argc: i64, argv: *i64) -> i64