From f8dd8f86069fb002a1e22c5a6994f6a41bc6f0af Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Mon, 18 Aug 2014 16:00:00 +0100 Subject: [PATCH] Added : LZ4 Framing Format, new version (v1.4.1) Changed to HTML format Modified .gitattributes to protect png files from crlf modifications --- .gitattributes | 2 +- LZ4_Framing_Format.html | 1 + images/image00.png | Bin 0 -> 8028 bytes images/image01.png | Bin 0 -> 3121 bytes images/image02.png | Bin 0 -> 6355 bytes images/image03.png | Bin 0 -> 3512 bytes images/image04.png | Bin 0 -> 4089 bytes images/image05.png | Bin 0 -> 4233 bytes images/image06.png | Bin 0 -> 6246 bytes 9 files changed, 2 insertions(+), 1 deletion(-) create mode 100755 LZ4_Framing_Format.html create mode 100755 images/image00.png create mode 100755 images/image01.png create mode 100755 images/image02.png create mode 100755 images/image03.png create mode 100755 images/image04.png create mode 100755 images/image05.png create mode 100755 images/image06.png diff --git a/.gitattributes b/.gitattributes index fbcf75b..17db2ec 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,4 +7,4 @@ # Denote files that should not be modified. *.odt binary - +*.png binary diff --git a/LZ4_Framing_Format.html b/LZ4_Framing_Format.html new file mode 100755 index 0000000..bd1304c --- /dev/null +++ b/LZ4_Framing_Format.html @@ -0,0 +1 @@ +LZ4 Framing format - stable

LZ4 Framing Format


Notices

Copyright (c) 2013-2014 Yann Collet

Permission is granted to copy and distribute this document for any  purpose and without charge, including translations into other  languages and incorporation into compilations, provided that the copyright notice and this notice are preserved, and that any substantive changes or deletions from the original are clearly marked.

Version

1.4.1

Introduction

The purpose of this document is to define a lossless compressed data format, that is independent of CPU type, operating system, file system and character set, suitable for File compression, Pipe and streaming compression using the LZ4 algorithm : http://code.google.com/p/lz4/

The data can be produced or consumed, even for an arbitrarily long sequentially presented input data stream, using only an a priori bounded amount of intermediate storage, and hence can be used in data communications.  The format uses the LZ4 compression method, and xxHash-32 checksum method, for detection of data corruption.

The data format defined by this specification does not attempt to allow random access to compressed data.

This specification is intended for use by implementers of software to compress data into LZ4 format and/or decompress data from LZ4 format. The text of the specification assumes a basic background in programming at the level of bits and other primitive data representations.

Unless otherwise indicated below, a compliant compressor must produce data sets that conform to all the specifications presented here.

A compliant decompressor must be able to accept and decompress at least one data set that conforms to the specifications presented here; whenever it does not support any parameter, it must produce a non-ambiguous error code and associated error message explaining which parameter value is unsupported (a typical example being an unsupported buffer size).

Distribution of this document is unlimited.


Summary :

Introduction

General structure of LZ4 Framing Format

Frame Descriptor

Data Blocks

Skippable Frames

Legacy format

Appendix


General Structure of LZ4 Framing format

LZ4 Framing Format - General Structure.png

Magic Number

4 Bytes, Little endian format.
Value :
0x184D2204

Frame Descriptor

3 to 15 Bytes, to be detailed in the next part.
Most
significant part of the spec.

Data Blocks

To be detailed later on.
That’s where compressed data is stored.

EndMark

The flow of blocks ends when the last data block has a size of “0”.
The size is expressed as a 32-bits value.

Content Checksum

Content Checksum verify that the full content has been decoded correctly.
The content checksum is the result of
xxh32() hash function digesting the original (decoded) data as input, and a seed of zero.
Content checksum is only present when its
associated flag is set in the framing descriptor. Content Checksum validates the result, that all blocks were fully transmitted in the correct order and without error, and also that the encoding/decoding process itself generated no distortion. Its usage is recommended.

Frame Concatenation

In some circumstances, it may be preferable to append multiple frames, for example in order to add new data to an existing compressed file without re-framing it.

In such case, each frame has its own set of descriptor flags. Each frame is considered independent. The only relation between frames is their sequential order.

The ability to decode multiple concatenated frames within a single stream or file is left outside of this specification. While a logical default behavior could be to decode the frames in their sequential order, this is not a requirement.


Frame Descriptor

LZ4 Framing Format - Frame Descriptor.png

LZ4 Framing Format - Descriptor Flags.png

The descriptor uses a minimum of 3 bytes, and up to 15 bytes depending on optional parameters.
In the picture, bit 7 is highest bit, while bit 0 is lowest.

Version Number :

2-bits field, must be set to “01”.
Any other value cannot be decoded by this
version of the specification.
Other version numbers will use different flag layouts.

Block Independence flag :

If this flag is set to “1”, blocks are independent, and can therefore be decoded independently, in parallel.
If this flag is set to “
0”, each block depends on previous ones for decoding (up to LZ4 window size, which is 64 KB). In this case, it’s necessary to decode all blocks in sequence.

Block dependency improves compression ratio, especially for small blocks. On the other hand, it makes jumps or multi-threaded decoding impossible.

Block checksum flag :

If this flag is set, each data block will be followed by a 4-bytes checksum, calculated by using the xxHash-32 algorithm on the raw (compressed) data block.
The intention is to detect data corruption (storage or transmission errors) immediately, before decoding.
Block ch
ecksum usage is optional.

Content Size flag :

If this flag is set, the original (uncompressed) size of data included within the frame will be present as an 8 bytes unsigned value, little endian format, after the flags.

Recommended value : “0” (not present)

Content checksum flag :

If this flag is set, a content checksum will be appended after the EoS mark.

Recommended value : “1” (content checksum is present)

Preset Dictionary flag :

If this flag is set, a Dict-ID field will be present, just after the descriptor flags and the Content size.

Usual value : “0” (not present)

Block Maximum Size :

This information is intended to help the decoder allocate the right amount of memory.
Size here refers to the original (uncompressed) data size.
Block Maximum Size
is one value among the following table :

The decoder may refuse to allocate block sizes above a (system-specific) size.
Unused values may be used in a future revision of the spec.
A decoder conformant to the current version of the spec is only able to decode blocksizes defined in this spec.

Reserved bits :

Value of reserved bits must be 0 (zero).
Reserved bit might be used in a future version of the specification, to enable any (yet-to-decide) optional feature.
If this happens, a decoder respecting the current version of the specification shall not be able to decode such a frame.

Content Size

This is the original (uncompressed) size.
This information is optional, and only present if the
associated flag is set.
Content size is provided using unsigned 8 Bytes, for a maximum of 16 HexaBytes.
Format is Little endian.
This field has no impact on decoding, it just informs the decoder how much data the frame holds (for example, to display it during decoding process, or for verification purpose). It can be safely skipped by a conformant decoder.

Dictionary ID

Dict-ID is only present if the associated flag is set.
A dictionary is specially useful to compress short input sequences. The compressor can take advantage of the dictionary context to encode the input in a more compact manner. It works as a kind of “known prefix” which is used by both the compressor and the decompressor to “warm-up” reference tables and help compress small data blocks.

Dict-ID is the xxHash-32 checksum of this “known prefix”. Format is Little endian.

The decompressor uses this identifier to determine which dictionary has been used by the compressor. The compressor and the decompressor must use exactly the same dictionary. This document does not specify the contents of predefined dictionaries, since the optimal dictionaries are application specific. Any data format using this feature must precisely define the allowed dictionaries.

Within a single frame, a single dictionary can be defined.
When the frame descriptor defines independent blocks, each block will be initialised with the same dictionary.
If the frame descriptor defines linked blocks, the dictionary will only be used once, at the beginning of the decoding process.

Header Checksum :

One-byte checksum of all descriptor fields, including optional ones when present.
The byte is second byte of
xxh32() : { (xxh32()>>8) & 0xFF } ,
using zero as a seed,
and the full Frame Descriptor as an input (
including optional fields when they are present).
A different checksum indicates an error in the descriptor.


Data Blocks

Block Size

This field uses 4-bytes,  format is little-endian.

The highest bit is “1” if data in the block is uncompressed.

The highest bit is “0” if data in the block is compressed by LZ4.

All other bits give the size, in bytes, of the following data block (the size does not include the checksum if present).

Block Size shall never be larger than Block Maximum Size. Such a thing could happen when the original data is incompressible. In this case, such a data block shall be passed in uncompressed format.

Data

Where the actual data to decode stands. It might be compressed or not, depending on previous field indications.
Uncompressed size of Data can be any size, up to “block maximum size”.
Note that the data block is not necessarily filled : an arbitrary “flush” may happen anytime. Any block can be
“partially filled”.

Block checksum :

Only present if the associated flag is set.
This is a 4-bytes checksum value, in little endian format,
calculated by using the xxHash-32 algorithm
on the raw (undecoded) data block,
and a seed of zero.

The intention is to detect data corruption (storage or transmission errors)
before decoding.

Block checksum is cumulative with Content checksum.


Skippable Frames

LZ4 Framing Format - Skippable Frame.png

Skippable frames allow the integration of user-defined data into a flow of concatenated frames.
Its design is pretty straightforward, with the sole objective to allow the decoder to quickly skip over user-defined data and continue decoding.

For the purpose of facilitating identification, it is discouraged to start a flow of concatenated frames with a skippable frame. If there is a need to start such a flow with some user data encapsulated into a skippable frame, it’s recommended to start will a zero-byte LZ4 frame followed by a skippable frame. This will make it easier for file type identifiers.

 

Magic Number

4 Bytes, Little endian format.
Value :
0x184D2A5X, which means any value from 0x184D2A50 to 0x184D2A5F. All 16 values are valid to identify a skippable frame.

Frame Size 

This is the size, in bytes, of the following User Data (without including the magic number nor the size field itself).
4 Bytes,
Little endian format, unsigned 32-bits.
This means User Data can’t be bigger than (2^32-1) Bytes.

User Data

User Data can be anything. Data will just be skipped by the decoder.


Legacy frame

The Legacy frame format was defined into the initial versions of “LZ4Demo”.
Newer compressors should not use this format anymore, since it is too restrictive.
It is recommended that decompressors shall be able to decode this format during the transition period.

Main properties of legacy format :
- Fixed block size :
8 MB.
- All blocks must be completely filled, except the last one.
- All blocks are always compressed, even when compression is detri
mental.
- The last block is detected either because it is followed by the “EOF” (End of File) mark
, or because it is followed by a known Frame Magic Number.
- No checksum
- Convention is Little endian

Magic Number

4 Bytes, Little endian format.
Value :
0x184C2102

Block Compressed Size

This is the size, in bytes, of the following compressed data block.
4 Bytes,
Little endian format.

Data

Where the actual data stands.
Data is
always compressed, even when compression is detrimental (i.e. larger than original size).


Appendix  

Version changes

1.4.1 : changed wording from “stream” to “frame”

1.4 : added skippable streams, re-added stream checksum

1.3 : modified header checksum

1.2 : reduced choice of “block size”, to postpone decision on “dynamic size of BlockSize Field”.

1.1 : optional fields are now part of the descriptor

1.0 : changed “block size” specification, adding a compressed/uncompressed flag

0.9 : reduced scale of “block maximum size” table

0.8 : removed : high compression flag

0.7 : removed : stream checksum

0.6 : settled : stream size uses 8 bytes, endian convention is little endian

0.5: added copyright notice

0.4 : changed format to Google Doc compatible OpenDocument

\ No newline at end of file diff --git a/images/image00.png b/images/image00.png new file mode 100755 index 0000000000000000000000000000000000000000..69b4ee623dacab0d736971b73dcf5a4ddd9fc66b GIT binary patch literal 8028 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 literal 0 HcmV?d00001 diff --git a/images/image01.png b/images/image01.png new file mode 100755 index 0000000000000000000000000000000000000000..e82d02b10afa022899ee49945240c80b815a6e89 GIT binary patch literal 3121 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 literal 0 HcmV?d00001 diff --git a/images/image03.png b/images/image03.png new file mode 100755 index 0000000000000000000000000000000000000000..efe42f82bd2f177b842099b29cccad8ff278d7b0 GIT binary patch literal 3512 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 Bduadw literal 0 HcmV?d00001 diff --git a/images/image04.png b/images/image04.png new file mode 100755 index 0000000000000000000000000000000000000000..8e1b40ca0d0200c44d47b0069be632602123c94d GIT binary patch literal 4089 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