Skip to content

PJA 0.8.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 15:47
· 86 commits to main since this release

Ten new codecs in the zpaq-std plugin: every decoder -sa uses, 3 to 8% smaller and 2 to 6% faster in zpaq 7.15.

  • The 8 codecs. pja78, pjax78, pjals8, pjall8, pjalsx8 and their z (pja7z8, pjax7z8, pjalsz8, pjallz8, pjalsxz8) are the codec named without the 8, with the same streams, the same files and the same memory, and a ZPAQL decoder compiled with the compiler's new opt=3: functions inlined where that saves bytes, one operand passed through a register in place of a temporary, and return values kept in a register. Every zpaq-std block carries its decoder, so the saving repeats in each block.
codec ZPAQL before 8
pja7 / pja78 35,104 32,954
pja7z / pja7z8 35,829 33,603
pjax7 / pjax78 35,211 33,197
pjax7z / pjax7z8 35,987 33,949
pjalso / pjals8 24,076 22,430
pjalszo / pjalsz8 24,724 23,046
pjallo / pjall8 15,058 13,901
pjallzo / pjallz8 15,693 14,517
pjalsxo / pjalsx8 25,623 24,611
pjalsxzo / pjalsxz8 26,278 25,244
  • Faster without the plugin. libzpaq (zpaq 7.15's engine) on the same data: 30 photos 69.3 -> 68.0 s, 18 MPO and 12-bit JPEGs 216.4 -> 206.2 s, 67 subsampled JPEG-LS 180.8 -> 170.4 s; every file back.
  • Checked on Windows XP: the original zpaq 7.15 (32-bit, no plugin) extracts archives written with pja78, pjax78, pjals8, pjall8 and pjalsx8 byte for byte, and the x86 plugin round-trips every file with each of the ten.
  • Nothing else changes. zpaq-std's -sa takes the 8 codecs in place of pja7, pjax7, pjall, pjals, pjalsx (and their z, and the o codecs) once it ships this plugin; those stay to read older archives. The .pja format and the streams are 0.7.0's: the command writes the same bytes. The wiki's zpaq-std plugin page has the codec families and names.

Downloads

platform the pja command the zpaq-std plugin libpja (C library, 7-Zip plugin)
Linux x86-64 pja-0.8.0-linux-x86_64.tar.gz pja-0.8.0-zpaqstd-plugin-linux-x86_64.tar.gz pja-0.8.0-lib-linux-x86_64.tar.gz
Linux x86 (32-bit) pja-0.8.0-linux-x86.tar.gz pja-0.8.0-zpaqstd-plugin-linux-x86.tar.gz pja-0.8.0-lib-linux-x86.tar.gz
Linux arm64 pja-0.8.0-linux-arm64.tar.gz pja-0.8.0-zpaqstd-plugin-linux-arm64.tar.gz pja-0.8.0-lib-linux-arm64.tar.gz
macOS arm64 pja-0.8.0-macos-arm64.tar.gz pja-0.8.0-zpaqstd-plugin-macos-arm64.tar.gz pja-0.8.0-lib-macos-arm64.tar.gz
Windows x64 (7 and later) pja-0.8.0-windows-x64.zip pja-0.8.0-zpaqstd-plugin-windows-x64.zip pja-0.8.0-lib-windows-x64.zip
Windows x86 (XP and later) pja-0.8.0-windows-x86.zip pja-0.8.0-zpaqstd-plugin-windows-x86.zip pja-0.8.0-lib-windows-x86.zip

pja-0.8.0-zpaqstd.tar.gz holds the plugin's sources as zpaq-std vendors them, with VENDOR.md. CI builds and checks every binary on its own platform (.github/workflows/release.yml); libpja is checked with its C test and, on Linux x86-64, through a real 7-Zip. SHA256SUMS has the checksums. The Linux builds need glibc 2.34 or later. The macOS ones are not signed: run xattr -d com.apple.quarantine after unpacking.