diff options
author | metamuffin <metamuffin@disroot.org> | 2024-05-14 00:25:19 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-05-14 00:25:19 +0200 |
commit | b07bafa8eda0daa472d47e17042e9804f1d1ba66 (patch) | |
tree | 81df41bbdb829534ecc2dd1b00a81723a6426303 /remuxer/src/extract.rs | |
parent | 8752a12e954600152e9eaa60ed29af585ed06c64 (diff) | |
download | jellything-b07bafa8eda0daa472d47e17042e9804f1d1ba66.tar jellything-b07bafa8eda0daa472d47e17042e9804f1d1ba66.tar.bz2 jellything-b07bafa8eda0daa472d47e17042e9804f1d1ba66.tar.zst |
better handle BlockGroup without duration
Diffstat (limited to 'remuxer/src/extract.rs')
-rw-r--r-- | remuxer/src/extract.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/remuxer/src/extract.rs b/remuxer/src/extract.rs index bef5d4d..e70adf4 100644 --- a/remuxer/src/extract.rs +++ b/remuxer/src/extract.rs @@ -13,7 +13,7 @@ use std::{fs::File, io::BufReader, path::PathBuf}; pub fn extract_track( path_base: PathBuf, track_info: LocalTrack, -) -> anyhow::Result<Vec<(u64, u64, Vec<u8>)>> { +) -> anyhow::Result<Vec<(u64, Option<u64>, Vec<u8>)>> { let source_path = path_base.join(track_info.path); let file = File::open(&source_path)?; let mut reader = EbmlReader::new(BufReader::new(file)); @@ -35,7 +35,7 @@ pub fn extract_track( Ok(out) } -pub fn read_group(segment: &mut EbmlReader) -> anyhow::Result<(u64, Block)> { +pub fn read_group(segment: &mut EbmlReader) -> anyhow::Result<(Option<u64>, Block)> { let (mut dur, mut block) = (None, None); for _ in 0..10 { let (_, item) = segment.next().ok_or(anyhow!("eof"))??; @@ -45,10 +45,10 @@ pub fn read_group(segment: &mut EbmlReader) -> anyhow::Result<(u64, Block)> { MatroskaTag::Cluster(_) => bail!("unexpected cluster"), MatroskaTag::Timestamp(_) => (), MatroskaTag::SimpleBlock(block) => { - return Ok((1000, block)); // HDMV/PGS does not use duration?! + return Ok((None, block)); // HDMV/PGS does not use duration?! } MatroskaTag::BlockGroup(Master::Start) => (), - MatroskaTag::BlockGroup(Master::End) => return Ok((dur.unwrap(), block.unwrap())), + MatroskaTag::BlockGroup(Master::End) => return Ok((dur, block.unwrap())), MatroskaTag::BlockDuration(duration) => dur = Some(duration), MatroskaTag::Block(blk) => block = Some(blk), MatroskaTag::Cues(_) => bail!("reached cues, this is the end"), |