From 7ca91b6f33bb260bc966e853c832b4339c1c2ae0 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 12 Jan 2023 22:05:32 +0100 Subject: implementing my own ebml library --- remuxer/src/format/ebml/read.rs | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 remuxer/src/format/ebml/read.rs (limited to 'remuxer/src/format/ebml/read.rs') diff --git a/remuxer/src/format/ebml/read.rs b/remuxer/src/format/ebml/read.rs new file mode 100644 index 0000000..06ccf2f --- /dev/null +++ b/remuxer/src/format/ebml/read.rs @@ -0,0 +1,44 @@ +use std::io::{Read, Seek}; + +use anyhow::Result; + +pub struct EbmlReader { + inner: T, + position: usize, +} + +impl EbmlReader { + pub fn new(inner: T) -> Self { + Self { inner, position: 0 } + } + + pub fn read_byte(&mut self) -> Result { + let mut b = [0u8]; + self.inner.read_exact(&mut b)?; + Ok(b[0]) + } + pub fn read_vint(&mut self) -> Result<(u64, u64)> { + let s = self.read_byte()? as u64; + let len = s.leading_zeros() + 1; + let mut value = s; + value -= 1 << (8 - len); + for _ in 0..(len - 1) { + value <<= 8; + value += self.read_byte()? as u64; + } + Ok((value, len.into())) + } + + pub fn read_tag_id(&mut self) -> Result { + let (value, len) = self.read_vint()?; + Ok(value + (1 << (7 * len))) + } + + pub fn read_tag(&mut self) -> Result<()> { + let id = self.read_tag_id()?; + + Ok(()) + + } +} + -- cgit v1.2.3-70-g09d2