diff options
Diffstat (limited to 'stream')
| -rw-r--r-- | stream/src/cues.rs | 45 | ||||
| -rw-r--r-- | stream/src/fragment.rs | 13 | ||||
| -rw-r--r-- | stream/src/lib.rs | 2 | ||||
| -rw-r--r-- | stream/src/metadata.rs | 4 |
4 files changed, 33 insertions, 31 deletions
diff --git a/stream/src/cues.rs b/stream/src/cues.rs index 646db5b..9291e18 100644 --- a/stream/src/cues.rs +++ b/stream/src/cues.rs @@ -5,7 +5,7 @@ */ use anyhow::{anyhow, Result}; -use jellycache::cache_memory; +use jellycache::{cache_memory, CacheKey}; use jellyremuxer::demuxers::create_demuxer_autodetect; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File, path::Path, sync::Arc}; @@ -29,29 +29,32 @@ pub struct StatsAndCues { } pub fn generate_cues(path: &Path) -> Result<Arc<StatsAndCues>> { - cache_memory("generated-cues", path, move || { - let media = File::open(path)?; - let mut media = - create_demuxer_autodetect(Box::new(media))?.ok_or(anyhow!("media format unknown"))?; + cache_memory( + CacheKey::new_json(("media-generated-cues", path)), + move || { + let media = File::open(path)?; + let mut media = create_demuxer_autodetect(Box::new(media))? + .ok_or(anyhow!("media format unknown"))?; - let info = media.info()?; - media.seek_cluster(None)?; + let info = media.info()?; + media.seek_cluster(None)?; - let mut stats = BTreeMap::<u64, TrackStat>::new(); - let mut cues = Vec::new(); + let mut stats = BTreeMap::<u64, TrackStat>::new(); + let mut cues = Vec::new(); - while let Some((position, cluster)) = media.read_cluster()? { - cues.push(GeneratedCue { - position, - time: cluster.timestamp * info.timestamp_scale, - }); - for block in cluster.simple_blocks { - let e = stats.entry(block.track).or_default(); - e.num_blocks += 1; - e.total_size += block.data.len() as u64; + while let Some((position, cluster)) = media.read_cluster()? { + cues.push(GeneratedCue { + position, + time: cluster.timestamp * info.timestamp_scale, + }); + for block in cluster.simple_blocks { + let e = stats.entry(block.track).or_default(); + e.num_blocks += 1; + e.total_size += block.data.len() as u64; + } } - } - Ok(StatsAndCues { stats, cues }) - }) + Ok(StatsAndCues { stats, cues }) + }, + ) } diff --git a/stream/src/fragment.rs b/stream/src/fragment.rs index 97ca2db..35a5cd2 100644 --- a/stream/src/fragment.rs +++ b/stream/src/fragment.rs @@ -94,13 +94,12 @@ pub fn fragment_stream( cluster.simple_blocks.retain(|b| b.track == track_num); cluster.block_groups.retain(|b| b.block.track == track_num); - let next_kf = next_cluster - .and_then(|x| { - x.simple_blocks - .iter() - .find(|b| b.track == track_num) - .cloned() - }); + let next_kf = next_cluster.and_then(|x| { + x.simple_blocks + .iter() + .find(|b| b.track == track_num) + .cloned() + }); let jr_container = match container { StreamContainer::WebM => ContainerFormat::Webm, diff --git a/stream/src/lib.rs b/stream/src/lib.rs index 724a593..6c6db8f 100644 --- a/stream/src/lib.rs +++ b/stream/src/lib.rs @@ -113,7 +113,7 @@ fn original_stream( info: Arc<SMediaInfo>, track: usize, range: Range<u64>, -) -> Result<Box<dyn Read+ Send + Sync>> { +) -> Result<Box<dyn Read + Send + Sync>> { let (iinfo, _info) = stream_info(info)?; let (file_index, _) = *iinfo .track_to_file diff --git a/stream/src/metadata.rs b/stream/src/metadata.rs index 9bfa3aa..fe553e2 100644 --- a/stream/src/metadata.rs +++ b/stream/src/metadata.rs @@ -5,12 +5,12 @@ */ use anyhow::{anyhow, Result}; -use jellycache::cache_memory; +use jellycache::{cache_memory, CacheKey}; use jellyremuxer::{demuxers::create_demuxer_autodetect, matroska::Segment}; use std::{fs::File, path::Path, sync::Arc}; pub fn read_metadata(path: &Path) -> Result<Arc<Segment>> { - cache_memory("mkmeta-v4", path, move || { + cache_memory(CacheKey::new_json(("media-metadata", path)), move || { let media = File::open(path)?; let mut media = create_demuxer_autodetect(Box::new(media))?.ok_or(anyhow!("media format unknown"))?; |