From 8d3faa3d3d765441a0753748c92079db08fb8374 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 4 Oct 2023 10:18:52 +0200 Subject: limit number of local transcoding tasks --- transcoder/src/image.rs | 6 +++--- transcoder/src/lib.rs | 4 ++++ transcoder/src/snippet.rs | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'transcoder/src') diff --git a/transcoder/src/image.rs b/transcoder/src/image.rs index 06a2f80..3cd9986 100644 --- a/transcoder/src/image.rs +++ b/transcoder/src/image.rs @@ -1,3 +1,4 @@ +use crate::LOCAL_TRANSCODING_TASKS; use anyhow::Context; use image::{imageops::FilterType, ImageFormat}; use jellybase::{cache::async_cache_file, AssetLocationExt}; @@ -22,11 +23,10 @@ pub async fn transcode( &format!("{width} {quality} {speed}"), ], move |mut output| async move { + let _permit = LOCAL_TRANSCODING_TASKS.acquire().await?; + info!("encoding {asset:?} (speed={speed}, quality={quality}, width={width})"); let encoded = tokio::task::spawn_blocking(move || { let original_path = asset.path(); - info!( - "encoding {original_path:?} (speed={speed}, quality={quality}, width={width})" - ); // 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); diff --git a/transcoder/src/lib.rs b/transcoder/src/lib.rs index 240d37a..673946b 100644 --- a/transcoder/src/lib.rs +++ b/transcoder/src/lib.rs @@ -5,5 +5,9 @@ */ #![feature(async_closure)] #![feature(exit_status_error)] + +use tokio::sync::Semaphore; pub mod image; pub mod snippet; + +static LOCAL_TRANSCODING_TASKS: Semaphore = Semaphore::const_new(2); diff --git a/transcoder/src/snippet.rs b/transcoder/src/snippet.rs index 42847a0..e9569da 100644 --- a/transcoder/src/snippet.rs +++ b/transcoder/src/snippet.rs @@ -4,6 +4,7 @@ Copyright (C) 2023 metamuffin */ +use crate::LOCAL_TRANSCODING_TASKS; use jellybase::cache::async_cache_file; use jellycommon::{jhls::EncodingProfile, AssetLocation}; use log::info; @@ -21,6 +22,7 @@ pub async fn transcode( Ok(async_cache_file( &["snip-tc", key, &format!("{enc:?}")], move |mut output| async move { + let _permit = LOCAL_TRANSCODING_TASKS.acquire().await?; info!("transcoding snippet {key}"); let args = match enc { EncodingProfile::Video { -- cgit v1.2.3-70-g09d2