diff options
Diffstat (limited to 'remuxer/src/demuxers/mod.rs')
-rw-r--r-- | remuxer/src/demuxers/mod.rs | 26 |
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)), + } +} |