aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/demuxers/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/demuxers/mod.rs')
-rw-r--r--remuxer/src/demuxers/mod.rs26
1 files changed, 20 insertions, 6 deletions
diff --git a/remuxer/src/demuxers/mod.rs b/remuxer/src/demuxers/mod.rs
index e47e3d7..8940ca5 100644
--- a/remuxer/src/demuxers/mod.rs
+++ b/remuxer/src/demuxers/mod.rs
@@ -4,8 +4,13 @@
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
+pub mod flac;
pub mod matroska;
+use crate::{
+ ContainerFormat,
+ demuxers::{flac::FlacDemuxer, matroska::MatroskaDemuxer},
+};
use anyhow::Result;
use std::io::{Read, Seek};
use winter_matroska::{Attachments, Chapters, Cluster, Cues, Info, Tags, Tracks};
@@ -16,14 +21,23 @@ impl<T: Read + Seek> ReadSeek for T {}
pub trait DemuxerNew: Demuxer + Sized {
fn new(reader: Box<dyn ReadSeek>) -> Self;
}
+
+#[rustfmt::skip]
pub trait Demuxer {
- fn info(&mut self) -> Result<Info>;
- fn tracks(&mut self) -> Result<Tracks>;
- fn chapters(&mut self) -> Result<Chapters>;
- fn attachments(&mut self) -> Result<Attachments>;
- fn tags(&mut self) -> Result<Tags>;
- fn cues(&mut self) -> Result<Cues>;
+ fn info(&mut self) -> Result<Option<Info>> { Ok(None) }
+ fn tracks(&mut self) -> Result<Option<Tracks>> { Ok(None) }
+ fn chapters(&mut self) -> Result<Option<Chapters>> { Ok(None) }
+ fn attachments(&mut self) -> Result<Option<Attachments>> { Ok(None) }
+ fn tags(&mut self) -> Result<Option<Tags>> { Ok(None) }
+ fn cues(&mut self) -> Result<Option<Cues>> { Ok(None) }
fn seek_cluster(&mut self, position: Option<u64>) -> Result<()>;
fn read_cluster(&mut self) -> Result<Option<(u64, Cluster)>>;
}
+
+pub fn create_demuxer(container: ContainerFormat, reader: Box<dyn ReadSeek>) -> Box<dyn Demuxer> {
+ match container {
+ ContainerFormat::Matroska | ContainerFormat::Webm => Box::new(MatroskaDemuxer::new(reader)),
+ ContainerFormat::Flac => Box::new(FlacDemuxer::new(reader)),
+ }
+}