diff options
Diffstat (limited to 'remuxer/src/demuxers/matroska.rs')
-rw-r--r-- | remuxer/src/demuxers/matroska.rs | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/remuxer/src/demuxers/matroska.rs b/remuxer/src/demuxers/matroska.rs index 000970e..6301f15 100644 --- a/remuxer/src/demuxers/matroska.rs +++ b/remuxer/src/demuxers/matroska.rs @@ -141,32 +141,37 @@ impl MatroskaDemuxer { self.reader.read_exact(&mut buffer)?; Ok(Tag::read(&buffer)?) } - pub fn read_segment_tag<Tag: Ebml>(&mut self, name: &'static str, tag: u64) -> Result<Tag> { + pub fn read_segment_tag<Tag: Ebml>( + &mut self, + name: &'static str, + tag: u64, + ) -> Result<Option<Tag>> { debug!("reading {name:?}"); - let size = self - .seek_to_segment_tag(tag)? - .ok_or(anyhow!("{name} tag missing"))?; + let Some(size) = self.seek_to_segment_tag(tag)? else { + return Ok(None); + }; self.read_tag(size) .context(anyhow!("parsing {name} failed")) + .map(Some) } } impl Demuxer for MatroskaDemuxer { - fn info(&mut self) -> Result<Info> { + fn info(&mut self) -> Result<Option<Info>> { self.read_segment_tag("Info", Segment::TAG_INFO) } - fn tracks(&mut self) -> Result<Tracks> { + fn tracks(&mut self) -> Result<Option<Tracks>> { self.read_segment_tag("Tracks", Segment::TAG_TRACKS) } - fn chapters(&mut self) -> Result<Chapters> { + fn chapters(&mut self) -> Result<Option<Chapters>> { self.read_segment_tag("Chapters", Segment::TAG_CHAPTERS) } - fn attachments(&mut self) -> Result<Attachments> { + fn attachments(&mut self) -> Result<Option<Attachments>> { self.read_segment_tag("Attachments", Segment::TAG_ATTACHMENTS) } - fn tags(&mut self) -> Result<Tags> { + fn tags(&mut self) -> Result<Option<Tags>> { self.read_segment_tag("Tags", Segment::TAG_TAGS) } - fn cues(&mut self) -> Result<Cues> { + fn cues(&mut self) -> Result<Option<Cues>> { self.read_segment_tag("Cues", Segment::TAG_CUES) } |