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/remux.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'remuxer/src/remux.rs') 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 */ 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, source_track_index: usize, codec_private: Option>, 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::( - &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 { -- cgit v1.2.3-70-g09d2