Skip to content

Source layout

YadeWira edited this page Nov 7, 2026 · 3 revisions

Source layout

pas/pjajpeg.pas JPEG ↔ DCT coefficients, plus what is needed to rebuild the exact bits
pas/pjajls.pas JPEG-LS ↔ samples, the same way
pas/pjaarith.pas the binary arithmetic coder
pas/pjamodel.pas the context models (SSE4.1 assembly for the mixer, chosen at run time)
pas/pjav7c.c, pas/pjav7c_loop.h, pas/pjav7.pas stream version 7's model in C (SSE2, plus SSE4.1 and AVX2 copies chosen at run time), and its Pascal side
pas/pjasysc.c C around the model: BLAKE3 chunks, the Huffman scan reader and writer, the FF scan
pas/build_c.sh builds the C part for FreePascal to link
pas/pjaj2k.pas, pas/pjaj2kcs.pas JPEG 2000: the boxes and codestreams found in a file; a codestream taken apart and rebuilt byte for byte (tier 2: packets, tag trees, layers)
pas/pjaj2kt1.c JPEG 2000 tier 1: the MQ coder, the passes, how each encoder ends its segments
pas/pjaj2km.pas, pas/pjaj2kmc.c stream version 8's mode 1: the decisions through a context-mixing model (and mode 3 for HTJ2K, with pjaj2kht.c and pjaj2khm.c)
pas/pjaj2kpx.pas, pas/pjaj2kpm.c modes 2 and 4: a lossless codestream as its pixels (wavelets, the bitonal and multi-bit pixel models)
pas/pjacodec.pas the compressed stream, verified when compressing; bands in threads
pas/pjablake3.pas BLAKE3, checked against the official implementation
pas/pjaformat.pas, pas/pjalimits.pas the .pja file: header, size, hash
pas/pjapack.pas codec and format together, in the order that makes it safe
pas/pjafs.pas writing the output: no links followed, no half-written files, nothing unverified under its name
pas/pjacli.pas the pja command (jobs, threads shared by size, the committer thread that flushes outputs)
pas/pjainfo.pas, pjainfojpeg.pas, pjainfoj2k.pas, pjainfopja.pas pja info: a file's structure, one provider for each format
pas/pjareport.pas, pas/pjasysinfo.pas pja report and --version: the build, the system, the issue link
pas/pjabench.pas, pas/pjaselftest.pas (+ .inc) pja bench, and pja selftest with the samples inside the binary
pas/pjastage.pas the per-thread stage clock behind --stats
pas/pjathread.pas, pas/pjacpu.pas a thread join by event (FPC's waits nap 100 ms), the processor count and features
pas/pjaheap.pas the process heap for the Windows libraries (FPC's DLL heap could delete its own lock)
pas/lib/ libpja: the C library (pja.h, pjalib.pas), the 7-Zip filter and codec (pjafilter.c, pja7z.c)
pas/tests/ the tests the two suites run, cli.sh for the command
pas/plugin/ PJA as a zpaq-std codec plugin
pas/plugin/zpaql/ the plugin's decoder in the language zpaqlc compiles to ZPAQL
tools/zpaql/ a compiler to ZPAQL, a ZPAQL interpreter and the generator of the plugin's decoder (Python, build time only)
doc/ CODEC.md (how the codec works, what was measured and tried), FORMAT.md, POLICY.md, CLI.md

Clone this wiki locally