aboutsummaryrefslogtreecommitdiff
path: root/matroska/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-12-17 14:49:38 +0100
committermetamuffin <metamuffin@disroot.org>2023-12-17 14:49:38 +0100
commit61dc9b1069c2763fbe075d70750ade9e2482131a (patch)
treee083c5a4aca625303b58bb4ebe4700c600ed7b2f /matroska/src
parent2e6f2a2d21a0ba9a5c8f13bf27e64615144cf222 (diff)
downloadjellything-61dc9b1069c2763fbe075d70750ade9e2482131a.tar
jellything-61dc9b1069c2763fbe075d70750ade9e2482131a.tar.bz2
jellything-61dc9b1069c2763fbe075d70750ade9e2482131a.tar.zst
minimal refactor in remux
Diffstat (limited to 'matroska/src')
-rw-r--r--matroska/src/read.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/matroska/src/read.rs b/matroska/src/read.rs
index cb3e45e..42f0e34 100644
--- a/matroska/src/read.rs
+++ b/matroska/src/read.rs
@@ -46,12 +46,14 @@ impl EbmlReader {
}
}
+ #[inline]
pub fn read_byte(&mut self) -> Result<u8> {
let mut b = [0u8];
self.inner.read_exact(&mut b).map_err(Error::Io)?;
self.position += 1;
Ok(b[0])
}
+
pub fn read_buf(&mut self, size: impl Into<usize>) -> Result<Vec<u8>> {
let size = size.into();
let mut b = vec![0u8; size];
@@ -59,6 +61,7 @@ impl EbmlReader {
self.position += size;
Ok(b)
}
+
pub fn read_vint_len(&mut self) -> Result<(u64, usize)> {
let s = self.read_byte()?;
let len = s.leading_zeros() + 1;
@@ -73,20 +76,30 @@ impl EbmlReader {
}
Ok((value, len as usize))
}
+
+ #[inline]
pub fn read_vint(&mut self) -> Result<u64> {
Ok(self.read_vint_len()?.0)
}
+
+ #[inline]
pub fn read_utf8(&mut self, size: impl Into<usize>) -> Result<String> {
let b = self.read_buf(size)?;
Ok(String::from_utf8(b).map_err(|_| Error::InvalidUTF8)?)
}
+
+ #[inline]
pub fn read_tag_id(&mut self) -> Result<u64> {
let (value, len) = self.read_vint_len()?;
Ok(value + (1 << (7 * len)))
}
+
+ #[inline]
pub fn read_tag_size(&mut self) -> Result<EbmlSize> {
Ok(EbmlSize::from_vint(self.read_vint_len()?))
}
+
+ /// reads *some* amount of tags from the stream and pushes it to the queue.
pub fn read_stuff(&mut self) -> Result<()> {
while let Some(e) = self.stack.last().copied() {
if let Some(end) = e.end {
@@ -284,6 +297,7 @@ impl<T: Read> ReadExt for T {
}
Ok((value, len as usize))
}
+ #[inline]
fn read_vint(&mut self) -> Result<u64> {
Ok(self.read_vint_len()?.0)
}