diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-12 22:05:32 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-12 22:05:32 +0100 |
commit | 7ca91b6f33bb260bc966e853c832b4339c1c2ae0 (patch) | |
tree | 573eea3ea72a55fff4d43f42de4ae6fe0af4b2d9 /remuxer/src/format/ebml/write.rs | |
parent | 047cb61bcf0ca61c58566ef5ca5d236234e46b21 (diff) | |
download | jellything-7ca91b6f33bb260bc966e853c832b4339c1c2ae0.tar jellything-7ca91b6f33bb260bc966e853c832b4339c1c2ae0.tar.bz2 jellything-7ca91b6f33bb260bc966e853c832b4339c1c2ae0.tar.zst |
implementing my own ebml library
Diffstat (limited to 'remuxer/src/format/ebml/write.rs')
-rw-r--r-- | remuxer/src/format/ebml/write.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/remuxer/src/format/ebml/write.rs b/remuxer/src/format/ebml/write.rs new file mode 100644 index 0000000..1dee225 --- /dev/null +++ b/remuxer/src/format/ebml/write.rs @@ -0,0 +1,38 @@ +use anyhow::{bail, Result}; +use std::io::Write; + +pub struct EbmlWriter<T> { + inner: T, + position: usize, +} + +impl<T: Write> EbmlWriter<T> { + pub fn new(inner: T, position: usize) -> Self { + Self { inner, position } + } + + pub fn write(&mut self, data: &[u8]) -> Result<()> { + self.inner.write_all(data)?; + self.position += data.len(); + Ok(()) + } + + pub fn write_vint(&mut self, i: u64) -> Result<()> { + if i > (1 << 56) - 1 { + bail!("vint does not fit"); + } + let mut len = 1; + while len <= 8 { + if i < (1 << ((7 * len) - 1)) { + break; + } + len += 1; + } + let mut bytes = i.to_be_bytes(); + bytes[0] |= 1 << (8 - len); + self.write(&bytes) + } + +} + + |