aboutsummaryrefslogtreecommitdiff
path: root/remuxer
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer')
-rw-r--r--remuxer/src/extract.rs8
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"),