diff options
author | metamuffin <metamuffin@disroot.org> | 2023-12-22 15:16:58 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-12-22 15:17:23 +0100 |
commit | 80e545d06c4a0f0841d4b40e3aff479ef8d864f9 (patch) | |
tree | 9a555ea9404f45fb7ebf617ebdfb1f8248332e05 /remuxer/src/snippet.rs | |
parent | c644f3b2f7b93cba2c903fa2a5e30ea80d86ef13 (diff) | |
download | jellything-80e545d06c4a0f0841d4b40e3aff479ef8d864f9.tar jellything-80e545d06c4a0f0841d4b40e3aff479ef8d864f9.tar.bz2 jellything-80e545d06c4a0f0841d4b40e3aff479ef8d864f9.tar.zst |
rework import system pt. 5: local import and playback working again
Diffstat (limited to 'remuxer/src/snippet.rs')
-rw-r--r-- | remuxer/src/snippet.rs | 27 |
1 files changed, 12 insertions, 15 deletions
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<LocalTrack>, - track: usize, + local_track: &LocalTrack, ) -> Result<Vec<Range<f64>>> { 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<LocalTrack>, + 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 |