Wire progressive JPEG, AVIF speed, and custom per-format quality to encoder

- Add EncoderOptions struct with progressive_jpeg and avif_speed fields
- Pass encoder options through ProcessingJob to PipelineExecutor
- mozjpeg set_progressive_mode() called when progressive JPEG enabled
- AVIF encoder speed now configurable (was hardcoded to 6)
- run_processing uses CompressConfig::Custom when user overrides preset defaults
- Executor properly handles AVIF quality and PNG level in Custom mode
This commit is contained in:
2026-03-06 15:07:54 +02:00
parent 52b7a7fed2
commit fdaedd8d1a
5 changed files with 66 additions and 9 deletions

View File

@@ -1265,9 +1265,31 @@ fn run_processing(_window: &adw::ApplicationWindow, ui: &WizardUi) {
}
if cfg.compress_enabled {
job.compress = Some(pixstrip_core::operations::CompressConfig::Preset(cfg.quality_preset));
// Check if user has customized per-format quality values beyond the preset defaults
let preset_jpeg = cfg.quality_preset.jpeg_quality();
let preset_webp = cfg.quality_preset.webp_quality();
let has_custom = cfg.jpeg_quality != preset_jpeg
|| cfg.webp_quality != preset_webp as u8
|| cfg.avif_quality != preset_webp as u8
|| cfg.avif_speed != 6
|| cfg.webp_effort != 4;
if has_custom {
job.compress = Some(pixstrip_core::operations::CompressConfig::Custom {
jpeg_quality: Some(cfg.jpeg_quality),
png_level: Some(cfg.png_level),
webp_quality: Some(cfg.webp_quality as f32),
avif_quality: Some(cfg.avif_quality as f32),
});
} else {
job.compress = Some(pixstrip_core::operations::CompressConfig::Preset(cfg.quality_preset));
}
}
// Pass encoder options to the job
job.progressive_jpeg = cfg.progressive_jpeg;
job.avif_speed = cfg.avif_speed;
if cfg.metadata_enabled {
job.metadata = Some(match cfg.metadata_mode {
MetadataMode::StripAll => pixstrip_core::operations::MetadataConfig::StripAll,