aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/snippet.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-12-22 15:16:58 +0100
committermetamuffin <metamuffin@disroot.org>2023-12-22 15:17:23 +0100
commit80e545d06c4a0f0841d4b40e3aff479ef8d864f9 (patch)
tree9a555ea9404f45fb7ebf617ebdfb1f8248332e05 /remuxer/src/snippet.rs
parentc644f3b2f7b93cba2c903fa2a5e30ea80d86ef13 (diff)
downloadjellything-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.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