diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-11-12 22:33:18 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-11-12 22:33:18 +0100 |
| commit | f3af9263b0472bcef3207906ce0e4d1d4aa3595b (patch) | |
| tree | e7d0e26156ced50086ba4c4941fb6e8016c78349 /remuxer | |
| parent | 2efc5f9444402c5ef9db25887f2e95d184af8e05 (diff) | |
| download | jellything-f3af9263b0472bcef3207906ce0e4d1d4aa3595b.tar jellything-f3af9263b0472bcef3207906ce0e4d1d4aa3595b.tar.bz2 jellything-f3af9263b0472bcef3207906ce0e4d1d4aa3595b.tar.zst | |
debug clusters, fix clusters not found in seek head
Diffstat (limited to 'remuxer')
| -rw-r--r-- | remuxer/src/bin/mkvinfo.rs | 15 | ||||
| -rw-r--r-- | remuxer/src/demuxers/matroska.rs | 7 |
2 files changed, 18 insertions, 4 deletions
diff --git a/remuxer/src/bin/mkvinfo.rs b/remuxer/src/bin/mkvinfo.rs index fa2d287..e2c7cea 100644 --- a/remuxer/src/bin/mkvinfo.rs +++ b/remuxer/src/bin/mkvinfo.rs @@ -6,7 +6,10 @@ use anyhow::{Result, anyhow}; use jellyremuxer::demuxers::create_demuxer_autodetect; -use std::{env::args, fs::File}; +use std::{ + env::{args, var}, + fs::File, +}; fn main() -> Result<()> { env_logger::init_from_env("LOG"); @@ -20,5 +23,15 @@ fn main() -> Result<()> { println!("CHAPTERS: {:#?}", reader.chapters()?); println!("TAGS: {:#?}", reader.tags()?); + if var("CLUSTERS").is_ok() { + reader.seek_cluster(None)?; + while let Some((off, cluster)) = reader.read_cluster()? { + eprintln!( + "off={off} num_blocks={}", + cluster.simple_blocks.len() + cluster.block_groups.len() + ) + } + } + Ok(()) } diff --git a/remuxer/src/demuxers/matroska.rs b/remuxer/src/demuxers/matroska.rs index bb7289a..45bb154 100644 --- a/remuxer/src/demuxers/matroska.rs +++ b/remuxer/src/demuxers/matroska.rs @@ -102,7 +102,9 @@ impl MatroskaDemuxer { /// Seeks to the content of child tag of Segment possibly optimized via SeekHead. /// Returns the absolute offset of the element start and size of the content. pub fn seek_to_segment_tag(&mut self, search_tag: u64) -> Result<Option<(u64, u64)>> { - if let Some(seek_head) = self.seek_head()? { + if let Some(seek_head) = self.seek_head()? + && !search_tag == Segment::TAG_CLUSTERS + { let Some(segment_position) = seek_head .seeks .iter() @@ -159,8 +161,7 @@ impl MatroskaDemuxer { } impl Demuxer for MatroskaDemuxer { fn info(&mut self) -> Result<Info> { - self - .read_segment_tag("Info", Segment::TAG_INFO)? + self.read_segment_tag("Info", Segment::TAG_INFO)? .ok_or(anyhow!("info missing")) } fn tracks(&mut self) -> Result<Option<Tracks>> { |