diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-13 17:12:47 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-13 17:12:47 +0100 |
commit | b192ec740d358d0e12eedd1308d006e080b3d8c2 (patch) | |
tree | f642ddaa0e35694f611cc97978f1031431b5fef2 /ebml/src/mod.rs | |
parent | 7ca91b6f33bb260bc966e853c832b4339c1c2ae0 (diff) | |
download | jellything-b192ec740d358d0e12eedd1308d006e080b3d8c2.tar jellything-b192ec740d358d0e12eedd1308d006e080b3d8c2.tar.bz2 jellything-b192ec740d358d0e12eedd1308d006e080b3d8c2.tar.zst |
new starting with a new ebml impl
Diffstat (limited to 'ebml/src/mod.rs')
-rw-r--r-- | ebml/src/mod.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ebml/src/mod.rs b/ebml/src/mod.rs new file mode 100644 index 0000000..5da6809 --- /dev/null +++ b/ebml/src/mod.rs @@ -0,0 +1,48 @@ +use crate::format::matroska::read::EbmlSize; + +use self::read::EbmlReader; +use anyhow::{bail, Result}; +use log::debug; + +pub mod matroska; +pub mod read; + +#[derive(Debug, Clone)] +pub enum Master { + Start, + End, +} + +#[derive(Debug, Clone)] +pub enum MatroskaTag { + Ebml(Master), + EbmlVersion(u64), + EbmlReadVersion(u64), + EbmlMaxIdLength(u64), + EbmlMaxSizeLength(u64), + DocType(String), + DocTypeVersion(u64), + DocTypeReadVersion(u64), + DocTypeExtension(Master), +} + +impl EbmlReader { + pub fn read_tag(&mut self) -> Result<MatroskaTag> { + let id = self.read_tag_id()?; + let size = EbmlSize::from_vint(self.read_vint_len()?); + debug!("tag id={id:x}, size={size:?}"); + Ok(match id { + 0x1a45dfa3 => MatroskaTag::Ebml(Master::Start), + 0x4286 => MatroskaTag::EbmlVersion(self.read_vint()?), + 0x42f7 => MatroskaTag::EbmlReadVersion(self.read_vint()?), + 0x42f2 => MatroskaTag::EbmlMaxIdLength(self.read_vint()?), + 0x42f3 => MatroskaTag::EbmlMaxSizeLength(self.read_vint()?), + 0x4282 => MatroskaTag::DocType(self.read_utf8(size)?), + 0x4287 => MatroskaTag::DocTypeVersion(self.read_vint()?), + 0x4285 => MatroskaTag::DocTypeReadVersion(self.read_vint()?), + 0x4281 => MatroskaTag::DocTypeExtension(Master::Start), + + _ => bail!("thats not a tag we know..."), + }) + } +} |