diff options
author | metamuffin <metamuffin@disroot.org> | 2025-09-25 04:00:51 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-09-25 04:00:51 +0200 |
commit | f8d4c438d10450ead56c0082b037e466ef5f9f24 (patch) | |
tree | 703612747f06b91f063dcd9e8a778675e6aa1303 /remuxer/src/demuxers/mod.rs | |
parent | 0fe48987c336b9b50cba09355aa3c1cf11740edc (diff) | |
download | jellything-f8d4c438d10450ead56c0082b037e466ef5f9f24.tar jellything-f8d4c438d10450ead56c0082b037e466ef5f9f24.tar.bz2 jellything-f8d4c438d10450ead56c0082b037e466ef5f9f24.tar.zst |
start media processing refactor
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))) +} |