From 8fc4b9792044d82e729e8b4ef993c6391d711c5b Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 13 Jan 2023 18:06:11 +0100 Subject: started writing a proc_macro now --- ebml/src/bin/experiment.rs | 3 +-- ebml/src/lib.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++++ ebml/src/matroska.rs | 6 +++--- ebml/src/mod.rs | 48 --------------------------------------------- ebml/src/read.rs | 3 +-- 5 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 ebml/src/lib.rs delete mode 100644 ebml/src/mod.rs (limited to 'ebml/src') diff --git a/ebml/src/bin/experiment.rs b/ebml/src/bin/experiment.rs index 7d8cede..d332b41 100644 --- a/ebml/src/bin/experiment.rs +++ b/ebml/src/bin/experiment.rs @@ -1,6 +1,5 @@ use std::fs::File; - -use jellyremuxer::format::matroska::read::EbmlReader; +use ebml::read::EbmlReader; fn main() { env_logger::init_from_env("LOG"); diff --git a/ebml/src/lib.rs b/ebml/src/lib.rs new file mode 100644 index 0000000..116b8e2 --- /dev/null +++ b/ebml/src/lib.rs @@ -0,0 +1,49 @@ +use crate::read::EbmlSize; + +use self::read::EbmlReader; +use anyhow::{bail, Result}; +use log::debug; + +pub mod matroska; +pub mod read; +pub mod write; + +#[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 { + 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..."), + }) + } +} diff --git a/ebml/src/matroska.rs b/ebml/src/matroska.rs index f53a1e8..802ce6a 100644 --- a/ebml/src/matroska.rs +++ b/ebml/src/matroska.rs @@ -1,11 +1,10 @@ - - +use ebml_derive::define_ebml; define_ebml! { global Crc32[0xbf]: Binary, global Void[0xec]: Binary, - Ebml[0x1a45dfa3] { + Ebml[0x1a45dfa3]: { EbmlVersion[0x4286]: u64, EbmlReadVersion[0x42f7]: u64, EbmlMaxIdLength[0x42f2]: u64, @@ -19,6 +18,7 @@ define_ebml! { }, }, } + // #[id=0x18538067] Segment(Master), // #[id=0x1941A469] Segment/Attachments(Master), // #[id=0x61A7] Segment/Attachments/AttachedFile(Master), diff --git a/ebml/src/mod.rs b/ebml/src/mod.rs deleted file mode 100644 index 5da6809..0000000 --- a/ebml/src/mod.rs +++ /dev/null @@ -1,48 +0,0 @@ -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 { - 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..."), - }) - } -} diff --git a/ebml/src/read.rs b/ebml/src/read.rs index 0ffb24c..9864ea5 100644 --- a/ebml/src/read.rs +++ b/ebml/src/read.rs @@ -2,9 +2,8 @@ use std::io::{Read, Seek}; use anyhow::{bail, Result}; use log::debug; -use webm_iterable::matroska_spec::MatroskaSpec; -use crate::format::matroska::{Master, MatroskaTag}; +// use crate::matroska::{Master, MatroskaTag}; trait ReadAndSeek: Read + Seek {} impl ReadAndSeek for T {} -- cgit v1.2.3-70-g09d2