From 80e545d06c4a0f0841d4b40e3aff479ef8d864f9 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 22 Dec 2023 15:16:58 +0100 Subject: rework import system pt. 5: local import and playback working again --- remuxer/src/snippet.rs | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'remuxer/src/snippet.rs') diff --git a/remuxer/src/snippet.rs b/remuxer/src/snippet.rs index cd45f8b..0d5c715 100644 --- a/remuxer/src/snippet.rs +++ b/remuxer/src/snippet.rs @@ -24,16 +24,14 @@ const SNIPPET_LENGTH: f64 = 2.; pub fn snippet_index( path_base: &Path, item: &NodePublic, - track_sources: &Vec, - track: usize, + local_track: &LocalTrack, ) -> Result>> { let media_info = item.media.as_ref().unwrap(); - let private = &track_sources[track]; - let source_path = path_base.join(&private.path); + let source_path = path_base.join(&local_track.path); let index = get_seek_index(&source_path)?; let index = index - .get(&(private.track as u64)) - .ok_or(anyhow!("track missing"))?; + .get(&(local_track.track as u64)) + .ok_or(anyhow!("seek index 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}"); @@ -57,12 +55,12 @@ pub fn write_snippet_into( writer: impl Write, path_base: &Path, item: &NodePublic, - track_sources: Vec, + local_track: &LocalTrack, track: usize, webm: bool, n: usize, ) -> anyhow::Result<()> { - info!("writing snippet {n} of {:?} (track #{track})", item.title); + info!("writing snippet {n} of {:?} (track {track})", item.title); let mut output = EbmlWriter::new(BufWriter::new(writer), 0); let media_info = item.media.as_ref().unwrap(); @@ -71,19 +69,18 @@ pub fn write_snippet_into( .get(track) .ok_or(anyhow!("track not available"))? .to_owned(); - let private = &track_sources[track]; - let source_path = path_base.join(&private.path); + let source_path = path_base.join(&local_track.path); let mapped = 1; info!( "\t- {track} {source_path:?} ({} => {mapped})", - private.track + local_track.track ); info!("\t {}", info); let file = File::open(&source_path).context("opening source file")?; let index = get_seek_index(&source_path)?; let index = index - .get(&(private.track as u64)) - .ok_or(anyhow!("track missing"))? + .get(&(local_track.track as u64)) + .ok_or(anyhow!("track missing 2"))? .to_owned(); debug!("\t seek index: {} blocks loaded", index.blocks.len()); let mut reader = EbmlReader::new(file); @@ -118,10 +115,10 @@ pub fn write_snippet_into( ))?; output.write_tag(&MatroskaTag::Tags(Master::Collected(vec![])))?; output.write_tag(&MatroskaTag::Tracks(Master::Collected(vec![ - ebml_track_entry(mapped, &info, private.codec_private.clone()), + ebml_track_entry(mapped, &info, local_track.codec_private.clone()), ])))?; - let mut reader = SegmentExtractIter::new(&mut reader, private.track as u64); + let mut reader = SegmentExtractIter::new(&mut reader, local_track.track as u64); { // TODO this one caused snippets to get dropped MSE for no reason -- cgit v1.2.3-70-g09d2