Home | History | Annotate | Download | only in doc
      1 <html>
      2 <head>
      3 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      4 <title>lz4 1.7.2 Manual</title>
      5 </head>
      6 <body>
      7 <h1>lz4 1.7.2 Manual</h1>
      8 <hr>
      9 <a name="Contents"></a><h2>Contents</h2>
     10 <ol>
     11 <li><a href="#Chapter1">Introduction</a></li>
     12 <li><a href="#Chapter2">Tuning parameter</a></li>
     13 <li><a href="#Chapter3">Private definitions</a></li>
     14 <li><a href="#Chapter4">Simple Functions</a></li>
     15 <li><a href="#Chapter5">Advanced Functions</a></li>
     16 <li><a href="#Chapter6">Streaming Compression Functions</a></li>
     17 <li><a href="#Chapter7">Streaming Decompression Functions</a></li>
     18 </ol>
     19 <hr>
     20 <a name="Chapter1"></a><h2>Introduction</h2><pre>
     21   LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core,
     22   scalable with multi-cores CPU. It features an extremely fast decoder, with speed in
     23   multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.
     24 
     25   The LZ4 compression library provides in-memory compression and decompression functions.
     26   Compression can be done in:
     27     - a single step (described as Simple Functions)
     28     - a single step, reusing a context (described in Advanced Functions)
     29     - unbounded multiple steps (described as Streaming compression)
     30 
     31   lz4.h provides block compression functions. It gives full buffer control to user.
     32   Block compression functions are not-enough to send information,
     33   since it's still necessary to provide metadata (such as compressed size),
     34   and each application can do it in whichever way it wants.
     35   For interoperability, there is LZ4 frame specification (doc/lz4_Frame_format.md).
     36   A library is provided to take care of it, see lz4frame.h.
     37 <BR></pre>
     38 
     39 <h3>Version</h3><pre><b>int LZ4_versionNumber (void);
     40 const char* LZ4_versionString (void);
     41 </b></pre><BR>
     42 <a name="Chapter2"></a><h2>Tuning parameter</h2><pre></pre>
     43 
     44 <pre><b>#define LZ4_MEMORY_USAGE 14
     45 </b><p> Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
     46  Increasing memory usage improves compression ratio
     47  Reduced memory usage can improve speed, due to cache effect
     48  Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
     49  
     50 </p></pre><BR>
     51 
     52 <a name="Chapter3"></a><h2>Private definitions</h2><pre>
     53  Do not use these definitions.
     54  They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`.
     55  If you use these definitions in your code, it will break when you upgrade LZ4 to a new version.
     56 <BR></pre>
     57 
     58 <pre><b>typedef struct {
     59     uint32_t hashTable[LZ4_HASH_SIZE_U32];
     60     uint32_t currentOffset;
     61     uint32_t initCheck;
     62     const uint8_t* dictionary;
     63     uint8_t* bufferStart;   </b>/* obsolete, used for slideInputBuffer */<b>
     64     uint32_t dictSize;
     65 } LZ4_stream_t_internal;
     66 </b></pre><BR>
     67 <pre><b>typedef struct {
     68     const uint8_t* externalDict;
     69     size_t extDictSize;
     70     const uint8_t* prefixEnd;
     71     size_t prefixSize;
     72 } LZ4_streamDecode_t_internal;
     73 </b></pre><BR>
     74 <pre><b>typedef struct {
     75     unsigned int hashTable[LZ4_HASH_SIZE_U32];
     76     unsigned int currentOffset;
     77     unsigned int initCheck;
     78     const unsigned char* dictionary;
     79     unsigned char* bufferStart;   </b>/* obsolete, used for slideInputBuffer */<b>
     80     unsigned int dictSize;
     81 } LZ4_stream_t_internal;
     82 </b></pre><BR>
     83 <pre><b>typedef struct {
     84     const unsigned char* externalDict;
     85     size_t extDictSize;
     86     const unsigned char* prefixEnd;
     87     size_t prefixSize;
     88 } LZ4_streamDecode_t_internal;
     89 </b></pre><BR>
     90 <a name="Chapter4"></a><h2>Simple Functions</h2><pre></pre>
     91 
     92 <pre><b>int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize);
     93 </b><p>    Compresses 'sourceSize' bytes from buffer 'source'
     94     into already allocated 'dest' buffer of size 'maxDestSize'.
     95     Compression is guaranteed to succeed if 'maxDestSize' >= LZ4_compressBound(sourceSize).
     96     It also runs faster, so it's a recommended setting.
     97     If the function cannot compress 'source' into a more limited 'dest' budget,
     98     compression stops *immediately*, and the function result is zero.
     99     As a consequence, 'dest' content is not valid.
    100     This function never writes outside 'dest' buffer, nor read outside 'source' buffer.
    101         sourceSize  : Max supported value is LZ4_MAX_INPUT_VALUE
    102         maxDestSize : full or partial size of buffer 'dest' (which must be already allocated)
    103         return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize)
    104               or 0 if compression fails 
    105 </p></pre><BR>
    106 
    107 <pre><b>int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize);
    108 </b><p>    compressedSize : is the precise full size of the compressed block.
    109     maxDecompressedSize : is the size of destination buffer, which must be already allocated.
    110     return : the number of bytes decompressed into destination buffer (necessarily <= maxDecompressedSize)
    111              If destination buffer is not large enough, decoding will stop and output an error code (<0).
    112              If the source stream is detected malformed, the function will stop decoding and return a negative result.
    113              This function is protected against buffer overflow exploits, including malicious data packets.
    114              It never writes outside output buffer, nor reads outside input buffer.
    115 </p></pre><BR>
    116 
    117 <a name="Chapter5"></a><h2>Advanced Functions</h2><pre></pre>
    118 
    119 <pre><b>int LZ4_compressBound(int inputSize);
    120 </b><p>    Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible)
    121     This function is primarily useful for memory allocation purposes (destination buffer size).
    122     Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example).
    123     Note that LZ4_compress_default() compress faster when dest buffer size is >= LZ4_compressBound(srcSize)
    124         inputSize  : max supported value is LZ4_MAX_INPUT_SIZE
    125         return : maximum output size in a "worst case" scenario
    126               or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE)
    127 </p></pre><BR>
    128 
    129 <pre><b>int LZ4_compress_fast (const char* source, char* dest, int sourceSize, int maxDestSize, int acceleration);
    130 </b><p>    Same as LZ4_compress_default(), but allows to select an "acceleration" factor.
    131     The larger the acceleration value, the faster the algorithm, but also the lesser the compression.
    132     It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed.
    133     An acceleration value of "1" is the same as regular LZ4_compress_default()
    134     Values <= 0 will be replaced by ACCELERATION_DEFAULT (see lz4.c), which is 1.
    135 </p></pre><BR>
    136 
    137 <pre><b>int LZ4_sizeofState(void);
    138 int LZ4_compress_fast_extState (void* state, const char* source, char* dest, int inputSize, int maxDestSize, int acceleration);
    139 </b><p>    Same compression function, just using an externally allocated memory space to store compression state.
    140     Use LZ4_sizeofState() to know how much memory must be allocated,
    141     and allocate it on 8-bytes boundaries (using malloc() typically).
    142     Then, provide it as 'void* state' to compression function.
    143 </p></pre><BR>
    144 
    145 <pre><b>int LZ4_compress_destSize (const char* source, char* dest, int* sourceSizePtr, int targetDestSize);
    146 </b><p>    Reverse the logic, by compressing as much data as possible from 'source' buffer
    147     into already allocated buffer 'dest' of size 'targetDestSize'.
    148     This function either compresses the entire 'source' content into 'dest' if it's large enough,
    149     or fill 'dest' buffer completely with as much data as possible from 'source'.
    150         *sourceSizePtr : will be modified to indicate how many bytes where read from 'source' to fill 'dest'.
    151                          New value is necessarily <= old value.
    152         return : Nb bytes written into 'dest' (necessarily <= targetDestSize)
    153               or 0 if compression fails
    154 </p></pre><BR>
    155 
    156 <pre><b>int LZ4_decompress_fast (const char* source, char* dest, int originalSize);
    157 </b><p>    originalSize : is the original and therefore uncompressed size
    158     return : the number of bytes read from the source buffer (in other words, the compressed size)
    159              If the source stream is detected malformed, the function will stop decoding and return a negative result.
    160              Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes.
    161     note : This function fully respect memory boundaries for properly formed compressed data.
    162            It is a bit faster than LZ4_decompress_safe().
    163            However, it does not provide any protection against intentionally modified data stream (malicious input).
    164            Use this function in trusted environment only (data to decode comes from a trusted source).
    165 </p></pre><BR>
    166 
    167 <pre><b>int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize);
    168 </b><p>    This function decompress a compressed block of size 'compressedSize' at position 'source'
    169     into destination buffer 'dest' of size 'maxDecompressedSize'.
    170     The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached,
    171     reducing decompression time.
    172     return : the number of bytes decoded in the destination buffer (necessarily <= maxDecompressedSize)
    173        Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller.
    174              Always control how many bytes were decoded.
    175              If the source stream is detected malformed, the function will stop decoding and return a negative result.
    176              This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets
    177 </p></pre><BR>
    178 
    179 <a name="Chapter6"></a><h2>Streaming Compression Functions</h2><pre></pre>
    180 
    181 <pre><b>typedef struct {
    182   union {
    183     long long table[LZ4_STREAMSIZE_U64];
    184     LZ4_stream_t_internal internal_donotuse;
    185   };
    186 } LZ4_stream_t;
    187 </b><p> information structure to track an LZ4 stream.
    188  important : init this structure content before first use !
    189  note : only allocated directly the structure if you are statically linking LZ4
    190         If you are using liblz4 as a DLL, please use below construction methods instead.
    191  
    192 </p></pre><BR>
    193 
    194 <pre><b>void LZ4_resetStream (LZ4_stream_t* streamPtr);
    195 </b><p>  Use this function to init an allocated `LZ4_stream_t` structure
    196  
    197 </p></pre><BR>
    198 
    199 <pre><b>LZ4_stream_t* LZ4_createStream(void);
    200 int           LZ4_freeStream (LZ4_stream_t* streamPtr);
    201 </b><p>  LZ4_createStream() will allocate and initialize an `LZ4_stream_t` structure.
    202   LZ4_freeStream() releases its memory.
    203   In the context of a DLL (liblz4), please use these methods rather than the static struct.
    204   They are more future proof, in case of a change of `LZ4_stream_t` size.
    205  
    206 </p></pre><BR>
    207 
    208 <pre><b>int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
    209 </b><p>  Use this function to load a static dictionary into LZ4_stream.
    210   Any previous data will be forgotten, only 'dictionary' will remain in memory.
    211   Loading a size of 0 is allowed.
    212   Return : dictionary size, in bytes (necessarily <= 64 KB)
    213  
    214 </p></pre><BR>
    215 
    216 <pre><b>int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int maxDstSize, int acceleration);
    217 </b><p>  Compress buffer content 'src', using data from previously compressed blocks as dictionary to improve compression ratio.
    218   Important : Previous data blocks are assumed to still be present and unmodified !
    219   'dst' buffer must be already allocated.
    220   If maxDstSize >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster.
    221   If not, and if compressed data cannot fit into 'dst' buffer size, compression stops, and function returns a zero.
    222  
    223 </p></pre><BR>
    224 
    225 <pre><b>int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int dictSize);
    226 </b><p>  If previously compressed data block is not guaranteed to remain available at its memory location,
    227   save it into a safer place (char* safeBuffer).
    228   Note : you don't need to call LZ4_loadDict() afterwards,
    229          dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue().
    230   Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error.
    231  
    232 </p></pre><BR>
    233 
    234 <a name="Chapter7"></a><h2>Streaming Decompression Functions</h2><pre></pre>
    235 
    236 <pre><b>typedef struct {
    237   union {
    238     unsigned long long table[LZ4_STREAMDECODESIZE_U64];
    239     LZ4_streamDecode_t_internal internal_donotuse;
    240   };
    241 </b></pre><BR>
    242 <pre><b>LZ4_streamDecode_t* LZ4_createStreamDecode(void);
    243 int                 LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream);
    244 </b><p> information structure to track an LZ4 stream.
    245  init this structure content using LZ4_setStreamDecode or memset() before first use !
    246 
    247  In the context of a DLL (liblz4) please prefer usage of construction methods below.
    248  They are more future proof, in case of a change of LZ4_streamDecode_t size in the future.
    249  LZ4_createStreamDecode will allocate and initialize an LZ4_streamDecode_t structure
    250  LZ4_freeStreamDecode releases its memory.
    251  
    252 </p></pre><BR>
    253 
    254 <pre><b>int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize);
    255 </b><p>  Use this function to instruct where to find the dictionary.
    256   Setting a size of 0 is allowed (same effect as reset).
    257   @return : 1 if OK, 0 if error
    258  
    259 </p></pre><BR>
    260 
    261 <pre><b>int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxDecompressedSize);
    262 int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize);
    263 </b><p>    These decoding functions allow decompression of multiple blocks in "streaming" mode.
    264     Previously decoded blocks *must* remain available at the memory position where they were decoded (up to 64 KB)
    265     In the case of a ring buffers, decoding buffer must be either :
    266     - Exactly same size as encoding buffer, with same update rule (block boundaries at same positions)
    267       In which case, the decoding & encoding ring buffer can have any size, including very small ones ( < 64 KB).
    268     - Larger than encoding buffer, by a minimum of maxBlockSize more bytes.
    269       maxBlockSize is implementation dependent. It's the maximum size you intend to compress into a single block.
    270       In which case, encoding and decoding buffers do not need to be synchronized,
    271       and encoding ring buffer can have any size, including small ones ( < 64 KB).
    272     - _At least_ 64 KB + 8 bytes + maxBlockSize.
    273       In which case, encoding and decoding buffers do not need to be synchronized,
    274       and encoding ring buffer can have any size, including larger than decoding buffer.
    275     Whenever these conditions are not possible, save the last 64KB of decoded data into a safe buffer,
    276     and indicate where it is saved using LZ4_setStreamDecode()
    277 


278 279
int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxDecompressedSize, const char* dictStart, int dictSize);
    280 int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize);
    281 

Advanced decoding functions : 282 These decoding functions work the same as 283 a combination of LZ4_setStreamDecode() followed by LZ4_decompress_x_continue() 284 They are stand-alone. They don't need nor update an LZ4_streamDecode_t structure. 285 </p></pre><BR> 286 287 </html> 288 </body> 289