diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-29 14:45:25 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-29 14:45:25 +0100 |
commit | de8d69d2886ae50e28da210fc690c99457a804bb (patch) | |
tree | b9d4fca9acd7d5fb844f4c76c8c338770d943df7 /remuxer/src/lib.rs | |
parent | 0d9dc5672b0ba0c6c9988b0422837ceb00a5d7b8 (diff) | |
download | jellything-de8d69d2886ae50e28da210fc690c99457a804bb.tar jellything-de8d69d2886ae50e28da210fc690c99457a804bb.tar.bz2 jellything-de8d69d2886ae50e28da210fc690c99457a804bb.tar.zst |
more seeking code + expire cookies
Diffstat (limited to 'remuxer/src/lib.rs')
-rw-r--r-- | remuxer/src/lib.rs | 26 |
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, |