aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-07-31 21:38:24 +0200
committermetamuffin <metamuffin@disroot.org>2023-07-31 21:38:24 +0200
commit705fba50de94a7efdb9fe635ee683d6a615348f8 (patch)
tree6eee7ac5b3bae20d877c0012c805d593aa180329
parent7fc42cd9909f1269d800c1105ec3598071a6221f (diff)
downloadjellything-705fba50de94a7efdb9fe635ee683d6a615348f8.tar
jellything-705fba50de94a7efdb9fe635ee683d6a615348f8.tar.bz2
jellything-705fba50de94a7efdb9fe635ee683d6a615348f8.tar.zst
working as good as before (maybe)
-rw-r--r--Cargo.lock1
-rw-r--r--remuxer/src/import/mod.rs18
-rw-r--r--remuxer/src/lib.rs6
-rw-r--r--tools/Cargo.toml4
-rw-r--r--tools/src/bin/import.rs12
5 files changed, 24 insertions, 17 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 9abe5f1..6e0a999 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1218,6 +1218,7 @@ name = "jellytools"
version = "0.1.0"
dependencies = [
"anyhow",
+ "bincode 2.0.0-rc.3",
"clap",
"env_logger",
"jellycommon",
diff --git a/remuxer/src/import/mod.rs b/remuxer/src/import/mod.rs
index 8df9f42..78c752e 100644
--- a/remuxer/src/import/mod.rs
+++ b/remuxer/src/import/mod.rs
@@ -12,15 +12,15 @@ use jellymatroska::{
unflatten::{IterWithPos, Unflat, Unflatten},
};
use log::{debug, error, info, trace, warn};
-use std::{collections::HashMap, path::PathBuf};
+use std::{collections::BTreeMap, path::PathBuf};
pub fn import_read(
path: &PathBuf,
input: &mut EbmlReader,
-) -> Result<(Vec<SourceTrack>, Vec<LocalTrack>, Vec<SeekIndex>)> {
+) -> Result<(Vec<SourceTrack>, Vec<LocalTrack>, BTreeMap<u64, SeekIndex>)> {
let mut iteminfo = Vec::new();
let mut private = Vec::new();
- let mut seek_index = Vec::new();
+ let mut seek_index = BTreeMap::new();
while let Some(item) = input.next() {
let item = match item {
Ok(item) => item,
@@ -70,10 +70,9 @@ fn import_read_segment(
segment: &mut Unflatten,
iteminfo: &mut Vec<SourceTrack>,
private: &mut Vec<LocalTrack>,
- seek_index_out: &mut Vec<SeekIndex>,
+ seek_index: &mut BTreeMap<u64, SeekIndex>,
) -> Result<Option<f64>> {
let (mut timestamp_scale, mut duration) = (None, None);
- let mut seek_index = HashMap::new();
while let Some(Ok(Unflat { children, item, .. })) = segment.n() {
match item {
@@ -257,15 +256,6 @@ fn import_read_segment(
};
}
- for i in 0..iteminfo.len() {
- seek_index_out.push(
- seek_index
- .get(&(i as u64))
- .map(|e| e.to_owned())
- .unwrap_or_else(|| SeekIndex { blocks: vec![] }),
- )
- }
-
Ok(if let Some(duration) = duration {
Some((duration * timestamp_scale.unwrap_or(1_000_000) as f64) / 1_000_000_000_f64)
} else {
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs
index 4a73edf..382f850 100644
--- a/remuxer/src/lib.rs
+++ b/remuxer/src/lib.rs
@@ -9,7 +9,7 @@ pub mod trim_writer;
use crate::{segment_extractor::SegmentExtractIter, trim_writer::TrimWriter};
use anyhow::{anyhow, Context};
-use jellycommon::{BlockIndex, NodePublic, LocalTrack, SeekIndex, SourceTrack, SourceTrackKind};
+use jellycommon::{BlockIndex, LocalTrack, NodePublic, SeekIndex, SourceTrack, SourceTrackKind};
use jellymatroska::{
block::Block,
read::EbmlReader,
@@ -78,6 +78,10 @@ impl RemuxerContext {
info!("\t- {sel} {source_path:?} ({} => {mapped})", private.track);
info!("\t {}", info);
let file = File::open(&source_path).context("opening source file")?;
+ eprintln!(
+ "{:?}",
+ source_path.with_extension(format!("si.{}", private.track))
+ );
let mut index =
File::open(source_path.with_extension(format!("si.{}", private.track)))
.context("opening seek index file")?;
diff --git a/tools/Cargo.toml b/tools/Cargo.toml
index 9eb488b..006a7a1 100644
--- a/tools/Cargo.toml
+++ b/tools/Cargo.toml
@@ -12,9 +12,11 @@ log = "0.4.18"
env_logger = "0.10.0"
anyhow = "1.0.71"
clap = { version = "4.3.0", features = ["derive"] }
+reqwest = { version = "0.11.18", features = ["blocking", "json"] }
+
serde = { version = "1.0.164", features = ["derive"] }
serde_json = "1.0.96"
-reqwest = { version = "0.11.18", features = ["blocking", "json"] }
+bincode = { version = "2.0.0-rc.3", features = ["serde"] }
[[bin]]
path = "src/bin/import.rs"
diff --git a/tools/src/bin/import.rs b/tools/src/bin/import.rs
index c048eb5..c886adf 100644
--- a/tools/src/bin/import.rs
+++ b/tools/src/bin/import.rs
@@ -136,8 +136,18 @@ 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) =
import_read(&source_path.to_path_buf(), &mut input)?;
+
+ for (tn, index) in seek_index {
+ info!("writing index {tn} with {} blocks", index.blocks.len());
+ bincode::encode_into_std_write(
+ index,
+ &mut File::create(source_path.with_extension(&format!("si.{tn}")))?,
+ bincode::config::standard(),
+ )?;
+ }
+
kind = NodeKind::Movie;
media = Some(MediaInfo {
tracks,