aboutsummaryrefslogtreecommitdiff
path: root/transcoder/src/image.rs
diff options
context:
space:
mode:
Diffstat (limited to 'transcoder/src/image.rs')
-rw-r--r--transcoder/src/image.rs16
1 files changed, 11 insertions, 5 deletions
diff --git a/transcoder/src/image.rs b/transcoder/src/image.rs
index c28ef2b..6da1be7 100644
--- a/transcoder/src/image.rs
+++ b/transcoder/src/image.rs
@@ -1,6 +1,8 @@
+use anyhow::Context;
+use image::{imageops::FilterType, ImageFormat};
use jellybase::{cache_file, AssetLocationExt};
use jellycommon::AssetLocation;
-use log::info;
+use log::{debug, info};
use rgb::FromSlice;
use std::{
fs::File,
@@ -22,14 +24,18 @@ pub fn transcode(
.path();
if !path.exists() {
info!("encoding {path:?} (speed={speed}, quality={quality}, width={width})");
- let reader = image::io::Reader::new(BufReader::new(File::open(original_path)?))
- .with_guessed_format()?;
- let original = reader.decode()?.to_rgba8();
+ // TODO shouldn't be neccessary with guessed format.
+ let file = BufReader::new(File::open(&original_path).context("opening source")?);
+ let mut reader = image::io::Reader::new(file);
+ reader.set_format(ImageFormat::Avif);
+ let reader = reader.with_guessed_format().context("guessing format")?;
+ debug!("guessed format (or fallback): {:?}", reader.format());
+ let original = reader.decode().context("decoding image")?.to_rgba8();
let image = image::imageops::resize(
&original,
width as u32,
width as u32 * original.height() / original.width(),
- image::imageops::FilterType::Lanczos3,
+ FilterType::Lanczos3,
);
let pixels = image.to_vec();
let encoded = ravif::Encoder::new()