Community
cancel
Showing results for 
Search instead for 
Did you mean: 
79 Views

IPP LZSS stream format/description

Hello everyone,

I'm looking for Intel's IPP LZSS description. What I've found so far is that it uses 32KB window and MAX_MATCH=256 (Why?)

The most well-known LZSS implementation is Haruhiko Okumura's "LZSS.C". Even Microsoft Compress is based on his code - it's 4KB window, MAX_MATCH=17 (or 18 in some siblings)

Any ideas?

0 Kudos
3 Replies
Sergey_K_Intel
Employee
79 Views

Hi Ilya,

It is a specific of implementation. Now it's hard to recall why it was done so. Probably, because longer lengthes provide better compression ratio on standard data sets.

Regards,
Sergey

79 Views

It's understood. But original LZSS is byte-aligned - 8 literal/match flags are packet into one byte, 16-bit LZ token consists of 4-bit match length + 12-bit offset/match distance. Is Intel's LZSS byte-aligned as well? How exactly literals and matches are coded? Is this LZSS totally undocumented??

Sergey_K_Intel
Employee
79 Views

IPP LZSS is totally undocumented, since we haven't assumed decoding of IPP LZSS-coded sequences with something else than IPP decoder. As far as I see from source code, the format is compatible with other LZSS implementations. That is, 1-bit flag, then either byte literal or offset-length pair (15-bit offset and 8-bit length).

The LZSS functions are oriented on source byte stream, so the LZSS encoder output is not byte-aligned (i.e. bit-oriented). Each EncodeLZSS function produces as much output as necessary dependending on input stream data and destination buffer length. The byte alignment happens only when EncodeLZSSFlush function is called.

Regards,
Sergey

Reply