From f8d4c438d10450ead56c0082b037e466ef5f9f24 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 25 Sep 2025 04:00:51 +0200 Subject: start media processing refactor --- remuxer/src/demuxers/mod.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'remuxer/src/demuxers/mod.rs') 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> { Ok(None) } + fn info(&mut self) -> Result; fn tracks(&mut self) -> Result> { Ok(None) } fn chapters(&mut self) -> Result> { Ok(None) } fn attachments(&mut self) -> Result> { Ok(None) } @@ -41,3 +42,12 @@ pub fn create_demuxer(container: ContainerFormat, reader: Box) -> ContainerFormat::Flac => Box::new(FlacDemuxer::new(reader)), } } +pub fn create_demuxer_autodetect( + mut reader: Box, +) -> Result>> { + let Some(container) = detect_container_format(&mut reader)? else { + return Ok(None); + }; + reader.seek(SeekFrom::Start(0))?; + Ok(Some(create_demuxer(container, reader))) +} -- cgit v1.2.3-70-g09d2