documentation: rename Methods.txt to Methods.md

- so the markdown is nice viewable with browsers
This commit is contained in:
Tino Reichardt
2017-05-19 21:17:26 +02:00
parent a6b3f59f0e
commit 715225a73e
3 changed files with 248 additions and 207 deletions

View File

@@ -1,6 +1,6 @@
/**
* Copyright (c) 2016 Tino Reichardt
* Copyright (c) 2016 - 2017 Tino Reichardt
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
@@ -26,7 +26,7 @@ extern "C" {
/* current maximum the library will accept */
#define LZ5MT_THREAD_MAX 128
#define LZ5MT_LEVEL_MAX 16
#define LZ5MT_LEVEL_MAX 15
#define LZ5FMT_MAGICNUMBER 0x184D2205U
#define LZ5FMT_MAGIC_SKIPPABLE 0x184D2A50U
@@ -55,7 +55,7 @@ typedef enum {
# undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
#endif
#define PREFIX(name) LZ5MT_error_##name
#define ERROR(name) ((size_t)-PREFIX(name))
#define ERROR(name) ((size_t)-PREFIX(name))
extern unsigned LZ5MT_isError(size_t code);
extern const char* LZ5MT_getErrorString(size_t code);
@@ -73,7 +73,9 @@ typedef struct {
* reading and writing functions
* - you can use stdio functions or plain read/write
* - just write some wrapper on your own
* - a sample is given in 7-Zip ZS
* - a sample is given in 7-Zip ZS or lz5mt.c
* - the function should return -1 on error and zero on success
* - the read or written bytes will go to in->size or out->size
*/
typedef int (fn_read) (void *args, LZ5MT_Buffer * in);
typedef int (fn_write) (void *args, LZ5MT_Buffer * out);
@@ -95,7 +97,7 @@ typedef struct LZ5MT_CCtx_s LZ5MT_CCtx;
* 1) allocate new cctx
* - return cctx or zero on error
*
* @level - 1 .. 16
* @level - 1 .. 9
* @threads - 1 .. LZ5MT_THREAD_MAX
* @inputsize - if zero, becomes some optimal value for the level
* - if nonzero, the given value is taken
@@ -104,7 +106,7 @@ LZ5MT_CCtx *LZ5MT_createCCtx(int threads, int level, int inputsize);
/**
* 2) threaded compression
* - return -1 on error
* - errorcheck via
*/
size_t LZ5MT_compressCCtx(LZ5MT_CCtx * ctx, LZ5MT_RdWr_t * rdwr);
@@ -122,7 +124,7 @@ size_t LZ5MT_GetOutsizeCCtx(LZ5MT_CCtx * ctx);
void LZ5MT_freeCCtx(LZ5MT_CCtx * ctx);
/* **************************************
* Decompression - TODO, but it's easy...
* Decompression
****************************************/
typedef struct LZ5MT_DCtx_s LZ5MT_DCtx;
@@ -131,10 +133,8 @@ typedef struct LZ5MT_DCtx_s LZ5MT_DCtx;
* 1) allocate new cctx
* - return cctx or zero on error
*
* @level - 1 .. 22
* @threads - 1 .. LZ5MT_THREAD_MAX
* @srclen - the max size of src for LZ5MT_CompressCCtx()
* @dstlen - the min size of dst
* @ inputsize - used for single threaded standard lz5 format without skippable frames
*/
LZ5MT_DCtx *LZ5MT_createDCtx(int threads, int inputsize);

View File

@@ -1,32 +1,36 @@
7-Zip external method IDs, that are not included to 7-Zip
---------------------------------------------------------
History of this document
------------------------
- 7-Zip Version 15.01, initial release
- see https://github.com/mcmilk/7-Zip-zstd/commits/master/DOC/Methods-Extern.txt
Overview of defined ID ranges
-----------------------------
F7 0x xx - reserved
F7 10 xx - LZHAM by Rich Geldreich
F7 11 01 - ZStandard by Yann Collet, Tino Reichardt
F7 11 04 - LZ4 by Yann Collet, Tino Reichardt
F7 11 05 - LZ5 by Przemyslaw Skibinski, Tino Reichardt
ID | Codec, Author | 7-Zip Plugin Author
---------+------------------------------+----------------------
F7 0x xx | reserved |
F7 10 xx | LZHAM, Rich Geldreich | Rich Geldreich
F7 11 01 | ZStandard, Yann Collet | Tino Reichardt
F7 11 02 | Brotli, Google | Tino Reichardt
F7 11 04 | LZ4, Yann Collet | Tino Reichardt
F7 11 05 | LZ5, Przemyslaw Skibinski | Tino Reichardt
F7 11 06 | Lizard, Przemyslaw Skibinski | Tino Reichardt
Range F7 10 xx - LZHAM
-----------------------
Description:
Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster
decompression speed, C/C++
Lossless is a data compression codec with LZMA-like ratios but 1.5x-8x faster
decompression speed.
License:
LZHAM library is provided as open source software using a MIT license.
LZHAM library is provided as open source software using the MIT license.
7-Zip Container Header:
Byte _ver;
@@ -36,13 +40,13 @@ LZHAM library is provided as open source software using a MIT license.
Byte _reserved[1];
Algorithm author: Rich Geldreich
Algorithm Homepage: https://github.com/richgel999/lzham_codec
Source code: https://github.com/richgel999/lzham_codec
Algorithm author: Rich Geldreich
- Homepage: https://github.com/richgel999/lzham_codec
- Source: https://github.com/richgel999/lzham_codec
Codec plugin author: Rich Geldreich
Codec Homepage: http://richg42.blogspot.com/2015/11/lzham-custom-codec-plugin-for-7-zip.html
Source Code: https://github.com/richgel999/lzham_codec_devel
- Homepage: http://richg42.blogspot.com/2015/11/lzham-custom-codec-plugin-for-7-zip.html
- Source: https://github.com/richgel999/lzham_codec_devel
Range F7 11 01, ZStandard
@@ -51,12 +55,10 @@ Range F7 11 01, ZStandard
Description:
Zstandard is a real-time compression algorithm, providing high compression
ratios. It offers a very wide range of compression / speed trade-off, while
being backed by a very fast decoder (see benchmarks below). It also offers a
special mode for small data, called dictionary compression, and can create
dictionaries from any sample set.
being backed by a very fast decoder.
License:
Zstandard library is provided as open source software using a BSD license.
Zstandard library is provided as open source software using the BSD license.
7-Zip Container Header:
Byte _ver_major; // currently 1
@@ -71,32 +73,72 @@ Zstandard library is provided as open source software using a BSD license.
- the other two bytes should be set to zero currently and are
reserved for future use
Algorithm author: Yann Collet
Algorithm Homepage: https://facebook.github.io/zstd/
Source code: https://github.com/facebook/zstd
Algorithm author: Yann Collet
- Homepage: https://facebook.github.io/zstd/
- Source: https://github.com/facebook/zstd
Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd
- Homepage: https://mcmilk.de/projects/7-Zip-zstd/
- Source: https://github.com/mcmilk/7-Zip-zstd
Modes:
- threading is supported through skippable frame id 0x184D2A50U
- all levels are supported (1..22)
- future versions of zstd will support multithreading out of the box
-> this new format is fully compatible with the one within this codec
- this new format is fully compatible with the one within this codec
- the codec is used as archiv handler also, see ZstdHandler.cpp
- this handler is does not use any additional headers, it supports the plain
zstd v1.0 format (this covers all current v1.x implemetations)
zstd v1.0 format
- when compiled with ZSTD_LEGACY_SUPPORT, then support is increased to these
addtional version numbers of zstd: v0.1 up v0.7
- future formats of this algorithm will be fully compatible with release v1.0 of
ZStandard (ZStandard 0.8 == ZStandard 1.0)
- future formats of this algorithm will be fully compatible with release v1.0
of ZStandard (ZStandard 0.8 == ZStandard 1.0)
- one ID should be okay for this codec
Versions:
The 7-Zip codec will be kept in sync with the current releases of ZStandard.
Range F7 11 02, Brotli
----------------------
Description:
Brotli is a generic-purpose lossless compression algorithm that compresses
data using a combination of a modern variant of the LZ77 algorithm, Huffman
coding and 2nd order context modeling, with a compression ratio comparable to
the best currently available general-purpose compression methods. It is
similar in speed with deflate but offers more dense compression.
License:
The Brotli library is provided as open source software using the MIT license.
7-Zip Container Header (3 bytes):
Byte _ver_major; // currently 0
Byte _ver_minor; // currently 6
Byte _level; // currently 1..11 (Brotli quality)
- this header holds some information about the version, which was
used for creating that 7-Zip container data
- _ver_major should contain the major release of brotli
- _ver_minor should contain the major release of brotli
- _level should contain the level, the data is packed with
Algorithm author: Google Staff
- Homepage: https://brotli.org/
- Source: https://github.com/google/brotli
Codec plugin author: Tino Reichardt
- Homepage: https://mcmilk.de/projects/7-Zip-zstd/
- Source: https://github.com/mcmilk/7-Zip-zstd
Modes:
- threading is supported through skippable frame id 0x184D2A50U
- all levels are supported (1..11)
- one ID should be okay for this codec
Versions:
The 7-Zip codec will be kept in sync with the current releases of Brotli.
Range F7 11 04, LZ4
-------------------
@@ -105,15 +147,15 @@ LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s
per core (0.16 Bytes/cycle). It features an extremely fast decoder, with speed
in multiple GB/s per core (0.71 Bytes/cycle). A high compression derivative,
called LZ4_HC, is available, trading customizable CPU time for compression
ratio. LZ4 library is provided as open source software using a BSD license.
ratio.
License:
LZ4 library is provided as open source software using a BSD license.
LZ4 library is provided as open source software using the BSD license.
7-Zip Container Header:
Byte _ver_major; // currently 1
Byte _ver_minor; // currently 7
Byte _level; // 1..16
Byte _level; // 1..12
Byte _reserved[2];
- this header holds some information about the version, which was
used for creating that 7-Zip container data
@@ -123,21 +165,21 @@ LZ4 library is provided as open source software using a BSD license.
- the other two bytes should be set to zero currently and are
reserved for future use
Algorithm author: Yann Collet
Algorithm Homepage: https://lz4.github.io/lz4/
Source code: https://github.com/lz4/lz4
Algorithm author: Yann Collet
- Homepage: https://lz4.github.io/lz4/
- Source: https://github.com/lz4/lz4
Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd
- Homepage: https://mcmilk.de/projects/7-Zip-zstd/
- Source: https://github.com/mcmilk/7-Zip-zstd
Modes:
- threading is supported through skippable frame id 0x184D2A50U
- all levels of LZ4 v1.7.4 are supported (1..16)
- the codec is used as archiv handler also, see Lz4Handler.cpp
- this handler is does not use any additional headers, it supports the plain
lz4 v1.7.4 format (this covers all current lz4 implemetations)
- this handler is does not use any additional headers
- it supports the plain LZ4 v1.7.4 format (this covers all current lz4
implemetations)
- future formats of this algorithm should be fully compatible with current
release
- one ID should be okay for this codec
@@ -154,44 +196,41 @@ LZ5 is a modification of LZ4 which gives a better ratio at cost of slower
compression and decompression.
License:
LZ5 library is provided as open source software using a BSD license.
LZ5 library is provided as open source software using the BSD license.
7-Zip Container Header:
Byte _ver_major; // currently 1
Byte _ver_minor; // currently 5
Byte _level; // 1..16
Byte _level; // 1..15
Byte _reserved[2];
- this header holds some information about the version, which was
used for creating that 7-Zip container data
- this header holds some information about the version, which was used for
creating that 7-Zip container data
- _ver_major should contain the major release of LZ5
- _ver_minor should contain the major release of LZ5
- _level should contain the level, the data is packed with
- the other two bytes should be set to zero currently and are
reserved for future use
- the other two bytes should be set to zero currently and are reserved for
future use
Algorithm author: Przemyslaw Skibinski
Algorithm Homepage: https://github.com/inikep/lz5
Source code: https://github.com/inikep/lz5
Algorithm author: Przemyslaw Skibinski
- Homepage: https://github.com/inikep/lz5
- Source: https://github.com/inikep/lz5
Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd
- Homepage: https://mcmilk.de/projects/7-Zip-zstd/
- Source: https://github.com/mcmilk/7-Zip-zstd
Modes:
- threading is supported through skippable frame id 0x184D2A50U
- all levels of v1.5 are supported (1..16)
- all levels of v1.5 are supported, which means: 1..15
- the codec is used as archiv handler also, see Lz5Handler.cpp
- this handler is does not use any additional headers, it supports the plain
lz5 v1.5 format
- future formats of this algorithm may not be compatible with current release,
this codec is very experimental
- future formats of this algorithm will not follow
- one ID should be okay for this codec
Versions:
The 7-Zip codec will be kept in sync with the current releases of LZ5.
The current codec plugin supports version v1.5. Version 2.0 will follow, when it
seems to be stable.
The 7-Zip codec will be frozen to v1.5 of this codec.
---
End of document
Tino Reichardt, 2016-12-28
Tino Reichardt, 2017-05-19

View File

@@ -128,8 +128,10 @@ List of defined IDs
11 xx - reserved (Tino Reichardt)
01 - ZSTD
02 - Brotli
04 - LZ4
05 - LZ5
06 - Lizard
06.. - Crypto