diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-11-09 14:04:31 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-11-09 14:04:31 +0100 |
| commit | 6032bfd0fa7cfd10d1bc17e44f91a789aa86efad (patch) | |
| tree | b7f85157a39ad5a16a09c17f238594cc76405f78 /remuxer | |
| parent | ea06e23a7fd3160f41da9aadec2229dc4dc47e37 (diff) | |
| download | jellything-6032bfd0fa7cfd10d1bc17e44f91a789aa86efad.tar jellything-6032bfd0fa7cfd10d1bc17e44f91a789aa86efad.tar.bz2 jellything-6032bfd0fa7cfd10d1bc17e44f91a789aa86efad.tar.zst | |
use flac demuxer in mkvinfo
Diffstat (limited to 'remuxer')
| -rw-r--r-- | remuxer/src/bin/mkvinfo.rs | 5 | ||||
| -rw-r--r-- | remuxer/src/demuxers/flac.rs | 6 | ||||
| -rw-r--r-- | remuxer/src/magic.rs | 12 |
3 files changed, 18 insertions, 5 deletions
diff --git a/remuxer/src/bin/mkvinfo.rs b/remuxer/src/bin/mkvinfo.rs index 2b657ea..fa2d287 100644 --- a/remuxer/src/bin/mkvinfo.rs +++ b/remuxer/src/bin/mkvinfo.rs @@ -5,14 +5,15 @@ */ use anyhow::{Result, anyhow}; -use jellyremuxer::demuxers::{Demuxer, DemuxerNew, matroska::MatroskaDemuxer}; +use jellyremuxer::demuxers::create_demuxer_autodetect; use std::{env::args, fs::File}; fn main() -> Result<()> { env_logger::init_from_env("LOG"); let path = args().nth(1).ok_or(anyhow!("first arg is input path"))?; let file = File::open(path)?; - let mut reader = MatroskaDemuxer::new(Box::new(file)); + let mut reader = + create_demuxer_autodetect(Box::new(file))?.ok_or(anyhow!("unknown file type"))?; println!("INFO: {:#?}", reader.info()?); println!("TRACKS: {:#?}", reader.tracks()?); diff --git a/remuxer/src/demuxers/flac.rs b/remuxer/src/demuxers/flac.rs index b397a8c..8e3fecc 100644 --- a/remuxer/src/demuxers/flac.rs +++ b/remuxer/src/demuxers/flac.rs @@ -50,7 +50,7 @@ struct StreamInfo { bit_depth: u8, } impl StreamInfo { - pub fn parse(d: &[u8; 22]) -> Self { + pub fn parse(d: &[u8; 34]) -> Self { let k = u64::from_be_bytes([d[10], d[11], d[12], d[13], d[14], d[15], d[16], d[17]]); Self { min_block_size: u16::from_be_bytes([d[0], d[1]]), @@ -103,7 +103,7 @@ impl FlacDemuxer { let m = self.read_metadata()?; if m[0].r#type == MetadataBlock::TY_STREAMINFO { Ok(StreamInfo::parse(m[0].data.as_slice().try_into().map_err( - |_| anyhow!("Streaminfo block is not 22 bytes"), + |_| anyhow!("Streaminfo block is not 22 bytes but {}", m[0].data.len()), )?)) } else { bail!("first metadata block is not Streaminfo") @@ -252,6 +252,8 @@ impl Demuxer for FlacDemuxer { let mut crc_buf = [0u8; 1]; self.reader.read_exact(&mut crc_buf)?; + + Ok(None) } } diff --git a/remuxer/src/magic.rs b/remuxer/src/magic.rs index 65ab4de..201f3f5 100644 --- a/remuxer/src/magic.rs +++ b/remuxer/src/magic.rs @@ -13,7 +13,17 @@ use winter_matroska::MatroskaFile; pub fn detect_container_format(reader: &mut dyn Read) -> Result<Option<ContainerFormat>> { let mut data = Vec::new(); reader.take(128).read_to_end(&mut data)?; - Ok(test_matroska(&data)) + if test_flac(&data) { + return Ok(Some(ContainerFormat::Flac)); + } + if let Some(f) = test_matroska(&data) { + return Ok(Some(f)); + } + Ok(None) +} + +fn test_flac(data: &[u8]) -> bool { + data.starts_with(b"fLaC") } fn test_matroska(mut data: &[u8]) -> Option<ContainerFormat> { |