diff options
Diffstat (limited to 'remuxer')
-rw-r--r-- | remuxer/src/lib.rs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs index 8b4e2ed..95bd1ff 100644 --- a/remuxer/src/lib.rs +++ b/remuxer/src/lib.rs @@ -3,7 +3,7 @@ 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}, + matroska_spec::{Master, MatroskaSpec, Block}, WebmIterator, WebmWriter, }; @@ -29,7 +29,35 @@ impl RemuxerContext { let mut output = WebmWriter::new(writer); for tag in tags { - match tag.unwrap() { + let tag = tag.unwrap(); + match tag { + MatroskaSpec::TrackEntry(master) => { + let children = master.get_children(); + let mut number = None; + for c in &children { + if let MatroskaSpec::TrackNumber(n) = c { + number = Some(*n) + } + } + let number = number.unwrap(); + if selection.contains(&number) { + output.write(&MatroskaSpec::TrackEntry(Master::Full(children)))?; + } + } + MatroskaSpec::Block(ref data) => { + let data: &[u8] = &data; + let block: Block = data.try_into()?; + if selection.contains(&block.track) { + output.write(&tag)?; + } + }, + MatroskaSpec::SimpleBlock(ref data) => { + let data: &[u8] = &data; + let block: Block = data.try_into()?; + if selection.contains(&block.track) { + output.write(&tag)?; + } + }, x => { // debug!("tag"); output.write(&x)?; |