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/matroska.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/matroska.rs')
-rw-r--r-- | remuxer/src/demuxers/matroska.rs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/remuxer/src/demuxers/matroska.rs b/remuxer/src/demuxers/matroska.rs index 6301f15..b70054d 100644 --- a/remuxer/src/demuxers/matroska.rs +++ b/remuxer/src/demuxers/matroska.rs @@ -7,7 +7,7 @@ use crate::demuxers::{Demuxer, DemuxerNew, ReadSeek}; use anyhow::{Context, Result, anyhow, bail}; use log::debug; -use std::io::{BufReader, Read, Seek, SeekFrom}; +use std::io::{BufReader, ErrorKind, Read, Seek, SeekFrom}; use winter_ebml::{Ebml, EbmlHeader, VintReadExt, read_vint_slice}; use winter_matroska::{ Attachments, Chapters, Cluster, Cues, Info, MatroskaFile, SeekHead, Segment, Tags, Tracks, @@ -47,6 +47,7 @@ impl MatroskaDemuxer { if !matches!(header.doc_type.as_str(), "matroska" | "webm") { bail!("file is {:?} but not matroska/webm", header.doc_type) } + eprintln!("{header:?}"); if header.ebml_max_id_length != 4 { bail!( "file has invalid EBMLMaxIDLength of {}", @@ -156,8 +157,10 @@ impl MatroskaDemuxer { } } impl Demuxer for MatroskaDemuxer { - fn info(&mut self) -> Result<Option<Info>> { - self.read_segment_tag("Info", Segment::TAG_INFO) + fn info(&mut self) -> Result<Info> { + Ok(self + .read_segment_tag("Info", Segment::TAG_INFO)? + .ok_or(anyhow!("info missing"))?) } fn tracks(&mut self) -> Result<Option<Tracks>> { self.read_segment_tag("Tracks", Segment::TAG_TRACKS) @@ -187,7 +190,11 @@ impl Demuxer for MatroskaDemuxer { loop { let position = self.reader.stream_position()?; // TODO handle eof - let tag = self.reader.read_vint()?; + let tag = match self.reader.read_vint() { + Ok(val) => val, + Err(e) if e.kind() == ErrorKind::UnexpectedEof => return Ok(None), + Err(e) => return Err(e.into()), + }; let size = self.reader.read_vint()?; if tag != Segment::TAG_CLUSTERS { self.reader.seek_relative(size as i64)?; |