aboutsummaryrefslogtreecommitdiff
path: root/transcoder/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-09-26 07:52:10 +0200
committermetamuffin <metamuffin@disroot.org>2023-09-26 07:52:10 +0200
commit02c830dec5cc3824cf7cbd4c6bb61c2e7d14195f (patch)
tree38769e5cd4787ee557f6665eb68b7ea5ef62467f /transcoder/src
parent74be31a55c8a9fc533a445bc65c08154469d21c6 (diff)
parent7efece270151d8a22e3d5f209cf9707d989c4ac5 (diff)
downloadjellything-02c830dec5cc3824cf7cbd4c6bb61c2e7d14195f.tar
jellything-02c830dec5cc3824cf7cbd4c6bb61c2e7d14195f.tar.bz2
jellything-02c830dec5cc3824cf7cbd4c6bb61c2e7d14195f.tar.zst
Merge branch 'master' of codeberg.org:metamuffin/jellything
Diffstat (limited to 'transcoder/src')
-rw-r--r--transcoder/src/bin/reproduce_decode_error.rs11
-rw-r--r--transcoder/src/image.rs16
2 files changed, 22 insertions, 5 deletions
diff --git a/transcoder/src/bin/reproduce_decode_error.rs b/transcoder/src/bin/reproduce_decode_error.rs
new file mode 100644
index 0000000..84fa6fd
--- /dev/null
+++ b/transcoder/src/bin/reproduce_decode_error.rs
@@ -0,0 +1,11 @@
+use jellytranscoder::image::transcode;
+
+fn main() {
+ transcode(
+ jellycommon::AssetLocation::Cache(std::env::args().nth(2).unwrap().into()),
+ 1.0,
+ 1,
+ 1,
+ )
+ .unwrap();
+}
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()