Repository navigation
PJA 0.1.0
A new model for pja a, stream version 7, with its core in C: 3.1% smaller than 0.0.8 on photos and about 1.6 times as fast.
- Stream version 7. The coefficient model is redone in C
(pas/pjav7c.c, SSE2 with SSE4.1 and AVX2 copies chosen at run time):
every edge's nonzero count before its flags, direct interior signs, the
interior count as a bit length; contexts from the luma block under a
chroma block and from the Cb block at Cr's place; predictions for the
edge and DC signs; and tuned counters and mixers. The work around the
model (FF scan, BLAKE3 chunks, the Huffman scan reader and writer) is
in C too (pas/pjasysc.c). Neither calls any library. Everything
measured and tried is indoc/CODEC.md. - How much. On the 151 photos: 56,939,009 bytes against 0.0.8's
58,788,017 (72.61% of the JPEGs against 74.96%); compressing, verifying
as by default, 73.7 s against 118.6 s on one thread and 10.2 s against
17.0 s on eight; extracting, 36.2 s against 57.3 s and 5.3 s against
8.1 s. The 78-file corpus 70.39% (72.08%), MPO 73.38% (74.13%),
arithmetic-coded JPEG 74.59% (76.50%), generated JPEGs 73.73% (75.61%),
12-bit JPEG 88.14% (88.34%); lossless JPEG and JPEG-LS as before. - Same everywhere. The streams are the same byte for byte with and
without SSE2, SSE4.1, AVX2 or the assembly, on every platform and with
any number of threads; CI checks it on all six. --fastis still accepted and changes nothing: the new model is
faster than the old fast one.pja xreads every version's.pja.- Building now needs a C compiler too:
pas/build_c.sh(gcc or
clang, native or cross). - The zpaq-std plugin has no C and does not use version 7; its
streams, its ZPAQL and what each codec takes are 0.0.6's. One change:
on macOS its exported names carry the leading underscoredlsymlooks
for there (found by zpaq-std).
Downloads
| platform | the pja command |
the zpaq-std plugin |
|---|---|---|
| Linux x86-64 | pja-0.1.0-linux-x86_64.tar.gz |
pja-0.1.0-zpaqstd-plugin-linux-x86_64.tar.gz (pja.so) |
| Linux x86 (32-bit) | pja-0.1.0-linux-x86.tar.gz |
pja-0.1.0-zpaqstd-plugin-linux-x86.tar.gz (pja.so) |
| Linux arm64 | pja-0.1.0-linux-arm64.tar.gz |
pja-0.1.0-zpaqstd-plugin-linux-arm64.tar.gz (pja.so) |
| macOS arm64 | pja-0.1.0-macos-arm64.tar.gz |
pja-0.1.0-zpaqstd-plugin-macos-arm64.tar.gz (pja.dylib) |
| Windows x64 (7 and later) | pja-0.1.0-windows-x64.zip |
pja-0.1.0-zpaqstd-plugin-windows-x64.zip (pja.dll) |
| Windows x86 (XP and later) | pja-0.1.0-windows-x86.zip |
pja-0.1.0-zpaqstd-plugin-windows-x86.zip (pja.dll) |
pja-0.1.0-zpaqstd.tar.gz has the plugin's sources as zpaq-std vendors them, with VENDOR.md. The command's archives carry pja (or pja.exe), the README, the license, NOTICE and the command's manual (CLI.md). Every binary is built and checked by CI on its own platform (.github/workflows/release.yml); SHA256SUMS has the checksums. The Linux builds need glibc 2.34 or later; the macOS ones are not signed (xattr -d com.apple.quarantine pja after unpacking).
Also checked before publishing, with these very binaries: Windows 10, 64-bit and 32-bit, the same streams as Linux for every sample of the repository and every file back (28 of 28 checks each, wildcards included); Windows XP SP3, 32-bit, every sample back byte for byte through wildcards from cmd (38 of 38); the 32-bit plugin on XP, every sample through a codec back (36 of 38; the other two, as designed, through none); the macOS plugin exports _zpaqstd_codecs_v1.