From fdaa18968c5b3d923c93527efaeeb81cbd9b4d88 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 2 Oct 2023 00:48:07 +0200 Subject: in-memory cached seek index --- remuxer/src/snippet.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'remuxer/src/snippet.rs') diff --git a/remuxer/src/snippet.rs b/remuxer/src/snippet.rs index bc7f190..cc5ec9d 100644 --- a/remuxer/src/snippet.rs +++ b/remuxer/src/snippet.rs @@ -5,7 +5,8 @@ */ use crate::{ - ebml_header, ebml_segment_info, ebml_track_entry, segment_extractor::SegmentExtractIter, + ebml_header, ebml_segment_info, ebml_track_entry, seek_index::get_seek_index, + segment_extractor::SegmentExtractIter, }; use anyhow::{anyhow, Context, Result}; use jellycommon::{seek_index::SeekIndex, LocalTrack, NodePublic}; @@ -24,10 +25,10 @@ pub fn snippet_index( let media_info = item.media.as_ref().unwrap(); let private = &track_sources[track]; let source_path = path_base.join(&private.path); - let mut index = File::open(source_path.with_extension(format!("si.{}", private.track))) - .context("opening seek index file")?; - let index = - bincode::decode_from_std_read::(&mut index, bincode::config::standard())?; + let index = get_seek_index(&source_path)?; + let index = index + .get(&(private.track as u64)) + .ok_or(anyhow!("track missing"))?; let average_kf_interval = media_info.duration / index.keyframes.len() as f64; let kf_per_snip = (SNIPPET_LENGTH / average_kf_interval).ceil() as usize; debug!("average keyframe interval: {average_kf_interval}"); -- cgit v1.2.3-70-g09d2