diff options
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()), |