fix(media-proxy): serve originals and speed up slow transforms (#3393)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-11 14:41:01 +02:00
1 parent 44bc29b101
commit aa3b058ce6
29 files changed
+632 -83

No files matched your search

@@ -4,12 +4,13 @@ use super::super::image_probe::load_image;
use super::super::native_runtime::ensure_vips_init;
use super::super::transform::source_supports_pages;
use super::super::{ImageOptions, MediaError, NativeCost, image_transform_cost};
use super::fixtures::{animated_mode, metadata_value, transform_image};
use super::fixtures::{animated_mode, metadata_value, png_zlib_level, transform_image};
use crate::{
mime, native,
output_format::OutputFormat,
test_fixtures::{
JXL_64_LOSSY_ALPHA, JXL_4100_LOSSY_ALPHA, png_dimensions, synthetic_bmp, synthetic_png,
JPEG_ROTATED_MISMATCHED_SCAN, JXL_64_LOSSY_ALPHA, JXL_4100_LOSSY_ALPHA, png_dimensions,
synthetic_bmp, synthetic_png,
},
};
@@ -118,7 +119,7 @@ fn refuses_jxl_above_the_decode_pixel_cap_before_decoding() {
},
)
.unwrap_err();
assert_eq!(MediaError::InvalidImageDimensions, err);
assert_eq!(MediaError::TooLargeToProcess, err);
}
}
@@ -147,7 +148,7 @@ fn refuses_full_size_svg_raster_above_the_static_output_cap() {
},
)
.unwrap_err();
assert_eq!(MediaError::InvalidImageDimensions, err);
assert_eq!(MediaError::TooLargeToProcess, err);
let err = transform_image(
svg,
&ImageOptions {
@@ -157,7 +158,7 @@ fn refuses_full_size_svg_raster_above_the_static_output_cap() {
},
)
.unwrap_err();
assert_eq!(MediaError::InvalidImageDimensions, err);
assert_eq!(MediaError::TooLargeToProcess, err);
}
#[test]
@@ -213,3 +214,29 @@ fn transform_cost_charges_svg_at_its_output_size() {
};
assert!(cost < 1 << 20, "cost {cost}");
}
#[test]
fn transforms_a_rotated_jpeg_with_mismatched_scan_headers_at_full_size() {
let out = transform_image(
JPEG_ROTATED_MISMATCHED_SCAN,
&ImageOptions {
format: OutputFormat::PNG,
..Default::default()
},
)
.unwrap();
assert_eq!(Some((768, 1024)), png_dimensions(&out.bytes));
}
#[test]
fn png_outputs_above_a_megapixel_use_default_zlib_compression() {
let png_options = ImageOptions {
format: OutputFormat::PNG,
..Default::default()
};
let small = transform_image(&synthetic_bmp(160, 160), &png_options).unwrap();
assert_eq!(Some(3), png_zlib_level(&small.bytes));
let large = transform_image(&synthetic_bmp(1100, 1000), &png_options).unwrap();
assert_eq!(Some((1100, 1000)), png_dimensions(&large.bytes));
assert_eq!(Some(2), png_zlib_level(&large.bytes));
}