From 43e986b5e626b339095c118fa79ba6cd011aeb9f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 11 Jan 2023 23:16:10 +0100 Subject: doesnt work but should --- remuxer/src/lib.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) (limited to 'remuxer/src') diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs index 69a6f4b..8b4e2ed 100644 --- a/remuxer/src/lib.rs +++ b/remuxer/src/lib.rs @@ -1,9 +1,55 @@ -use std::path::PathBuf; - -use jellycommon::Source; +use jellycommon::ItemInfo; +use log::{debug, info}; +use std::{fs::File, io::Write, path::PathBuf, sync::Arc}; +use tokio::sync::mpsc::Sender; +use webm_iterable::{ + matroska_spec::{Master, MatroskaSpec}, + WebmIterator, WebmWriter, +}; pub struct RemuxerContext {} impl RemuxerContext { - pub fn generate(&self, path_base: PathBuf, source: Source) {} + pub fn new() -> Arc { + Arc::new(Self {}) + } + + pub fn generate_into( + &self, + writer: impl Write, + path_base: PathBuf, + item: ItemInfo, + selection: Vec, + ) -> anyhow::Result<()> { + let source_path = path_base.join(item.source.path); + info!("remuxing {source_path:?} to have tracks {selection:?}"); + let mut input = File::open(source_path)?; + + let tags = WebmIterator::new(&mut input, &[MatroskaSpec::TrackEntry(Master::Start)]); + let mut output = WebmWriter::new(writer); + + for tag in tags { + match tag.unwrap() { + x => { + // debug!("tag"); + output.write(&x)?; + } + } + } + Ok(()) + } +} + +pub struct SendWriter(pub Sender>); + +impl Write for SendWriter { + fn write(&mut self, buf: &[u8]) -> std::io::Result { + debug!("write {buf:?}"); + self.0.blocking_send(buf.to_owned()).unwrap(); + Ok(buf.len()) + } + + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) // TODO should we actually do something here? + } } -- cgit v1.2.3-70-g09d2