1*8a62a2a5SMartin Matuska // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only 2*8a62a2a5SMartin Matuska /* 3*8a62a2a5SMartin Matuska * Copyright (c) Meta Platforms, Inc. and affiliates. 4*8a62a2a5SMartin Matuska * All rights reserved. 5*8a62a2a5SMartin Matuska * 6*8a62a2a5SMartin Matuska * This source code is licensed under both the BSD-style license (found in the 7*8a62a2a5SMartin Matuska * LICENSE file in the root directory of this source tree) and the GPLv2 (found 8*8a62a2a5SMartin Matuska * in the COPYING file in the root directory of this source tree). 9*8a62a2a5SMartin Matuska * You may select, at your option, one of the above-listed licenses. 10*8a62a2a5SMartin Matuska */ 11*8a62a2a5SMartin Matuska 12*8a62a2a5SMartin Matuska #ifndef ZSTD_CLEVELS_H 13*8a62a2a5SMartin Matuska #define ZSTD_CLEVELS_H 14*8a62a2a5SMartin Matuska 15*8a62a2a5SMartin Matuska #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressionParameters */ 16*8a62a2a5SMartin Matuska #include "../zstd.h" 17*8a62a2a5SMartin Matuska 18*8a62a2a5SMartin Matuska /*-===== Pre-defined compression levels =====-*/ 19*8a62a2a5SMartin Matuska 20*8a62a2a5SMartin Matuska #define ZSTD_MAX_CLEVEL 22 21*8a62a2a5SMartin Matuska 22*8a62a2a5SMartin Matuska #ifdef __GNUC__ 23*8a62a2a5SMartin Matuska __attribute__((__unused__)) 24*8a62a2a5SMartin Matuska #endif 25*8a62a2a5SMartin Matuska 26*8a62a2a5SMartin Matuska static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = { 27*8a62a2a5SMartin Matuska { /* "default" - for any srcSize > 256 KB */ 28*8a62a2a5SMartin Matuska /* W, C, H, S, L, TL, strat */ 29*8a62a2a5SMartin Matuska { 19, 12, 13, 1, 6, 1, ZSTD_fast }, /* base for negative levels */ 30*8a62a2a5SMartin Matuska { 19, 13, 14, 1, 7, 0, ZSTD_fast }, /* level 1 */ 31*8a62a2a5SMartin Matuska { 20, 15, 16, 1, 6, 0, ZSTD_fast }, /* level 2 */ 32*8a62a2a5SMartin Matuska { 21, 16, 17, 1, 5, 0, ZSTD_dfast }, /* level 3 */ 33*8a62a2a5SMartin Matuska { 21, 18, 18, 1, 5, 0, ZSTD_dfast }, /* level 4 */ 34*8a62a2a5SMartin Matuska { 21, 18, 19, 3, 5, 2, ZSTD_greedy }, /* level 5 */ 35*8a62a2a5SMartin Matuska { 21, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6 */ 36*8a62a2a5SMartin Matuska { 21, 19, 20, 4, 5, 8, ZSTD_lazy }, /* level 7 */ 37*8a62a2a5SMartin Matuska { 21, 19, 20, 4, 5, 16, ZSTD_lazy2 }, /* level 8 */ 38*8a62a2a5SMartin Matuska { 22, 20, 21, 4, 5, 16, ZSTD_lazy2 }, /* level 9 */ 39*8a62a2a5SMartin Matuska { 22, 21, 22, 5, 5, 16, ZSTD_lazy2 }, /* level 10 */ 40*8a62a2a5SMartin Matuska { 22, 21, 22, 6, 5, 16, ZSTD_lazy2 }, /* level 11 */ 41*8a62a2a5SMartin Matuska { 22, 22, 23, 6, 5, 32, ZSTD_lazy2 }, /* level 12 */ 42*8a62a2a5SMartin Matuska { 22, 22, 22, 4, 5, 32, ZSTD_btlazy2 }, /* level 13 */ 43*8a62a2a5SMartin Matuska { 22, 22, 23, 5, 5, 32, ZSTD_btlazy2 }, /* level 14 */ 44*8a62a2a5SMartin Matuska { 22, 23, 23, 6, 5, 32, ZSTD_btlazy2 }, /* level 15 */ 45*8a62a2a5SMartin Matuska { 22, 22, 22, 5, 5, 48, ZSTD_btopt }, /* level 16 */ 46*8a62a2a5SMartin Matuska { 23, 23, 22, 5, 4, 64, ZSTD_btopt }, /* level 17 */ 47*8a62a2a5SMartin Matuska { 23, 23, 22, 6, 3, 64, ZSTD_btultra }, /* level 18 */ 48*8a62a2a5SMartin Matuska { 23, 24, 22, 7, 3,256, ZSTD_btultra2}, /* level 19 */ 49*8a62a2a5SMartin Matuska { 25, 25, 23, 7, 3,256, ZSTD_btultra2}, /* level 20 */ 50*8a62a2a5SMartin Matuska { 26, 26, 24, 7, 3,512, ZSTD_btultra2}, /* level 21 */ 51*8a62a2a5SMartin Matuska { 27, 27, 25, 9, 3,999, ZSTD_btultra2}, /* level 22 */ 52*8a62a2a5SMartin Matuska }, 53*8a62a2a5SMartin Matuska { /* for srcSize <= 256 KB */ 54*8a62a2a5SMartin Matuska /* W, C, H, S, L, T, strat */ 55*8a62a2a5SMartin Matuska { 18, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */ 56*8a62a2a5SMartin Matuska { 18, 13, 14, 1, 6, 0, ZSTD_fast }, /* level 1 */ 57*8a62a2a5SMartin Matuska { 18, 14, 14, 1, 5, 0, ZSTD_dfast }, /* level 2 */ 58*8a62a2a5SMartin Matuska { 18, 16, 16, 1, 4, 0, ZSTD_dfast }, /* level 3 */ 59*8a62a2a5SMartin Matuska { 18, 16, 17, 3, 5, 2, ZSTD_greedy }, /* level 4.*/ 60*8a62a2a5SMartin Matuska { 18, 17, 18, 5, 5, 2, ZSTD_greedy }, /* level 5.*/ 61*8a62a2a5SMartin Matuska { 18, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6.*/ 62*8a62a2a5SMartin Matuska { 18, 18, 19, 4, 4, 4, ZSTD_lazy }, /* level 7 */ 63*8a62a2a5SMartin Matuska { 18, 18, 19, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */ 64*8a62a2a5SMartin Matuska { 18, 18, 19, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */ 65*8a62a2a5SMartin Matuska { 18, 18, 19, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */ 66*8a62a2a5SMartin Matuska { 18, 18, 19, 5, 4, 12, ZSTD_btlazy2 }, /* level 11.*/ 67*8a62a2a5SMartin Matuska { 18, 19, 19, 7, 4, 12, ZSTD_btlazy2 }, /* level 12.*/ 68*8a62a2a5SMartin Matuska { 18, 18, 19, 4, 4, 16, ZSTD_btopt }, /* level 13 */ 69*8a62a2a5SMartin Matuska { 18, 18, 19, 4, 3, 32, ZSTD_btopt }, /* level 14.*/ 70*8a62a2a5SMartin Matuska { 18, 18, 19, 6, 3,128, ZSTD_btopt }, /* level 15.*/ 71*8a62a2a5SMartin Matuska { 18, 19, 19, 6, 3,128, ZSTD_btultra }, /* level 16.*/ 72*8a62a2a5SMartin Matuska { 18, 19, 19, 8, 3,256, ZSTD_btultra }, /* level 17.*/ 73*8a62a2a5SMartin Matuska { 18, 19, 19, 6, 3,128, ZSTD_btultra2}, /* level 18.*/ 74*8a62a2a5SMartin Matuska { 18, 19, 19, 8, 3,256, ZSTD_btultra2}, /* level 19.*/ 75*8a62a2a5SMartin Matuska { 18, 19, 19, 10, 3,512, ZSTD_btultra2}, /* level 20.*/ 76*8a62a2a5SMartin Matuska { 18, 19, 19, 12, 3,512, ZSTD_btultra2}, /* level 21.*/ 77*8a62a2a5SMartin Matuska { 18, 19, 19, 13, 3,999, ZSTD_btultra2}, /* level 22.*/ 78*8a62a2a5SMartin Matuska }, 79*8a62a2a5SMartin Matuska { /* for srcSize <= 128 KB */ 80*8a62a2a5SMartin Matuska /* W, C, H, S, L, T, strat */ 81*8a62a2a5SMartin Matuska { 17, 12, 12, 1, 5, 1, ZSTD_fast }, /* base for negative levels */ 82*8a62a2a5SMartin Matuska { 17, 12, 13, 1, 6, 0, ZSTD_fast }, /* level 1 */ 83*8a62a2a5SMartin Matuska { 17, 13, 15, 1, 5, 0, ZSTD_fast }, /* level 2 */ 84*8a62a2a5SMartin Matuska { 17, 15, 16, 2, 5, 0, ZSTD_dfast }, /* level 3 */ 85*8a62a2a5SMartin Matuska { 17, 17, 17, 2, 4, 0, ZSTD_dfast }, /* level 4 */ 86*8a62a2a5SMartin Matuska { 17, 16, 17, 3, 4, 2, ZSTD_greedy }, /* level 5 */ 87*8a62a2a5SMartin Matuska { 17, 16, 17, 3, 4, 4, ZSTD_lazy }, /* level 6 */ 88*8a62a2a5SMartin Matuska { 17, 16, 17, 3, 4, 8, ZSTD_lazy2 }, /* level 7 */ 89*8a62a2a5SMartin Matuska { 17, 16, 17, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */ 90*8a62a2a5SMartin Matuska { 17, 16, 17, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */ 91*8a62a2a5SMartin Matuska { 17, 16, 17, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */ 92*8a62a2a5SMartin Matuska { 17, 17, 17, 5, 4, 8, ZSTD_btlazy2 }, /* level 11 */ 93*8a62a2a5SMartin Matuska { 17, 18, 17, 7, 4, 12, ZSTD_btlazy2 }, /* level 12 */ 94*8a62a2a5SMartin Matuska { 17, 18, 17, 3, 4, 12, ZSTD_btopt }, /* level 13.*/ 95*8a62a2a5SMartin Matuska { 17, 18, 17, 4, 3, 32, ZSTD_btopt }, /* level 14.*/ 96*8a62a2a5SMartin Matuska { 17, 18, 17, 6, 3,256, ZSTD_btopt }, /* level 15.*/ 97*8a62a2a5SMartin Matuska { 17, 18, 17, 6, 3,128, ZSTD_btultra }, /* level 16.*/ 98*8a62a2a5SMartin Matuska { 17, 18, 17, 8, 3,256, ZSTD_btultra }, /* level 17.*/ 99*8a62a2a5SMartin Matuska { 17, 18, 17, 10, 3,512, ZSTD_btultra }, /* level 18.*/ 100*8a62a2a5SMartin Matuska { 17, 18, 17, 5, 3,256, ZSTD_btultra2}, /* level 19.*/ 101*8a62a2a5SMartin Matuska { 17, 18, 17, 7, 3,512, ZSTD_btultra2}, /* level 20.*/ 102*8a62a2a5SMartin Matuska { 17, 18, 17, 9, 3,512, ZSTD_btultra2}, /* level 21.*/ 103*8a62a2a5SMartin Matuska { 17, 18, 17, 11, 3,999, ZSTD_btultra2}, /* level 22.*/ 104*8a62a2a5SMartin Matuska }, 105*8a62a2a5SMartin Matuska { /* for srcSize <= 16 KB */ 106*8a62a2a5SMartin Matuska /* W, C, H, S, L, T, strat */ 107*8a62a2a5SMartin Matuska { 14, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */ 108*8a62a2a5SMartin Matuska { 14, 14, 15, 1, 5, 0, ZSTD_fast }, /* level 1 */ 109*8a62a2a5SMartin Matuska { 14, 14, 15, 1, 4, 0, ZSTD_fast }, /* level 2 */ 110*8a62a2a5SMartin Matuska { 14, 14, 15, 2, 4, 0, ZSTD_dfast }, /* level 3 */ 111*8a62a2a5SMartin Matuska { 14, 14, 14, 4, 4, 2, ZSTD_greedy }, /* level 4 */ 112*8a62a2a5SMartin Matuska { 14, 14, 14, 3, 4, 4, ZSTD_lazy }, /* level 5.*/ 113*8a62a2a5SMartin Matuska { 14, 14, 14, 4, 4, 8, ZSTD_lazy2 }, /* level 6 */ 114*8a62a2a5SMartin Matuska { 14, 14, 14, 6, 4, 8, ZSTD_lazy2 }, /* level 7 */ 115*8a62a2a5SMartin Matuska { 14, 14, 14, 8, 4, 8, ZSTD_lazy2 }, /* level 8.*/ 116*8a62a2a5SMartin Matuska { 14, 15, 14, 5, 4, 8, ZSTD_btlazy2 }, /* level 9.*/ 117*8a62a2a5SMartin Matuska { 14, 15, 14, 9, 4, 8, ZSTD_btlazy2 }, /* level 10.*/ 118*8a62a2a5SMartin Matuska { 14, 15, 14, 3, 4, 12, ZSTD_btopt }, /* level 11.*/ 119*8a62a2a5SMartin Matuska { 14, 15, 14, 4, 3, 24, ZSTD_btopt }, /* level 12.*/ 120*8a62a2a5SMartin Matuska { 14, 15, 14, 5, 3, 32, ZSTD_btultra }, /* level 13.*/ 121*8a62a2a5SMartin Matuska { 14, 15, 15, 6, 3, 64, ZSTD_btultra }, /* level 14.*/ 122*8a62a2a5SMartin Matuska { 14, 15, 15, 7, 3,256, ZSTD_btultra }, /* level 15.*/ 123*8a62a2a5SMartin Matuska { 14, 15, 15, 5, 3, 48, ZSTD_btultra2}, /* level 16.*/ 124*8a62a2a5SMartin Matuska { 14, 15, 15, 6, 3,128, ZSTD_btultra2}, /* level 17.*/ 125*8a62a2a5SMartin Matuska { 14, 15, 15, 7, 3,256, ZSTD_btultra2}, /* level 18.*/ 126*8a62a2a5SMartin Matuska { 14, 15, 15, 8, 3,256, ZSTD_btultra2}, /* level 19.*/ 127*8a62a2a5SMartin Matuska { 14, 15, 15, 8, 3,512, ZSTD_btultra2}, /* level 20.*/ 128*8a62a2a5SMartin Matuska { 14, 15, 15, 9, 3,512, ZSTD_btultra2}, /* level 21.*/ 129*8a62a2a5SMartin Matuska { 14, 15, 15, 10, 3,999, ZSTD_btultra2}, /* level 22.*/ 130*8a62a2a5SMartin Matuska }, 131*8a62a2a5SMartin Matuska }; 132*8a62a2a5SMartin Matuska 133*8a62a2a5SMartin Matuska 134*8a62a2a5SMartin Matuska 135*8a62a2a5SMartin Matuska #endif /* ZSTD_CLEVELS_H */ 136