Improve LZMA compression parameters at extreme levels.

Fix incorrect thread calculation.
Remove some cruft.
This commit is contained in:
Moinak Ghosh 2012-07-09 23:28:11 +05:30
parent 00d74e86c5
commit db0c9ea9ac
3 changed files with 13 additions and 7 deletions

View file

@ -31,8 +31,6 @@
#include <allocator.h> #include <allocator.h>
#define SZ_ERROR_DESTLEN 100 #define SZ_ERROR_DESTLEN 100
#define LZMA_MAX_DICT (1 << 30)
#define LZMA_DICT_THRESH (1 << 29)
#define LZMA_DEFAULT_DICT (1 << 24) #define LZMA_DEFAULT_DICT (1 << 24)
CLzmaEncProps *p = NULL; CLzmaEncProps *p = NULL;
@ -73,12 +71,20 @@ lzma_init(void **data, int *level, ssize_t chunksize)
p->dictSize = 0; p->dictSize = 0;
} }
/* Determine the fast bytes value. */ /* Determine the fast bytes value. */
if (*level < 7) if (*level < 7) {
p->fb = 32; p->fb = 32;
else if (*level < 10)
} else if (*level < 10) {
p->fb = 64; p->fb = 64;
else
} else if (*level < 13) {
p->fb = 64;
p->mc = 128;
} else {
p->fb = 128; p->fb = 128;
p->mc = 256;
}
p->level = *level; p->level = *level;
LzmaEncProps_Normalize(p); LzmaEncProps_Normalize(p);
slab_cache_add(p->litprob_sz); slab_cache_add(p->litprob_sz);

2
main.c
View file

@ -819,7 +819,7 @@ start_compress(const char *filename, uint64_t chunksize, int level)
chunksize = sbuf.st_size; chunksize = sbuf.st_size;
nthreads = 1; nthreads = 1;
} else { } else {
if (nthreads > sbuf.st_size / chunksize) { if (nthreads == 0 || nthreads > sbuf.st_size / chunksize) {
nthreads = sbuf.st_size / chunksize; nthreads = sbuf.st_size / chunksize;
if (sbuf.st_size % chunksize) if (sbuf.st_size % chunksize)
nthreads++; nthreads++;

View file

@ -92,7 +92,7 @@ rabin_context_t *
create_rabin_context(uint64_t chunksize, uint64_t real_chunksize, const char *algo) { create_rabin_context(uint64_t chunksize, uint64_t real_chunksize, const char *algo) {
rabin_context_t *ctx; rabin_context_t *ctx;
unsigned char *current_window_data; unsigned char *current_window_data;
uint32_t blknum, index; uint32_t blknum;
int level = 14; int level = 14;
/* /*