lzma_encoder_presets.c revision 213700
162449Speter/////////////////////////////////////////////////////////////////////////////// 262449Speter// 397049Speter/// \file lzma_encoder_presets.c 462449Speter/// \brief Encoder presets 562449Speter// 662449Speter// Author: Lasse Collin 762449Speter// 862449Speter// This file has been put into the public domain. 962449Speter// You can do whatever you want with this file. 1062449Speter// 1162449Speter/////////////////////////////////////////////////////////////////////////////// 1262449Speter 1362449Speter#include "common.h" 1462449Speter 1562449Speter 1662449Speterextern LZMA_API(lzma_bool) 1762449Speterlzma_lzma_preset(lzma_options_lzma *options, uint32_t preset) 1862449Speter{ 1962449Speter const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK; 2062449Speter const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK; 2162449Speter const uint32_t supported_flags = LZMA_PRESET_EXTREME; 2262449Speter 2362449Speter if (level > 9 || (flags & ~supported_flags)) 2462449Speter return true; 2562449Speter 2662449Speter options->preset_dict = NULL; 2762449Speter options->preset_dict_size = 0; 2862449Speter 2962449Speter options->lc = LZMA_LC_DEFAULT; 3062449Speter options->lp = LZMA_LP_DEFAULT; 3162449Speter options->pb = LZMA_PB_DEFAULT; 3262449Speter 3362449Speter options->dict_size = UINT32_C(1) << (uint8_t []){ 3462449Speter 18, 20, 21, 22, 22, 23, 23, 24, 25, 26 }[level]; 3562449Speter 3662449Speter if (level <= 3) { 3762449Speter options->mode = LZMA_MODE_FAST; 3862449Speter options->mf = level == 0 ? LZMA_MF_HC3 : LZMA_MF_HC4; 3962449Speter options->nice_len = level <= 1 ? 128 : 273; 4062449Speter options->depth = (uint8_t []){ 4, 8, 24, 48 }[level]; 4162449Speter } else { 4262449Speter options->mode = LZMA_MODE_NORMAL; 4362449Speter options->mf = LZMA_MF_BT4; 4462449Speter options->nice_len = level == 4 ? 16 : level == 5 ? 32 : 64; 4562449Speter options->depth = 0; 4662449Speter } 4762449Speter 4862449Speter if (flags & LZMA_PRESET_EXTREME) { 4962449Speter options->mode = LZMA_MODE_NORMAL; 5062449Speter options->mf = LZMA_MF_BT4; 5162449Speter if (level == 3 || level == 5) { 5262449Speter options->nice_len = 192; 5362449Speter options->depth = 0; 5462449Speter } else { 5562449Speter options->nice_len = 273; 5662449Speter options->depth = 512; 5762449Speter } 5862449Speter } 5962449Speter 6062449Speter return false; 6162449Speter} 6262449Speter