diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-02 00:48:07 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-02 00:48:07 +0200 |
commit | fdaa18968c5b3d923c93527efaeeb81cbd9b4d88 (patch) | |
tree | 4c449ed0ac8645aedae49ac45dfb710f0936bb1b /remuxer/src/remux.rs | |
parent | 68afc87797e25dca30ecb8d4f2c06edcc8c71b22 (diff) | |
download | jellything-fdaa18968c5b3d923c93527efaeeb81cbd9b4d88.tar jellything-fdaa18968c5b3d923c93527efaeeb81cbd9b4d88.tar.bz2 jellything-fdaa18968c5b3d923c93527efaeeb81cbd9b4d88.tar.zst |
in-memory cached seek index
Diffstat (limited to 'remuxer/src/remux.rs')
-rw-r--r-- | remuxer/src/remux.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/remuxer/src/remux.rs b/remuxer/src/remux.rs index d7a30e5..31e4a3a 100644 --- a/remuxer/src/remux.rs +++ b/remuxer/src/remux.rs @@ -4,7 +4,8 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ use crate::{ - ebml_header, ebml_track_entry, segment_extractor::SegmentExtractIter, trim_writer::TrimWriter, + ebml_header, ebml_track_entry, seek_index::get_seek_index, + segment_extractor::SegmentExtractIter, trim_writer::TrimWriter, }; use anyhow::{anyhow, Context}; use jellycommon::{ @@ -23,6 +24,7 @@ use std::{ io::{Seek, SeekFrom, Write}, ops::Range, path::PathBuf, + sync::Arc, time::Instant, }; @@ -43,7 +45,7 @@ pub fn remux_stream_into( info: SourceTrack, reader: EbmlReader, mapped: u64, - index: SeekIndex, + index: Arc<SeekIndex>, source_track_index: usize, codec_private: Option<Vec<u8>>, layouting_progress_index: usize, @@ -69,12 +71,11 @@ pub fn remux_stream_into( info!("\t- {sel} {source_path:?} ({} => {mapped})", private.track); info!("\t {}", info); let file = File::open(&source_path).context("opening source file")?; - 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::<SeekIndex, _, _>( - &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"))? + .to_owned(); debug!("\t seek index: {} blocks loaded", index.blocks.len()); let reader = EbmlReader::new(file); Ok(ReaderC { |