diff options
Diffstat (limited to 'remuxer/src/demuxers/mod.rs')
-rw-r--r-- | remuxer/src/demuxers/mod.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/remuxer/src/demuxers/mod.rs b/remuxer/src/demuxers/mod.rs index 8940ca5..f001250 100644 --- a/remuxer/src/demuxers/mod.rs +++ b/remuxer/src/demuxers/mod.rs @@ -10,9 +10,10 @@ pub mod matroska; use crate::{ ContainerFormat, demuxers::{flac::FlacDemuxer, matroska::MatroskaDemuxer}, + magic::detect_container_format, }; use anyhow::Result; -use std::io::{Read, Seek}; +use std::io::{Read, Seek, SeekFrom}; use winter_matroska::{Attachments, Chapters, Cluster, Cues, Info, Tags, Tracks}; pub trait ReadSeek: Read + Seek {} @@ -24,7 +25,7 @@ pub trait DemuxerNew: Demuxer + Sized { #[rustfmt::skip] pub trait Demuxer { - fn info(&mut self) -> Result<Option<Info>> { Ok(None) } + fn info(&mut self) -> Result<Info>; 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) } @@ -41,3 +42,12 @@ pub fn create_demuxer(container: ContainerFormat, reader: Box<dyn ReadSeek>) -> ContainerFormat::Flac => Box::new(FlacDemuxer::new(reader)), } } +pub fn create_demuxer_autodetect( + mut reader: Box<dyn ReadSeek>, +) -> Result<Option<Box<dyn Demuxer>>> { + let Some(container) = detect_container_format(&mut reader)? else { + return Ok(None); + }; + reader.seek(SeekFrom::Start(0))?; + Ok(Some(create_demuxer(container, reader))) +} |