aboutsummaryrefslogtreecommitdiff
path: root/remuxer
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-11 23:35:26 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-11 23:35:26 +0100
commit047cb61bcf0ca61c58566ef5ca5d236234e46b21 (patch)
tree120e5097422900a9834422353fd115ef573c5073 /remuxer
parentc52ee8ef7391a11ddbe64dacc37666eca9128deb (diff)
downloadjellything-047cb61bcf0ca61c58566ef5ca5d236234e46b21.tar
jellything-047cb61bcf0ca61c58566ef5ca5d236234e46b21.tar.bz2
jellything-047cb61bcf0ca61c58566ef5ca5d236234e46b21.tar.zst
it works!
Diffstat (limited to 'remuxer')
-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)?;