aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/lib.rs')
-rw-r--r--remuxer/src/lib.rs26
1 files changed, 11 insertions, 15 deletions
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs
index 03d469e..0034cf8 100644
--- a/remuxer/src/lib.rs
+++ b/remuxer/src/lib.rs
@@ -7,16 +7,12 @@ pub mod import;
pub mod segment_extractor;
pub mod trim_writer;
-use crate::{
- segment_extractor::{AbsoluteBlock, SegmentExtractIter},
- trim_writer::TrimWriter,
-};
+use crate::{segment_extractor::SegmentExtractIter, trim_writer::TrimWriter};
use anyhow::{anyhow, Context};
use jellycommon::{BlockIndex, ItemInfo, SeekIndex, SourceTrack, SourceTrackKind};
use jellymatroska::{
block::Block,
read::EbmlReader,
- unflatten::Unflatten,
write::{vint_length, EbmlWriter},
Master, MatroskaTag,
};
@@ -188,10 +184,11 @@ impl RemuxerContext {
break;
}
p += 1; // simpleblock tag
- p += vint_length(1 + 2 + 1 + best_block.size as u64); // simpleblock size vint
- p += 1 + 2 + 1; // block {tracknum, pts_off, flags}
- // TODO does not work, if more than 127 tracks are present
- p += best_block.size; // block payload
+ let simpleblock_size = 1 + 2 + 1 // block {tracknum, pts_off, flags}
+ // TODO does not work, if more than 127 tracks are present
+ + best_block.size; // block payload
+ p += vint_length(simpleblock_size as u64); // simpleblock size vint
+ p += simpleblock_size;
cluster.push((best_index, best_block))
}
info!("segment layout computed ({} clusters)", clusters.len());
@@ -225,11 +222,12 @@ impl RemuxerContext {
let segment_start_position = output.position();
let mut skip = 0;
- for cluster in &segment_layout {
- if (cluster.position + segment_start_position) > range.start {
+ for (i, cluster) in segment_layout.iter().enumerate() {
+ if (cluster.position + segment_start_position) < range.start {
+ skip += i;
+ } else {
break;
}
- skip += 1;
}
if skip != 0 {
info!("skipping {skip} clusters");
@@ -237,7 +235,6 @@ impl RemuxerContext {
}
struct ReaderD<'a> {
- _info: SourceTrack,
peek: Option<Block>,
stream: SegmentExtractIter<'a>,
mapped: u64,
@@ -258,7 +255,6 @@ impl RemuxerContext {
mapped: inp.mapped,
peek: Some(stream.next()?),
stream,
- _info: inp.info.clone(),
});
}
info!(
@@ -266,7 +262,7 @@ impl RemuxerContext {
(Instant::now() - timing_cp).as_millis()
);
- for (cluster_index, cluster) in segment_layout.into_iter().skip(skip).enumerate() {
+ for (cluster_index, cluster) in segment_layout.into_iter().enumerate().skip(skip) {
info!(
"writing cluster {cluster_index} (pts_base={}) with {} blocks",
cluster.timestamp,