aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/trim_writer.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-13 16:08:42 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-13 16:08:42 +0200
commit044c7e1c75145f1ec9d002b4f6fc4433ff7f9540 (patch)
treedb326c8f2327396ed443a1822936927e7c847494 /remuxer/src/trim_writer.rs
parente99bde7a00a161ff5dd91eaf1ce546a9d98cef05 (diff)
downloadjellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar
jellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar.bz2
jellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar.zst
start remuxer crate rewrite; added matroska demuxer and format detection
Diffstat (limited to 'remuxer/src/trim_writer.rs')
-rw-r--r--remuxer/src/trim_writer.rs72
1 files changed, 0 insertions, 72 deletions
diff --git a/remuxer/src/trim_writer.rs b/remuxer/src/trim_writer.rs
deleted file mode 100644
index 2c1b7ed..0000000
--- a/remuxer/src/trim_writer.rs
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- This file is part of jellything (https://codeberg.org/metamuffin/jellything)
- which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
- Copyright (C) 2025 metamuffin <metamuffin.org>
-*/
-use anyhow::anyhow;
-use log::{trace, warn};
-use std::{
- io::{Seek, Write},
- ops::Range,
-};
-
-pub struct TrimWriter<W> {
- inner: W,
- position: usize,
- range: Range<usize>,
-}
-impl<W: Write> TrimWriter<W> {
- pub fn new(inner: W, range: Range<usize>) -> Self {
- Self {
- inner,
- range,
- position: 0,
- }
- }
-}
-
-impl<W: Write> Write for TrimWriter<W> {
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
- let start = self.range.start as isize - self.position as isize;
- let end = self.range.end as isize - self.position as isize;
-
- let start = start.clamp(0, buf.len() as isize) as usize;
- let end = end.clamp(0, buf.len() as isize) as usize;
-
- if self.position >= self.range.end {
- return Err(std::io::Error::other(anyhow!("range ended")));
- }
-
- let tbuf = &buf[start..end];
- Ok(if !tbuf.is_empty() {
- trace!("trim={start}..{end} avail={}", buf.len());
- let sz = self.inner.write(tbuf)?;
- self.position += sz;
- sz
- } else {
- trace!("skip={}", buf.len());
- buf.len()
- })
- }
-
- fn flush(&mut self) -> std::io::Result<()> {
- self.inner.flush()
- }
-}
-
-impl<W> Seek for TrimWriter<W> {
- fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64> {
- match pos {
- std::io::SeekFrom::Start(s) => self.position = s as usize,
- std::io::SeekFrom::End(_) => unimplemented!(),
- std::io::SeekFrom::Current(s) => self.position += s as usize,
- }
- if self.position > self.range.end {
- warn!(
- "seeked beyond end: pos={} end={}",
- self.position, self.range.end
- )
- }
- Ok(self.position as u64)
- }
-}