aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/snippet.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-26 04:22:51 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-26 04:22:51 +0100
commit8fb1a7033bc3936516f24b3a797d005ef9a54422 (patch)
tree56a08b891437425742e45dff8e66311da47a5028 /remuxer/src/snippet.rs
parent2e41b2b373d5a057061a7694aa5e83001efeaf0f (diff)
downloadjellything-8fb1a7033bc3936516f24b3a797d005ef9a54422.tar
jellything-8fb1a7033bc3936516f24b3a797d005ef9a54422.tar.bz2
jellything-8fb1a7033bc3936516f24b3a797d005ef9a54422.tar.zst
snippet subtitles are working.
Diffstat (limited to 'remuxer/src/snippet.rs')
-rw-r--r--remuxer/src/snippet.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/remuxer/src/snippet.rs b/remuxer/src/snippet.rs
index 5b271e4..8fcb109 100644
--- a/remuxer/src/snippet.rs
+++ b/remuxer/src/snippet.rs
@@ -160,7 +160,7 @@ pub fn write_snippet_into(
let mut reader = SegmentExtractIter::new(&mut reader, local_track.track as u64);
{
- // TODO this one caused snippets to get dropped MSE for no reason
+ // TODO this one caused snippets to get dropped by MSE for no reason
// for i in start_block_index..end_block_index {
// let index_block = &index.blocks[i];
// let mut block = reader.next()?;
@@ -179,14 +179,21 @@ pub fn write_snippet_into(
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()?;
+ let (mut block, duration) = 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()))
+ if let Some(duration) = duration {
+ blocks.push(MatroskaTag::BlockGroup(Master::Collected(vec![
+ MatroskaTag::BlockDuration(duration),
+ MatroskaTag::Block(block.dump()),
+ ])))
+ } else {
+ blocks.push(MatroskaTag::SimpleBlock(block.dump()))
+ }
}
output.write_tag(&MatroskaTag::Cluster(Master::Collected(blocks)))?;
}