Skip to content

Commit f35fdb6

Browse files
Use disunityff encode parameters
1 parent 87b664d commit f35fdb6

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ clap = { version = "4.5.20", features = ["derive"], optional = true }
1717
indicatif = { version = "0.17.9", features = ["tokio", "improved_unicode"], optional = true }
1818
futures-util = "0.3.31"
1919
countio = { version = "0.2.19", optional = true }
20+
num_cpus = "1.16.0"
2021

2122
[lib]
2223
name = "ffbuildtool"

src/bundle.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,39 @@ use std::{
66
};
77

88
use countio::Counter;
9-
use liblzma::{read::XzDecoder, write::XzEncoder};
9+
use liblzma::{
10+
read::XzDecoder,
11+
stream::{Check, Filters, LzmaOptions, MtStreamBuilder},
12+
write::XzEncoder,
13+
};
1014
use log::*;
1115

1216
use crate::{util, Error, FileInfo};
1317

1418
// level index, file index, total files, file name
1519
pub type CompressionCallback = fn(usize, usize, usize, String);
1620

21+
fn get_lzma_encoder<W: Write>(writer: &mut W, level: u32) -> Result<XzEncoder<&mut W>, Error> {
22+
let mut options = LzmaOptions::new_preset(level)?;
23+
options
24+
.literal_context_bits(3)
25+
.literal_position_bits(0)
26+
.position_bits(2)
27+
.dict_size(1 << 19);
28+
29+
let mut filters = Filters::new();
30+
filters.lzma2(&options);
31+
32+
let stream = MtStreamBuilder::new()
33+
.preset(level)
34+
.check(Check::Crc64)
35+
.threads(num_cpus::get() as u32)
36+
.filters(filters)
37+
.encoder()
38+
.unwrap();
39+
Ok(XzEncoder::new_stream(writer, stream))
40+
}
41+
1742
fn read_u32<T: Read>(reader: &mut T) -> Result<u32, Error> {
1843
let mut buf = [0; 4];
1944
reader.read_exact(&mut buf)?;
@@ -351,7 +376,7 @@ impl Level {
351376
level_idx: usize,
352377
callback: Option<CompressionCallback>,
353378
) -> Result<usize, Error> {
354-
let mut writer = Counter::new(XzEncoder::new_parallel(writer, compression));
379+
let mut writer = Counter::new(get_lzma_encoder(writer, compression)?);
355380
let header = self.gen_header();
356381
header.write(&mut writer)?;
357382

0 commit comments

Comments
 (0)