aboutsummaryrefslogtreecommitdiff
path: root/ebml/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-15 00:00:44 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-15 00:00:44 +0100
commit943ffe0d1dc2addf2f4f5db781e3d83c900b372d (patch)
tree9c15a544682d985894f3106a45f07bac172c65ad /ebml/src
parent439dc00d1ce9ff3e5dc05f32a0426152fc5fab89 (diff)
downloadjellything-943ffe0d1dc2addf2f4f5db781e3d83c900b372d.tar
jellything-943ffe0d1dc2addf2f4f5db781e3d83c900b372d.tar.bz2
jellything-943ffe0d1dc2addf2f4f5db781e3d83c900b372d.tar.zst
shit
Diffstat (limited to 'ebml/src')
-rw-r--r--ebml/src/bin/mkvdump.rs2
-rw-r--r--ebml/src/read.rs31
-rw-r--r--ebml/src/size.rs8
-rw-r--r--ebml/src/write.rs2
4 files changed, 22 insertions, 21 deletions
diff --git a/ebml/src/bin/mkvdump.rs b/ebml/src/bin/mkvdump.rs
index ae621e6..45030cd 100644
--- a/ebml/src/bin/mkvdump.rs
+++ b/ebml/src/bin/mkvdump.rs
@@ -8,7 +8,7 @@ fn main() -> anyhow::Result<()> {
while let Some(tag) = r.next() {
let tag = tag?;
- println!("{} {tag:?}", r.position)
+ eprintln!("{} {tag:?}", r.position)
}
Ok(())
}
diff --git a/ebml/src/read.rs b/ebml/src/read.rs
index 9e080be..56eec51 100644
--- a/ebml/src/read.rs
+++ b/ebml/src/read.rs
@@ -1,3 +1,4 @@
+use crate::{matroska::MatroskaTag, size::EbmlSize, Master};
use anyhow::{anyhow, bail, Result};
use log::{debug, warn};
use std::{
@@ -5,8 +6,6 @@ use std::{
io::{Read, Seek, SeekFrom},
};
-use crate::{matroska::MatroskaTag, size::EbmlSize, Master};
-
trait ReadAndSeek: Read + Seek {}
impl<T: Read + Seek> ReadAndSeek for T {}
@@ -81,6 +80,7 @@ impl EbmlReader {
if self.position != end {
warn!("we missed the end by {} bytes", self.position - end)
}
+ eprintln!("closed (size): {:x}", e.id);
self.stack.pop();
self.queue
.push_back(MatroskaTag::construct_master(e.id, Master::End)?);
@@ -91,10 +91,17 @@ impl EbmlReader {
let id = self.read_tag_id()?;
let size = self.read_tag_size()?;
let is_master = MatroskaTag::is_master(id)?;
+ let mut collect = false;
let tag = if is_master {
+ match id {
+ 0x18538067 => (), // segment
+ 0x1F43B675 => (), // cluster
+ _ => collect = true,
+ }
+ // we cant collect here, so insert a placeholder
MatroskaTag::construct_master(id, Master::Start)?
} else {
- let data = self.read_buf(size)?;
+ let data = self.read_buf(size.some().unwrap())?;
MatroskaTag::parse(id, &data)?
};
@@ -102,16 +109,16 @@ impl EbmlReader {
// we have slightly different rules for closing tags implicitly
// this closes as many tags as needed to make the next tag a valid child
while let Some(tag @ StackTag { end: None, .. }) = self.stack.last() {
- let mut valid_child = false;
- for p in path {
- if *p == tag.id {
- valid_child = true;
- }
- }
+ // for p in path {
+ // if *p == tag.id {
+ // valid_child = true;
+ // }
+ // }
+ let valid_child = path.last() == Some(&tag.id);
if valid_child {
break;
} else {
- debug!("{id}");
+ eprintln!("closed (automatic): {:x}", tag.id);
self.queue.push_back(MatroskaTag::construct_master(
self.stack.pop().unwrap().id,
Master::End,
@@ -151,6 +158,7 @@ impl EbmlReader {
pub fn collect_master(&mut self, master: MatroskaTag) -> Result<Vec<MatroskaTag>> {
let end = MatroskaTag::construct_master(master.id(), Master::End)?;
+ eprintln!("start {master:?}");
let mut out = vec![];
while let Some(t) = self.next() {
let t = t?;
@@ -160,6 +168,7 @@ impl EbmlReader {
out.push(t)
}
}
+ eprintln!("end {end:?} with {} els", out.len());
Ok(out)
}
}
@@ -236,6 +245,6 @@ impl ReadValue for String {
}
impl ReadValue for Master {
fn from_buf(_: &[u8]) -> anyhow::Result<Self> {
- bail!("master cannot be parsed")
+ panic!("master shall not be read like this")
}
}
diff --git a/ebml/src/size.rs b/ebml/src/size.rs
index 06d6ba8..e774f0a 100644
--- a/ebml/src/size.rs
+++ b/ebml/src/size.rs
@@ -19,11 +19,3 @@ impl EbmlSize {
}
}
}
-impl Into<usize> for EbmlSize {
- fn into(self) -> usize {
- match self {
- EbmlSize::Exact(s) => s,
- EbmlSize::Unknown => panic!("unknown size, where it should have been known"),
- }
- }
-}
diff --git a/ebml/src/write.rs b/ebml/src/write.rs
index 2191693..fc12ffc 100644
--- a/ebml/src/write.rs
+++ b/ebml/src/write.rs
@@ -148,7 +148,7 @@ impl WriteValue for Master {
for c in c {
c.write_full(&mut ib)?;
}
- EbmlSize::Exact(ib.len()).write_to(w);
+ EbmlSize::Exact(ib.len()).write_to(w)?;
w.extend_from_slice(&ib);
Ok(())
}