aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/import/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-21 18:57:21 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-21 18:57:21 +0100
commitd80bdf60b1b68fee752b7dfca4b89231015987ff (patch)
treedadfe609f7e63ecb766acd8bbe8d44df8d362def /remuxer/src/import/mod.rs
parentbf578cf3b131bc430152f952a37a99d449df8d83 (diff)
downloadjellything-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.rs25
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()),