aboutsummaryrefslogtreecommitdiff
path: root/remuxer
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-12-10 11:45:19 +0100
committermetamuffin <metamuffin@disroot.org>2023-12-10 11:46:08 +0100
commit74fb6b5835f233d7cdb2952bcf8e29068ff81b60 (patch)
treed78ded90dca57252fa67b0ec956280efd5b2359e /remuxer
parent3ed1c68f3c6a0bf330f129012485afc28aa6fa39 (diff)
downloadjellything-74fb6b5835f233d7cdb2952bcf8e29068ff81b60.tar
jellything-74fb6b5835f233d7cdb2952bcf8e29068ff81b60.tar.bz2
jellything-74fb6b5835f233d7cdb2952bcf8e29068ff81b60.tar.zst
revert to old (sometimes crashin) snippet remuxer
Diffstat (limited to 'remuxer')
-rw-r--r--remuxer/src/snippet.rs39
1 files changed, 28 insertions, 11 deletions
diff --git a/remuxer/src/snippet.rs b/remuxer/src/snippet.rs
index dcc3b15..afda1f3 100644
--- a/remuxer/src/snippet.rs
+++ b/remuxer/src/snippet.rs
@@ -120,19 +120,36 @@ pub fn write_snippet_into(
let mut reader = SegmentExtractIter::new(&mut reader, private.track as u64);
- // TODO: start using clusters again
- for i in start_block_index..end_block_index {
- let index_block = &index.blocks[i];
- let mut block = reader.next()?;
+ {
+ // TODO this one caused snippets to get dropped MSE for no reason
+ // for i in start_block_index..end_block_index {
+ // let index_block = &index.blocks[i];
+ // let mut block = reader.next()?;
- assert_eq!(index_block.size, block.data.len(), "seek index is wrong");
+ // assert_eq!(index_block.size, block.data.len(), "seek index is wrong");
- block.track = 1;
- block.timestamp_off = 0;
- output.write_tag(&MatroskaTag::Cluster(Master::Collected(vec![
- MatroskaTag::Timestamp(index_block.pts - start_block.pts),
- MatroskaTag::SimpleBlock(block.dump()),
- ])))?;
+ // block.track = 1;
+ // block.timestamp_off = 0;
+ // output.write_tag(&MatroskaTag::Cluster(Master::Collected(vec![
+ // MatroskaTag::Timestamp(index_block.pts - start_block.pts),
+ // MatroskaTag::SimpleBlock(block.dump()),
+ // ])))?;
+ // }
+ }
+ {
+ let mut blocks = vec![MatroskaTag::Timestamp(0)];
+ for i in start_block_index..end_block_index {
+ let index_block = &index.blocks[i];
+ let mut block = reader.next()?;
+
+ assert_eq!(index_block.size, block.data.len(), "seek index is wrong");
+
+ block.track = 1;
+ // TODO this does generate overflows sometimes
+ block.timestamp_off = (index_block.pts - start_block.pts).try_into().unwrap();
+ blocks.push(MatroskaTag::SimpleBlock(block.dump()))
+ }
+ output.write_tag(&MatroskaTag::Cluster(Master::Collected(blocks)))?;
}
output.write_tag(&MatroskaTag::Segment(Master::End))?;