aboutsummaryrefslogtreecommitdiff
path: root/remuxer
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-11-09 14:04:31 +0100
committermetamuffin <metamuffin@disroot.org>2025-11-09 14:04:31 +0100
commit6032bfd0fa7cfd10d1bc17e44f91a789aa86efad (patch)
treeb7f85157a39ad5a16a09c17f238594cc76405f78 /remuxer
parentea06e23a7fd3160f41da9aadec2229dc4dc47e37 (diff)
downloadjellything-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.rs5
-rw-r--r--remuxer/src/demuxers/flac.rs6
-rw-r--r--remuxer/src/magic.rs12
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> {