aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/snippet.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/snippet.rs')
-rw-r--r--remuxer/src/snippet.rs27
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