/src/xz/src/liblzma/lzma/lzma_encoder_presets.c
Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: 0BSD |
2 | | |
3 | | /////////////////////////////////////////////////////////////////////////////// |
4 | | // |
5 | | /// \file lzma_encoder_presets.c |
6 | | /// \brief Encoder presets |
7 | | /// \note xz needs this even when only decoding is enabled. |
8 | | // |
9 | | // Author: Lasse Collin |
10 | | // |
11 | | /////////////////////////////////////////////////////////////////////////////// |
12 | | |
13 | | #include "common.h" |
14 | | |
15 | | |
16 | | extern LZMA_API(lzma_bool) |
17 | | lzma_lzma_preset(lzma_options_lzma *options, uint32_t preset) |
18 | 11.3k | { |
19 | 11.3k | const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK; |
20 | 11.3k | const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK; |
21 | 11.3k | const uint32_t supported_flags = LZMA_PRESET_EXTREME; |
22 | | |
23 | 11.3k | if (level > 9 || (flags & ~supported_flags)) |
24 | 0 | return true; |
25 | | |
26 | 11.3k | options->preset_dict = NULL; |
27 | 11.3k | options->preset_dict_size = 0; |
28 | | |
29 | 11.3k | options->lc = LZMA_LC_DEFAULT; |
30 | 11.3k | options->lp = LZMA_LP_DEFAULT; |
31 | 11.3k | options->pb = LZMA_PB_DEFAULT; |
32 | | |
33 | 11.3k | static const uint8_t dict_pow2[] |
34 | 11.3k | = { 18, 20, 21, 22, 22, 23, 23, 24, 25, 26 }; |
35 | 11.3k | options->dict_size = UINT32_C(1) << dict_pow2[level]; |
36 | | |
37 | 11.3k | if (level <= 3) { |
38 | 0 | options->mode = LZMA_MODE_FAST; |
39 | 0 | options->mf = level == 0 ? LZMA_MF_HC3 : LZMA_MF_HC4; |
40 | 0 | options->nice_len = level <= 1 ? 128 : 273; |
41 | 0 | static const uint8_t depths[] = { 4, 8, 24, 48 }; |
42 | 0 | options->depth = depths[level]; |
43 | 11.3k | } else { |
44 | 11.3k | options->mode = LZMA_MODE_NORMAL; |
45 | 11.3k | options->mf = LZMA_MF_BT4; |
46 | 11.3k | options->nice_len = level == 4 ? 16 : level == 5 ? 32 : 64; |
47 | 11.3k | options->depth = 0; |
48 | 11.3k | } |
49 | | |
50 | 11.3k | if (flags & LZMA_PRESET_EXTREME) { |
51 | 0 | options->mode = LZMA_MODE_NORMAL; |
52 | 0 | options->mf = LZMA_MF_BT4; |
53 | 0 | if (level == 3 || level == 5) { |
54 | 0 | options->nice_len = 192; |
55 | 0 | options->depth = 0; |
56 | 0 | } else { |
57 | 0 | options->nice_len = 273; |
58 | 0 | options->depth = 512; |
59 | 0 | } |
60 | 0 | } |
61 | | |
62 | 11.3k | return false; |
63 | 11.3k | } |