From b6c12de6851ca48f54a1ada14e987e519d4f6896 Mon Sep 17 00:00:00 2001 From: Kieran Date: Wed, 11 Jun 2025 23:58:44 +0100 Subject: [PATCH] fix: decoder bug --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/processing/mod.rs | 7 ++++++- src/routes/mod.rs | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03e2fd9..ff81b83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "ffmpeg-rs-raw" version = "0.1.0" -source = "git+https://git.v0l.io/Kieran/ffmpeg-rs-raw.git?rev=928ab9664ff47c1b0bd8313ebc73d13b1ab43fc5#928ab9664ff47c1b0bd8313ebc73d13b1ab43fc5" +source = "git+https://git.v0l.io/Kieran/ffmpeg-rs-raw.git?rev=aa1ce3edcad0fcd286d39b3e0c2fdc610c3988e7#aa1ce3edcad0fcd286d39b3e0c2fdc610c3988e7" dependencies = [ "anyhow", "ffmpeg-sys-the-third", diff --git a/Cargo.toml b/Cargo.toml index 1644ddf..e77979f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,7 +44,7 @@ http-range-header = { version = "0.4.2" } base58 = "0.2.0" libc = { version = "0.2.153", optional = true } -ffmpeg-rs-raw = { git = "https://git.v0l.io/Kieran/ffmpeg-rs-raw.git", rev = "928ab9664ff47c1b0bd8313ebc73d13b1ab43fc5", optional = true } +ffmpeg-rs-raw = { git = "https://git.v0l.io/Kieran/ffmpeg-rs-raw.git", rev = "aa1ce3edcad0fcd286d39b3e0c2fdc610c3988e7", optional = true } candle-core = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1", optional = true } candle-nn = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1", optional = true } candle-transformers = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1", optional = true } diff --git a/src/processing/mod.rs b/src/processing/mod.rs index 52ac279..0c9541f 100644 --- a/src/processing/mod.rs +++ b/src/processing/mod.rs @@ -105,7 +105,12 @@ impl WebpProcessor { let mut decoder = Decoder::new(); decoder.setup_decoder(image_stream, None)?; - while let Ok((mut pkt, _stream)) = input.get_packet() { + while let Ok((mut pkt, _)) = input.get_packet() { + // skip packets not in the image stream + if (*pkt).stream_index != image_stream.index as i32 { + av_packet_free(&mut pkt); + continue; + } let mut frame_save: *mut AVFrame = ptr::null_mut(); for (mut frame, _stream) in decoder.decode_pkt(pkt)? { if frame_save.is_null() { diff --git a/src/routes/mod.rs b/src/routes/mod.rs index e474ec7..1a11f14 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -423,7 +423,8 @@ pub async fn get_blob_thumb( if !thumb_file.exists() { let mut p = WebpProcessor::new(); - if p.thumbnail(&file_path, &thumb_file).is_err() { + if let Err(e) = p.thumbnail(&file_path, &thumb_file) { + warn!("Failed to generate thumbnail: {}", e); return Err(Status::InternalServerError); } };