aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/demuxers/matroska.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/demuxers/matroska.rs')
-rw-r--r--remuxer/src/demuxers/matroska.rs25
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)
}