aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/demuxers/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-25 04:00:51 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-25 04:00:51 +0200
commitf8d4c438d10450ead56c0082b037e466ef5f9f24 (patch)
tree703612747f06b91f063dcd9e8a778675e6aa1303 /remuxer/src/demuxers/mod.rs
parent0fe48987c336b9b50cba09355aa3c1cf11740edc (diff)
downloadjellything-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.rs14
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)))
+}