static void MakeExeMethod(CCompressionMethodMode &mode, bool useFilters, bool addFilter, bool bcj2Filter) { if (!mode.Binds.IsEmpty() || !useFilters || mode.Methods.Size() > 2) return; if (mode.Methods.Size() == 2) { if (mode.Methods[0].Id == k_BCJ2) AddBcj2Methods(mode); return; } if (!addFilter) return; bcj2Filter = bcj2Filter; #ifdef USE_86_FILTER if (bcj2Filter) { CMethodFull m; GetMethodFull(k_BCJ2, 4, m); mode.Methods.Insert(0, m); AddBcj2Methods(mode); } else { CMethodFull m; GetMethodFull(k_BCJ, 1, m); mode.Methods.Insert(0, m); CBind bind; bind.OutCoder = 0; bind.InStream = 0; bind.InCoder = 1; bind.OutStream = 0; mode.Binds.Add(bind); } #endif }
static void AddBcj2Methods(CCompressionMethodMode &mode) { CMethodFull m; GetMethodFull(k_LZMA, 1, m); m.AddProp32(NCoderPropID::kDictionarySize, 1 << 20); m.AddProp32(NCoderPropID::kNumFastBytes, 128); m.AddProp32(NCoderPropID::kNumThreads, 1); m.AddProp32(NCoderPropID::kLitPosBits, 2); m.AddProp32(NCoderPropID::kLitContextBits, 0); // m.AddPropString(NCoderPropID::kMatchFinder, L"BT2"); mode.Methods.Add(m); mode.Methods.Add(m); CBind bind; bind.OutCoder = 0; bind.InStream = 0; bind.InCoder = 1; bind.OutStream = 0; mode.Binds.Add(bind); bind.InCoder = 2; bind.OutStream = 1; mode.Binds.Add(bind); bind.InCoder = 3; bind.OutStream = 2; mode.Binds.Add(bind); }
static bool MakeExeMethod(const CCompressionMethodMode &method, bool bcj2Filter, CCompressionMethodMode &exeMethod) { exeMethod = method; if (bcj2Filter) { CMethodFull methodFull; if (!GetMethodFull(k_BCJ2, 4, methodFull)) return false; exeMethod.Methods.Insert(0, methodFull); if (!GetMethodFull(k_LZMA, 1, methodFull)) return false; { CProp property; property.Id = NCoderPropID::kAlgorithm; property.Value = kAlgorithmForBCJ2_LZMA; methodFull.Properties.Add(property); } { CProp property; property.Id = NCoderPropID::kMatchFinder; property.Value = kMatchFinderForBCJ2_LZMA; methodFull.Properties.Add(property); } { CProp property; property.Id = NCoderPropID::kDictionarySize; property.Value = kDictionaryForBCJ2_LZMA; methodFull.Properties.Add(property); } { CProp property; property.Id = NCoderPropID::kNumFastBytes; property.Value = kNumFastBytesForBCJ2_LZMA; methodFull.Properties.Add(property); } exeMethod.Methods.Add(methodFull); exeMethod.Methods.Add(methodFull); CBind bind; bind.OutCoder = 0; bind.InStream = 0; bind.InCoder = 1; bind.OutStream = 0; exeMethod.Binds.Add(bind); bind.InCoder = 2; bind.OutStream = 1; exeMethod.Binds.Add(bind); bind.InCoder = 3; bind.OutStream = 2; exeMethod.Binds.Add(bind); } else { CMethodFull methodFull; if (!GetMethodFull(k_BCJ, 1, methodFull)) return false; exeMethod.Methods.Insert(0, methodFull); CBind bind; bind.OutCoder = 0; bind.InStream = 0; bind.InCoder = 1; bind.OutStream = 0; exeMethod.Binds.Add(bind); } return true; }