aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/lib.rs')
-rw-r--r--remuxer/src/lib.rs32
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)?;