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. * All rights reserved.
* *
* This source code is licensed under the BSD-style license found in the * 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 */ /* current maximum the library will accept */
#define LZ5MT_THREAD_MAX 128 #define LZ5MT_THREAD_MAX 128
#define LZ5MT_LEVEL_MAX 16 #define LZ5MT_LEVEL_MAX 15
#define LZ5FMT_MAGICNUMBER 0x184D2205U #define LZ5FMT_MAGICNUMBER 0x184D2205U
#define LZ5FMT_MAGIC_SKIPPABLE 0x184D2A50U #define LZ5FMT_MAGIC_SKIPPABLE 0x184D2A50U
@@ -55,7 +55,7 @@ typedef enum {
# undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */ # undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
#endif #endif
#define PREFIX(name) LZ5MT_error_##name #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 unsigned LZ5MT_isError(size_t code);
extern const char* LZ5MT_getErrorString(size_t code); extern const char* LZ5MT_getErrorString(size_t code);
@@ -73,7 +73,9 @@ typedef struct {
* reading and writing functions * reading and writing functions
* - you can use stdio functions or plain read/write * - you can use stdio functions or plain read/write
* - just write some wrapper on your own * - 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_read) (void *args, LZ5MT_Buffer * in);
typedef int (fn_write) (void *args, LZ5MT_Buffer * out); typedef int (fn_write) (void *args, LZ5MT_Buffer * out);
@@ -95,7 +97,7 @@ typedef struct LZ5MT_CCtx_s LZ5MT_CCtx;
* 1) allocate new cctx * 1) allocate new cctx
* - return cctx or zero on error * - return cctx or zero on error
* *
* @level - 1 .. 16 * @level - 1 .. 9
* @threads - 1 .. LZ5MT_THREAD_MAX * @threads - 1 .. LZ5MT_THREAD_MAX
* @inputsize - if zero, becomes some optimal value for the level * @inputsize - if zero, becomes some optimal value for the level
* - if nonzero, the given value is taken * - if nonzero, the given value is taken
@@ -104,7 +106,7 @@ LZ5MT_CCtx *LZ5MT_createCCtx(int threads, int level, int inputsize);
/** /**
* 2) threaded compression * 2) threaded compression
* - return -1 on error * - errorcheck via
*/ */
size_t LZ5MT_compressCCtx(LZ5MT_CCtx * ctx, LZ5MT_RdWr_t * rdwr); 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); void LZ5MT_freeCCtx(LZ5MT_CCtx * ctx);
/* ************************************** /* **************************************
* Decompression - TODO, but it's easy... * Decompression
****************************************/ ****************************************/
typedef struct LZ5MT_DCtx_s LZ5MT_DCtx; typedef struct LZ5MT_DCtx_s LZ5MT_DCtx;
@@ -131,10 +133,8 @@ typedef struct LZ5MT_DCtx_s LZ5MT_DCtx;
* 1) allocate new cctx * 1) allocate new cctx
* - return cctx or zero on error * - return cctx or zero on error
* *
* @level - 1 .. 22
* @threads - 1 .. LZ5MT_THREAD_MAX * @threads - 1 .. LZ5MT_THREAD_MAX
* @srclen - the max size of src for LZ5MT_CompressCCtx() * @ inputsize - used for single threaded standard lz5 format without skippable frames
* @dstlen - the min size of dst
*/ */
LZ5MT_DCtx *LZ5MT_createDCtx(int threads, int inputsize); 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 7-Zip external method IDs, that are not included to 7-Zip
--------------------------------------------------------- ---------------------------------------------------------
History of this document 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 Overview of defined ID ranges
----------------------------- -----------------------------
F7 0x xx - reserved ID | Codec, Author | 7-Zip Plugin Author
F7 10 xx - LZHAM by Rich Geldreich ---------+------------------------------+----------------------
F7 11 01 - ZStandard by Yann Collet, Tino Reichardt F7 0x xx | reserved |
F7 11 04 - LZ4 by Yann Collet, Tino Reichardt F7 10 xx | LZHAM, Rich Geldreich | Rich Geldreich
F7 11 05 - LZ5 by Przemyslaw Skibinski, Tino Reichardt 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 Range F7 10 xx - LZHAM
----------------------- -----------------------
Description: Description:
Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster Lossless is a data compression codec with LZMA-like ratios but 1.5x-8x faster
decompression speed, C/C++ decompression speed.
License: 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: 7-Zip Container Header:
Byte _ver; Byte _ver;
@@ -36,13 +40,13 @@ LZHAM library is provided as open source software using a MIT license.
Byte _reserved[1]; Byte _reserved[1];
Algorithm author: Rich Geldreich Algorithm author: Rich Geldreich
Algorithm Homepage: https://github.com/richgel999/lzham_codec - Homepage: https://github.com/richgel999/lzham_codec
Source code: https://github.com/richgel999/lzham_codec - Source: https://github.com/richgel999/lzham_codec
Codec plugin author: Rich Geldreich Codec plugin author: Rich Geldreich
Codec Homepage: http://richg42.blogspot.com/2015/11/lzham-custom-codec-plugin-for-7-zip.html - Homepage: http://richg42.blogspot.com/2015/11/lzham-custom-codec-plugin-for-7-zip.html
Source Code: https://github.com/richgel999/lzham_codec_devel - Source: https://github.com/richgel999/lzham_codec_devel
Range F7 11 01, ZStandard Range F7 11 01, ZStandard
@@ -51,12 +55,10 @@ Range F7 11 01, ZStandard
Description: Description:
Zstandard is a real-time compression algorithm, providing high compression Zstandard is a real-time compression algorithm, providing high compression
ratios. It offers a very wide range of compression / speed trade-off, while 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 being backed by a very fast decoder.
special mode for small data, called dictionary compression, and can create
dictionaries from any sample set.
License: 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: 7-Zip Container Header:
Byte _ver_major; // currently 1 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 - the other two bytes should be set to zero currently and are
reserved for future use reserved for future use
Algorithm author: Yann Collet Algorithm author: Yann Collet
Algorithm Homepage: https://facebook.github.io/zstd/ - Homepage: https://facebook.github.io/zstd/
Source code: https://github.com/facebook/zstd - Source: https://github.com/facebook/zstd
Codec plugin author: Tino Reichardt Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/ - Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd - Source: https://github.com/mcmilk/7-Zip-zstd
Modes: Modes:
- threading is supported through skippable frame id 0x184D2A50U - threading is supported through skippable frame id 0x184D2A50U
- all levels are supported (1..22) - all levels are supported (1..22)
- future versions of zstd will support multithreading out of the box - 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 - the codec is used as archiv handler also, see ZstdHandler.cpp
- this handler is does not use any additional headers, it supports the plain - 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 - when compiled with ZSTD_LEGACY_SUPPORT, then support is increased to these
addtional version numbers of zstd: v0.1 up v0.7 addtional version numbers of zstd: v0.1 up v0.7
- future formats of this algorithm will be fully compatible with release v1.0 of - future formats of this algorithm will be fully compatible with release v1.0
ZStandard (ZStandard 0.8 == ZStandard 1.0) of ZStandard (ZStandard 0.8 == ZStandard 1.0)
- one ID should be okay for this codec - one ID should be okay for this codec
Versions: Versions:
The 7-Zip codec will be kept in sync with the current releases of ZStandard. 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 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 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, 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 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: 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: 7-Zip Container Header:
Byte _ver_major; // currently 1 Byte _ver_major; // currently 1
Byte _ver_minor; // currently 7 Byte _ver_minor; // currently 7
Byte _level; // 1..16 Byte _level; // 1..12
Byte _reserved[2]; Byte _reserved[2];
- this header holds some information about the version, which was - this header holds some information about the version, which was
used for creating that 7-Zip container data 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 - the other two bytes should be set to zero currently and are
reserved for future use reserved for future use
Algorithm author: Yann Collet
Algorithm author: Yann Collet - Homepage: https://lz4.github.io/lz4/
Algorithm Homepage: https://lz4.github.io/lz4/ - Source: https://github.com/lz4/lz4
Source code: https://github.com/lz4/lz4
Codec plugin author: Tino Reichardt Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/ - Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd - Source: https://github.com/mcmilk/7-Zip-zstd
Modes: Modes:
- threading is supported through skippable frame id 0x184D2A50U - threading is supported through skippable frame id 0x184D2A50U
- all levels of LZ4 v1.7.4 are supported (1..16) - all levels of LZ4 v1.7.4 are supported (1..16)
- the codec is used as archiv handler also, see Lz4Handler.cpp - the codec is used as archiv handler also, see Lz4Handler.cpp
- this handler is does not use any additional headers, it supports the plain - this handler is does not use any additional headers
lz4 v1.7.4 format (this covers all current lz4 implemetations) - 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 - future formats of this algorithm should be fully compatible with current
release release
- one ID should be okay for this codec - 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. compression and decompression.
License: 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: 7-Zip Container Header:
Byte _ver_major; // currently 1 Byte _ver_major; // currently 1
Byte _ver_minor; // currently 5 Byte _ver_minor; // currently 5
Byte _level; // 1..16 Byte _level; // 1..15
Byte _reserved[2]; Byte _reserved[2];
- this header holds some information about the version, which was - this header holds some information about the version, which was used for
used for creating that 7-Zip container data creating that 7-Zip container data
- _ver_major should contain the major release of LZ5 - _ver_major should contain the major release of LZ5
- _ver_minor 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 - _level should contain the level, the data is packed with
- the other two bytes should be set to zero currently and are - the other two bytes should be set to zero currently and are reserved for
reserved for future use future use
Algorithm author: Przemyslaw Skibinski Algorithm author: Przemyslaw Skibinski
Algorithm Homepage: https://github.com/inikep/lz5 - Homepage: https://github.com/inikep/lz5
Source code: https://github.com/inikep/lz5 - Source: https://github.com/inikep/lz5
Codec plugin author: Tino Reichardt Codec plugin author: Tino Reichardt
Codec Homepage: https://mcmilk.de/projects/7-Zip-zstd/ - Homepage: https://mcmilk.de/projects/7-Zip-zstd/
Source Code: https://github.com/mcmilk/7-Zip-zstd - Source: https://github.com/mcmilk/7-Zip-zstd
Modes: Modes:
- threading is supported through skippable frame id 0x184D2A50U - 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 - the codec is used as archiv handler also, see Lz5Handler.cpp
- this handler is does not use any additional headers, it supports the plain - this handler is does not use any additional headers, it supports the plain
lz5 v1.5 format lz5 v1.5 format
- future formats of this algorithm may not be compatible with current release, - future formats of this algorithm will not follow
this codec is very experimental
- one ID should be okay for this codec - one ID should be okay for this codec
Versions: Versions:
The 7-Zip codec will be kept in sync with the current releases of LZ5. The 7-Zip codec will be frozen to v1.5 of this codec.
The current codec plugin supports version v1.5. Version 2.0 will follow, when it
seems to be stable.
--- ---
End of document 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) 11 xx - reserved (Tino Reichardt)
01 - ZSTD 01 - ZSTD
02 - Brotli
04 - LZ4 04 - LZ4
05 - LZ5 05 - LZ5
06 - Lizard
06.. - Crypto 06.. - Crypto