diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-21 18:57:21 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-21 18:57:21 +0100 |
commit | d80bdf60b1b68fee752b7dfca4b89231015987ff (patch) | |
tree | dadfe609f7e63ecb766acd8bbe8d44df8d362def /remuxer/src/import/mod.rs | |
parent | bf578cf3b131bc430152f952a37a99d449df8d83 (diff) | |
download | jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar.bz2 jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar.zst |
multiple source files
Diffstat (limited to 'remuxer/src/import/mod.rs')
-rw-r--r-- | remuxer/src/import/mod.rs | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/remuxer/src/import/mod.rs b/remuxer/src/import/mod.rs index 5147a05..505fbe4 100644 --- a/remuxer/src/import/mod.rs +++ b/remuxer/src/import/mod.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use anyhow::{anyhow, bail, Result}; use jellycommon::{ItemInfo, SourceTrack, SourceTrackKind}; use jellymatroska::{ @@ -8,7 +10,7 @@ use jellymatroska::{ }; use log::{debug, error, info, trace, warn}; -pub fn import_read(input: &mut EbmlReader, iteminfo: &mut ItemInfo) -> Result<()> { +pub fn import_read(path: &PathBuf, input: &mut EbmlReader, iteminfo: &mut ItemInfo) -> Result<()> { // TODO dont traverse the entire file, if the tracks are listed at the end while let Some(item) = input.next() { let item = match item { @@ -35,7 +37,7 @@ pub fn import_read(input: &mut EbmlReader, iteminfo: &mut ItemInfo) -> Result<() MatroskaTag::Segment(_) => { info!("segment start"); let mut children = Unflatten::new_with_end(input, item); - import_read_segment(&mut children, iteminfo)?; + import_read_segment(path, &mut children, iteminfo)?; info!("segment end"); } _ => debug!("(r) tag ignored: {item:?}"), @@ -45,7 +47,11 @@ pub fn import_read(input: &mut EbmlReader, iteminfo: &mut ItemInfo) -> Result<() Ok(()) } -fn import_read_segment(children: &mut Unflatten, iteminfo: &mut ItemInfo) -> Result<()> { +fn import_read_segment( + path: &PathBuf, + children: &mut Unflatten, + iteminfo: &mut ItemInfo, +) -> Result<()> { let (mut timestamp_scale, mut duration) = (None, None); while let Some(Ok(Unflat { children, item })) = children.next() { match item { @@ -99,7 +105,11 @@ fn import_read_segment(children: &mut Unflatten, iteminfo: &mut ItemInfo) -> Res match item { MatroskaTag::CuePoint(_) => { let mut children = children.unwrap(); - while let Some(Ok(Unflat { children: _, item: _ })) = children.next() { + while let Some(Ok(Unflat { + children: _, + item: _, + })) = children.next() + { // error!("{item:?}") } } @@ -170,7 +180,7 @@ fn import_read_segment(children: &mut Unflatten, iteminfo: &mut ItemInfo) -> Res _ => (), } } - // let itrack_index = iteminfo.tracks.len(); + let itrack_index = iteminfo.tracks.len(); let mtrack_index = index.unwrap(); let kind = match kind.ok_or(anyhow!("track type required"))? { 1 => SourceTrackKind::Video { @@ -186,10 +196,11 @@ fn import_read_segment(children: &mut Unflatten, iteminfo: &mut ItemInfo) -> Res 17 => SourceTrackKind::Subtitles, _ => bail!("invalid track type"), }; - // track_mapping.insert(mtrack_index, itrack_index); iteminfo.tracks.insert( - mtrack_index, + itrack_index, SourceTrack { + track_number: mtrack_index, + path: path.to_owned(), default_duration, codec_private, name: name.unwrap_or_else(|| "unnamed".to_string()), |