diff options
author | tpart <tpart120@proton.me> | 2023-12-22 15:24:21 +0100 |
---|---|---|
committer | tpart <tpart120@proton.me> | 2023-12-22 15:24:21 +0100 |
commit | 0bd6da689abe0193c6537c09509613f8897cc823 (patch) | |
tree | 1d0bd532480483d1b6ace838e37dfd9228a51cce /remuxer/src/snippet.rs | |
parent | 2d7b5e58e82dc597d4646143d41cf31ef89c0737 (diff) | |
parent | 80e545d06c4a0f0841d4b40e3aff479ef8d864f9 (diff) | |
download | jellything-0bd6da689abe0193c6537c09509613f8897cc823.tar jellything-0bd6da689abe0193c6537c09509613f8897cc823.tar.bz2 jellything-0bd6da689abe0193c6537c09509613f8897cc823.tar.zst |
Merge branch 'master' of codeberg.org:metamuffin/jellything
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 |