aboutsummaryrefslogtreecommitdiff
path: root/remuxer
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-11-12 22:33:18 +0100
committermetamuffin <metamuffin@disroot.org>2025-11-12 22:33:18 +0100
commitf3af9263b0472bcef3207906ce0e4d1d4aa3595b (patch)
treee7d0e26156ced50086ba4c4941fb6e8016c78349 /remuxer
parent2efc5f9444402c5ef9db25887f2e95d184af8e05 (diff)
downloadjellything-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.rs15
-rw-r--r--remuxer/src/demuxers/matroska.rs7
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>> {