7-zip is a powerful and reliable command line and GUI archiver. I've been privately using 7-zip to thoroughly test the LZHAM codec's streaming API for several years. There's been enough interest in this plugin that I've finally decided to make it an official part of LZHAM.
Why bother using this? Because LZHAM extracts and tests much faster, around 2x-3x faster than LZMA, with similar compression ratios.
Importantly, if you create any archives using this custom codec DLL, you'll (obviously) need this DLL to also extract these archives. The LZHAM v1.x bitstream format is locked in stone, so future DLL's using newer versions of LZHAM will be forwards and backwards compatible with this release.
You can find the source to the plugin on github here. The plugin itself lives in the lzham7zip directory.
To use this, create a new directory named "codecs" wherever you installed 7-zip, then copy the correct DLL (either x86 or x64) into this directory. For example, if you've installed the 32-bit version of 7-zip, extract the file LzhamCodec_x86.dll into "C:\Program Files (x86)\7-Zip\codecs". For the 64-bit version, extract it into "C:\Program Files\7-Zip\codecs".
To verify the installation, enter "7z.exe i" in a command prompt (cmd.exe) to list all the installed codecs. You should see this:
Codecs:
......
0 ED 6F00181 AES256CBC
1 ED 4F71001 LZHAM
11/21/2015 05:00 PM <DIR> .
11/21/2015 05:00 PM <DIR> ..
11/21/2015 05:00 PM <DIR> Asm
11/21/2015 05:00 PM <DIR> bin
11/21/2015 05:00 PM <DIR> C
11/21/2015 05:00 PM <DIR> CPP
11/21/2015 05:00 PM <DIR> DOC
11/21/2015 05:00 PM <DIR> lzham_codec_devel
Now load this Visual Studio solution: lzham_codec_devel/lzham7zip/LzhamCodec.sln.
It builds with VS 2010 and VS 2015. The DLL's will be output into the bin directory.
Why bother using this? Because LZHAM extracts and tests much faster, around 2x-3x faster than LZMA, with similar compression ratios.
Importantly, if you create any archives using this custom codec DLL, you'll (obviously) need this DLL to also extract these archives. The LZHAM v1.x bitstream format is locked in stone, so future DLL's using newer versions of LZHAM will be forwards and backwards compatible with this release.
You can find the source to the plugin on github here. The plugin itself lives in the lzham7zip directory.
Installation
I've uploaded precompiled DLL's for the x86 and x64 versions of 7-zip v15.12 here.To use this, create a new directory named "codecs" wherever you installed 7-zip, then copy the correct DLL (either x86 or x64) into this directory. For example, if you've installed the 32-bit version of 7-zip, extract the file LzhamCodec_x86.dll into "C:\Program Files (x86)\7-Zip\codecs". For the 64-bit version, extract it into "C:\Program Files\7-Zip\codecs".
To verify the installation, enter "7z.exe i" in a command prompt (cmd.exe) to list all the installed codecs. You should see this:
Codecs:
......
0 ED 6F00181 AES256CBC
1 ED 4F71001 LZHAM
Build Instructions
If you want to compile this yourself, first grab the source code to 7-zip v15.12 and extract the archive somewhere. Next, "git clone https://github.com/richgel999/lzham_codec_devel" into this directory. Your final directory structure should be:11/21/2015 05:00 PM <DIR> .
11/21/2015 05:00 PM <DIR> ..
11/21/2015 05:00 PM <DIR> Asm
11/21/2015 05:00 PM <DIR> bin
11/21/2015 05:00 PM <DIR> C
11/21/2015 05:00 PM <DIR> CPP
11/21/2015 05:00 PM <DIR> DOC
11/21/2015 05:00 PM <DIR> lzham_codec_devel
Now load this Visual Studio solution: lzham_codec_devel/lzham7zip/LzhamCodec.sln.
It builds with VS 2010 and VS 2015. The DLL's will be output into the bin directory.
Usage Instructions
Example command line:
7z -m0=LZHAM -ma=0 -mmt=8 -mx=9 -md=64M a temp.7z *.dll
For maximum compression, use the 64-bit version and use:
7z -m0=LZHAM -ma=0 -mmt=8 -mx=9 -md=512M a temp.7z *.dll
Command line options (also see this guide):
-m0=LZHAM - Use LZHAM for compression
-ma=[0,1] - 0=non-deterministic mode, 1=deterministic (slower)
-mmt=X - Set total # of threads to use. Default=total CPU's.
-mx=[0-9] - Compression mode, 0=fastest, 9=slowest
-md={Size}[b|k|m] - Set dictionary size, up to 64MB in x86, 512MB in x64
Unfortunately, the file manager GUI doesn't allow you to select LZHAM via the UI. Instead, you must specify custom parameters: 0=bcj 1=lzham mt=8
Note if you don't specify "mt=X", where X is the number of threads to use for compression, LZHAM will just use whatever value is in the GUI's "Number of CPU threads" pulldown (1 or 2 threads), which will be very slow.