From 4b88f0459e576092300a8e0b7dbe3a0eb97c0fbd Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Fri, 14 Jul 2023 16:53:49 -0400 Subject: [PATCH] fix(trex): write trexbox and make it a vec --- src/mp4box/moov.rs | 1 - src/mp4box/mvex.rs | 21 ++++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index 872ec7f..cec21c6 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -140,7 +140,6 @@ impl WriteBox<&mut W> for MoovBox { for trak in self.traks.iter() { trak.write_box(writer)?; } - if let Some(udta) = &self.udta { udta.write_box(writer)?; } diff --git a/src/mp4box/mvex.rs b/src/mp4box/mvex.rs index 8eb0e53..44a4f19 100644 --- a/src/mp4box/mvex.rs +++ b/src/mp4box/mvex.rs @@ -7,8 +7,7 @@ use crate::mp4box::{mehd::MehdBox, trex::TrexBox}; #[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MvexBox { pub mehd: Option, - // todo: this should be a vec - pub trex: TrexBox, + pub trex: Vec, } impl MvexBox { @@ -17,7 +16,8 @@ impl MvexBox { } pub fn get_size(&self) -> u64 { - HEADER_SIZE + self.mehd.as_ref().map(|x| x.box_size()).unwrap_or(0) + self.trex.box_size() + let trex_sizes = self.trex.iter().fold(0, |acc, x| acc + x.box_size()); + HEADER_SIZE + self.mehd.as_ref().map(|x| x.box_size()).unwrap_or(0) + trex_sizes } } @@ -45,7 +45,7 @@ impl ReadBox<&mut R> for MvexBox { let start = box_start(reader)?; let mut mehd = None; - let mut trex = None; + let mut trex: Vec = Vec::new(); let mut current = reader.stream_position()?; let end = start + size; @@ -64,7 +64,7 @@ impl ReadBox<&mut R> for MvexBox { mehd = Some(MehdBox::read_box(reader, s)?); } BoxType::TrexBox => { - trex = Some(TrexBox::read_box(reader, s)?); + trex.push(TrexBox::read_box(reader, s)?); } _ => { // XXX warn!() @@ -75,16 +75,13 @@ impl ReadBox<&mut R> for MvexBox { current = reader.stream_position()?; } - if trex.is_none() { + if trex.is_empty() { return Err(Error::BoxNotFound(BoxType::TrexBox)); } skip_bytes_to(reader, start + size)?; - Ok(MvexBox { - mehd, - trex: trex.unwrap(), - }) + Ok(MvexBox { mehd, trex }) } } @@ -96,7 +93,9 @@ impl WriteBox<&mut W> for MvexBox { if let Some(mehd) = &self.mehd { mehd.write_box(writer)?; } - self.trex.write_box(writer)?; + for trex in self.trex { + trex.write_box(writer)?; + } Ok(size) }