aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--remuxer/src/import/mod.rs14
-rw-r--r--tools/src/bin/import.rs8
2 files changed, 13 insertions, 9 deletions
diff --git a/remuxer/src/import/mod.rs b/remuxer/src/import/mod.rs
index 78c752e..7b0b371 100644
--- a/remuxer/src/import/mod.rs
+++ b/remuxer/src/import/mod.rs
@@ -17,10 +17,16 @@ use std::{collections::BTreeMap, path::PathBuf};
pub fn import_read(
path: &PathBuf,
input: &mut EbmlReader,
-) -> Result<(Vec<SourceTrack>, Vec<LocalTrack>, BTreeMap<u64, SeekIndex>)> {
+) -> Result<(
+ Vec<SourceTrack>,
+ Vec<LocalTrack>,
+ BTreeMap<u64, SeekIndex>,
+ f64,
+)> {
let mut iteminfo = Vec::new();
let mut private = Vec::new();
let mut seek_index = BTreeMap::new();
+ let mut dur = None;
while let Some(item) = input.next() {
let item = match item {
Ok(item) => item,
@@ -49,20 +55,20 @@ pub fn import_read(
MatroskaTag::Segment(_) => {
info!("segment start");
let mut children = Unflatten::new_with_end(input, item);
- import_read_segment(
+ dur = dur.or(import_read_segment(
path,
&mut children,
&mut iteminfo,
&mut private,
&mut seek_index,
- )?;
+ )?);
info!("segment end");
}
_ => debug!("(r) tag ignored: {item:?}"),
}
}
- Ok((iteminfo, private, seek_index))
+ Ok((iteminfo, private, seek_index, dur.unwrap_or(0.)))
}
fn import_read_segment(
diff --git a/tools/src/bin/import.rs b/tools/src/bin/import.rs
index 78c8646..a27b247 100644
--- a/tools/src/bin/import.rs
+++ b/tools/src/bin/import.rs
@@ -138,7 +138,7 @@ fn main() -> anyhow::Result<()> {
std::fs::copy(&input, &source_path)?;
let input = File::open(&source_path).unwrap();
let mut input = EbmlReader::new(input);
- let (tracks, local_tracks, seek_index) =
+ let (tracks, local_tracks, seek_index, duration) =
import_read(&source_path.to_path_buf(), &mut input)?;
for (tn, index) in seek_index {
@@ -151,10 +151,7 @@ fn main() -> anyhow::Result<()> {
}
kind = NodeKind::Movie;
- media = Some(MediaInfo {
- tracks,
- duration: 0.,
- });
+ media = Some(MediaInfo { duration, tracks });
source = Some(jellycommon::MediaSource::Local {
tracks: local_tracks,
});
@@ -173,6 +170,7 @@ fn main() -> anyhow::Result<()> {
},
public: NodePublic {
parent: None,
+ federated: None,
description: Some(details.overview),
tagline: details.tagline,
title: details.title.clone().or(details.name.clone()).unwrap(),