From 6a6e746c3f827e439d3dc4dbe41d2b2037973f49 Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 09:47:17 -0400 Subject: [PATCH 1/8] wip(mp4box): bin adding box for opus --- src/mp4box/mod.rs | 4 +++- src/mp4box/soun.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/mp4box/soun.rs diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 0af14b5f..f2762225 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -86,6 +86,7 @@ pub(crate) mod mp4a; pub(crate) mod mvex; pub(crate) mod mvhd; pub(crate) mod smhd; +pub(crate) mod soun; pub(crate) mod stbl; pub(crate) mod stco; pub(crate) mod stsc; @@ -198,7 +199,8 @@ boxtype! { DayBox => 0xa9646179, CovrBox => 0x636f7672, DescBox => 0x64657363, - WideBox => 0x77696465 + WideBox => 0x77696465, + SounBox => 0x736F756E } pub trait Mp4Box: Sized { diff --git a/src/mp4box/soun.rs b/src/mp4box/soun.rs new file mode 100644 index 00000000..e2b79c9f --- /dev/null +++ b/src/mp4box/soun.rs @@ -0,0 +1,32 @@ +use serde::Serialize; + +use crate::mp4box::*; + +// for opus +// https://opus-codec.org/docs/opus_in_isobmff.html +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] +pub struct SounBox {} + +impl Default for SounBox { + fn default() -> Self { + Self {} + } +} + +impl Mp4Box for SounBox { + fn box_type(&self) -> BoxType { + BoxType::SounBox + } + + fn box_size(&self) -> u64 { + todo!() + } + + fn to_json(&self) -> Result { + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) + } + + fn summary(&self) -> Result { + todo!() + } +} From 3e23adae7fd0d3a8b4e6e85d70800b06c4feb319 Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 09:49:32 -0400 Subject: [PATCH 2/8] fix(mp4box): remove unwrap() in to_json() for Mp4Box implementation. --- src/mp4box/avc1.rs | 4 ++-- src/mp4box/co64.rs | 2 +- src/mp4box/ctts.rs | 2 +- src/mp4box/data.rs | 2 +- src/mp4box/dinf.rs | 6 +++--- src/mp4box/edts.rs | 2 +- src/mp4box/elst.rs | 2 +- src/mp4box/emsg.rs | 2 +- src/mp4box/ftyp.rs | 2 +- src/mp4box/hdlr.rs | 2 +- src/mp4box/hev1.rs | 4 ++-- src/mp4box/ilst.rs | 2 +- src/mp4box/mdhd.rs | 2 +- src/mp4box/mdia.rs | 2 +- src/mp4box/mehd.rs | 2 +- src/mp4box/meta.rs | 2 +- src/mp4box/mfhd.rs | 2 +- src/mp4box/minf.rs | 2 +- src/mp4box/moof.rs | 2 +- src/mp4box/moov.rs | 2 +- src/mp4box/mp4a.rs | 4 ++-- src/mp4box/mvex.rs | 2 +- src/mp4box/mvhd.rs | 2 +- src/mp4box/smhd.rs | 2 +- src/mp4box/stbl.rs | 2 +- src/mp4box/stco.rs | 2 +- src/mp4box/stsc.rs | 2 +- src/mp4box/stsd.rs | 2 +- src/mp4box/stss.rs | 2 +- src/mp4box/stsz.rs | 2 +- src/mp4box/stts.rs | 2 +- src/mp4box/tfdt.rs | 2 +- src/mp4box/tfhd.rs | 2 +- src/mp4box/tkhd.rs | 2 +- src/mp4box/traf.rs | 2 +- src/mp4box/trak.rs | 2 +- src/mp4box/trex.rs | 2 +- src/mp4box/trun.rs | 2 +- src/mp4box/tx3g.rs | 2 +- src/mp4box/udta.rs | 2 +- src/mp4box/vmhd.rs | 2 +- src/mp4box/vp09.rs | 2 +- src/mp4box/vpcc.rs | 2 +- 43 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/mp4box/avc1.rs b/src/mp4box/avc1.rs index 71741228..7226d5d9 100644 --- a/src/mp4box/avc1.rs +++ b/src/mp4box/avc1.rs @@ -68,7 +68,7 @@ impl Mp4Box for Avc1Box { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { @@ -200,7 +200,7 @@ impl Mp4Box for AvcCBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/co64.rs b/src/mp4box/co64.rs index 978137e9..c6f77d30 100644 --- a/src/mp4box/co64.rs +++ b/src/mp4box/co64.rs @@ -34,7 +34,7 @@ impl Mp4Box for Co64Box { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/ctts.rs b/src/mp4box/ctts.rs index 673e8c92..7316c9b0 100644 --- a/src/mp4box/ctts.rs +++ b/src/mp4box/ctts.rs @@ -40,7 +40,7 @@ impl Mp4Box for CttsBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/data.rs b/src/mp4box/data.rs index 19b5c77c..f49631e8 100644 --- a/src/mp4box/data.rs +++ b/src/mp4box/data.rs @@ -37,7 +37,7 @@ impl Mp4Box for DataBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/dinf.rs b/src/mp4box/dinf.rs index 46698c98..ad78a0f7 100644 --- a/src/mp4box/dinf.rs +++ b/src/mp4box/dinf.rs @@ -28,7 +28,7 @@ impl Mp4Box for DinfBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { @@ -132,7 +132,7 @@ impl Mp4Box for DrefBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { @@ -249,7 +249,7 @@ impl Mp4Box for UrlBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/edts.rs b/src/mp4box/edts.rs index 9077bb17..5ab5962a 100644 --- a/src/mp4box/edts.rs +++ b/src/mp4box/edts.rs @@ -37,7 +37,7 @@ impl Mp4Box for EdtsBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/elst.rs b/src/mp4box/elst.rs index 297fb63a..79267e56 100644 --- a/src/mp4box/elst.rs +++ b/src/mp4box/elst.rs @@ -48,7 +48,7 @@ impl Mp4Box for ElstBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/emsg.rs b/src/mp4box/emsg.rs index f68ba3af..c03bcae8 100644 --- a/src/mp4box/emsg.rs +++ b/src/mp4box/emsg.rs @@ -49,7 +49,7 @@ impl Mp4Box for EmsgBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/ftyp.rs b/src/mp4box/ftyp.rs index 789cd4ef..36c8e360 100644 --- a/src/mp4box/ftyp.rs +++ b/src/mp4box/ftyp.rs @@ -31,7 +31,7 @@ impl Mp4Box for FtypBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/hdlr.rs b/src/mp4box/hdlr.rs index 1ff559e0..99455ceb 100644 --- a/src/mp4box/hdlr.rs +++ b/src/mp4box/hdlr.rs @@ -32,7 +32,7 @@ impl Mp4Box for HdlrBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/hev1.rs b/src/mp4box/hev1.rs index 3a8cfead..c0731c6e 100644 --- a/src/mp4box/hev1.rs +++ b/src/mp4box/hev1.rs @@ -68,7 +68,7 @@ impl Mp4Box for Hev1Box { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { @@ -181,7 +181,7 @@ impl Mp4Box for HvcCBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/ilst.rs b/src/mp4box/ilst.rs index d0292a31..5de336af 100644 --- a/src/mp4box/ilst.rs +++ b/src/mp4box/ilst.rs @@ -37,7 +37,7 @@ impl Mp4Box for IlstBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mdhd.rs b/src/mp4box/mdhd.rs index 31c65a80..ee4e753e 100644 --- a/src/mp4box/mdhd.rs +++ b/src/mp4box/mdhd.rs @@ -58,7 +58,7 @@ impl Mp4Box for MdhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mdia.rs b/src/mp4box/mdia.rs index 423bf72e..3d1e1599 100644 --- a/src/mp4box/mdia.rs +++ b/src/mp4box/mdia.rs @@ -31,7 +31,7 @@ impl Mp4Box for MdiaBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mehd.rs b/src/mp4box/mehd.rs index 63c0246e..0bab2a5d 100644 --- a/src/mp4box/mehd.rs +++ b/src/mp4box/mehd.rs @@ -38,7 +38,7 @@ impl Mp4Box for MehdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/meta.rs b/src/mp4box/meta.rs index df57c775..a3fe74d5 100644 --- a/src/mp4box/meta.rs +++ b/src/mp4box/meta.rs @@ -57,7 +57,7 @@ impl Mp4Box for MetaBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mfhd.rs b/src/mp4box/mfhd.rs index 7bc2f724..067aa222 100644 --- a/src/mp4box/mfhd.rs +++ b/src/mp4box/mfhd.rs @@ -41,7 +41,7 @@ impl Mp4Box for MfhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/minf.rs b/src/mp4box/minf.rs index 5ea853b4..2ec88786 100644 --- a/src/mp4box/minf.rs +++ b/src/mp4box/minf.rs @@ -45,7 +45,7 @@ impl Mp4Box for MinfBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/moof.rs b/src/mp4box/moof.rs index 20c35653..89bcf518 100644 --- a/src/mp4box/moof.rs +++ b/src/mp4box/moof.rs @@ -36,7 +36,7 @@ impl Mp4Box for MoofBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index ac19381a..194c9ae0 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -52,7 +52,7 @@ impl Mp4Box for MoovBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mp4a.rs b/src/mp4box/mp4a.rs index e4d6a45c..e6c2a636 100644 --- a/src/mp4box/mp4a.rs +++ b/src/mp4box/mp4a.rs @@ -61,7 +61,7 @@ impl Mp4Box for Mp4aBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { @@ -170,7 +170,7 @@ impl Mp4Box for EsdsBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mvex.rs b/src/mp4box/mvex.rs index 8be683b8..31a9eabd 100644 --- a/src/mp4box/mvex.rs +++ b/src/mp4box/mvex.rs @@ -30,7 +30,7 @@ impl Mp4Box for MvexBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/mvhd.rs b/src/mp4box/mvhd.rs index 462a29b3..d0593b17 100644 --- a/src/mp4box/mvhd.rs +++ b/src/mp4box/mvhd.rs @@ -67,7 +67,7 @@ impl Mp4Box for MvhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/smhd.rs b/src/mp4box/smhd.rs index cab7e4bb..f0a34c23 100644 --- a/src/mp4box/smhd.rs +++ b/src/mp4box/smhd.rs @@ -43,7 +43,7 @@ impl Mp4Box for SmhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stbl.rs b/src/mp4box/stbl.rs index ef8433b4..46199c12 100644 --- a/src/mp4box/stbl.rs +++ b/src/mp4box/stbl.rs @@ -64,7 +64,7 @@ impl Mp4Box for StblBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stco.rs b/src/mp4box/stco.rs index a00da8f9..daa37e0b 100644 --- a/src/mp4box/stco.rs +++ b/src/mp4box/stco.rs @@ -34,7 +34,7 @@ impl Mp4Box for StcoBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stsc.rs b/src/mp4box/stsc.rs index e5b444ef..25d75bcb 100644 --- a/src/mp4box/stsc.rs +++ b/src/mp4box/stsc.rs @@ -42,7 +42,7 @@ impl Mp4Box for StscBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stsd.rs b/src/mp4box/stsd.rs index af947c6c..635ac892 100644 --- a/src/mp4box/stsd.rs +++ b/src/mp4box/stsd.rs @@ -59,7 +59,7 @@ impl Mp4Box for StsdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stss.rs b/src/mp4box/stss.rs index dd9e552f..11b8d330 100644 --- a/src/mp4box/stss.rs +++ b/src/mp4box/stss.rs @@ -34,7 +34,7 @@ impl Mp4Box for StssBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stsz.rs b/src/mp4box/stsz.rs index b07e7653..38855df2 100644 --- a/src/mp4box/stsz.rs +++ b/src/mp4box/stsz.rs @@ -36,7 +36,7 @@ impl Mp4Box for StszBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/stts.rs b/src/mp4box/stts.rs index 82de6c50..66e76e54 100644 --- a/src/mp4box/stts.rs +++ b/src/mp4box/stts.rs @@ -40,7 +40,7 @@ impl Mp4Box for SttsBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/tfdt.rs b/src/mp4box/tfdt.rs index ef928899..68e55e9e 100644 --- a/src/mp4box/tfdt.rs +++ b/src/mp4box/tfdt.rs @@ -37,7 +37,7 @@ impl Mp4Box for TfdtBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/tfhd.rs b/src/mp4box/tfhd.rs index e67e5cb3..bc51684c 100644 --- a/src/mp4box/tfhd.rs +++ b/src/mp4box/tfhd.rs @@ -58,7 +58,7 @@ impl Mp4Box for TfhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/tkhd.rs b/src/mp4box/tkhd.rs index d7bcfbe0..58b0f6a3 100644 --- a/src/mp4box/tkhd.rs +++ b/src/mp4box/tkhd.rs @@ -126,7 +126,7 @@ impl Mp4Box for TkhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/traf.rs b/src/mp4box/traf.rs index 51f812d8..bdd5ffec 100644 --- a/src/mp4box/traf.rs +++ b/src/mp4box/traf.rs @@ -36,7 +36,7 @@ impl Mp4Box for TrafBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/trak.rs b/src/mp4box/trak.rs index e8ae760f..e0c286a1 100644 --- a/src/mp4box/trak.rs +++ b/src/mp4box/trak.rs @@ -44,7 +44,7 @@ impl Mp4Box for TrakBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/trex.rs b/src/mp4box/trex.rs index 2694fd65..2a458617 100644 --- a/src/mp4box/trex.rs +++ b/src/mp4box/trex.rs @@ -35,7 +35,7 @@ impl Mp4Box for TrexBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/trun.rs b/src/mp4box/trun.rs index efbb2b09..793d53d0 100644 --- a/src/mp4box/trun.rs +++ b/src/mp4box/trun.rs @@ -69,7 +69,7 @@ impl Mp4Box for TrunBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/tx3g.rs b/src/mp4box/tx3g.rs index d6963159..7edcc34d 100644 --- a/src/mp4box/tx3g.rs +++ b/src/mp4box/tx3g.rs @@ -62,7 +62,7 @@ impl Mp4Box for Tx3gBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/udta.rs b/src/mp4box/udta.rs index 9daec179..3fb40b42 100644 --- a/src/mp4box/udta.rs +++ b/src/mp4box/udta.rs @@ -35,7 +35,7 @@ impl Mp4Box for UdtaBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/vmhd.rs b/src/mp4box/vmhd.rs index 31f24b21..3eb8c9fa 100644 --- a/src/mp4box/vmhd.rs +++ b/src/mp4box/vmhd.rs @@ -39,7 +39,7 @@ impl Mp4Box for VmhdBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/vp09.rs b/src/mp4box/vp09.rs index 0f88dd14..099339f7 100644 --- a/src/mp4box/vp09.rs +++ b/src/mp4box/vp09.rs @@ -75,7 +75,7 @@ impl Mp4Box for Vp09Box { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { diff --git a/src/mp4box/vpcc.rs b/src/mp4box/vpcc.rs index c9861c66..f3beaf2a 100644 --- a/src/mp4box/vpcc.rs +++ b/src/mp4box/vpcc.rs @@ -32,7 +32,7 @@ impl Mp4Box for VpccBox { } fn to_json(&self) -> Result { - Ok(serde_json::to_string(&self).unwrap()) + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) } fn summary(&self) -> Result { From ff9e75922b4b3b539ab088be4dc2db922c0a2c9f Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 10:02:42 -0400 Subject: [PATCH 3/8] fix(reader): return Err instead of panic --- src/reader.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reader.rs b/src/reader.rs index 5a39eebb..45c64b17 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -116,8 +116,8 @@ impl Mp4Reader { Ok(Mp4Reader { reader, - ftyp: ftyp.unwrap(), - moov: moov.unwrap(), + ftyp: ftyp.ok_or(crate::error::Error::BoxNotFound(BoxType::FtypBox))?, + moov: moov.ok_or(crate::error::Error::BoxNotFound(BoxType::MoovBox))?, moofs, emsgs, size, From 0fdd2d16b49c7576443ea73dd19b5d94f26cb39c Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 11:52:19 -0400 Subject: [PATCH 4/8] chore(Mp4Box): use a trait function for to_json --- src/mp4box/avc1.rs | 8 -------- src/mp4box/co64.rs | 4 ---- src/mp4box/ctts.rs | 4 ---- src/mp4box/data.rs | 4 ---- src/mp4box/dinf.rs | 12 ------------ src/mp4box/edts.rs | 4 ---- src/mp4box/elst.rs | 4 ---- src/mp4box/emsg.rs | 4 ---- src/mp4box/ftyp.rs | 4 ---- src/mp4box/hdlr.rs | 4 ---- src/mp4box/hev1.rs | 8 -------- src/mp4box/ilst.rs | 4 ---- src/mp4box/mdhd.rs | 4 ---- src/mp4box/mdia.rs | 4 ---- src/mp4box/mehd.rs | 4 ---- src/mp4box/meta.rs | 4 ---- src/mp4box/mfhd.rs | 4 ---- src/mp4box/minf.rs | 4 ---- src/mp4box/mod.rs | 8 +++++++- src/mp4box/moof.rs | 4 ---- src/mp4box/moov.rs | 4 ---- src/mp4box/mp4a.rs | 8 -------- src/mp4box/mvex.rs | 4 ---- src/mp4box/mvhd.rs | 4 ---- src/mp4box/smhd.rs | 4 ---- src/mp4box/soun.rs | 4 ---- src/mp4box/stbl.rs | 4 ---- src/mp4box/stco.rs | 4 ---- src/mp4box/stsc.rs | 4 ---- src/mp4box/stsd.rs | 4 ---- src/mp4box/stss.rs | 4 ---- src/mp4box/stsz.rs | 4 ---- src/mp4box/stts.rs | 4 ---- src/mp4box/tfdt.rs | 4 ---- src/mp4box/tfhd.rs | 4 ---- src/mp4box/tkhd.rs | 4 ---- src/mp4box/traf.rs | 4 ---- src/mp4box/trak.rs | 4 ---- src/mp4box/trex.rs | 4 ---- src/mp4box/trun.rs | 4 ---- src/mp4box/tx3g.rs | 4 ---- src/mp4box/udta.rs | 4 ---- src/mp4box/vmhd.rs | 4 ---- src/mp4box/vp09.rs | 4 ---- src/mp4box/vpcc.rs | 4 ---- 45 files changed, 7 insertions(+), 197 deletions(-) diff --git a/src/mp4box/avc1.rs b/src/mp4box/avc1.rs index 7226d5d9..b2a514fe 100644 --- a/src/mp4box/avc1.rs +++ b/src/mp4box/avc1.rs @@ -67,10 +67,6 @@ impl Mp4Box for Avc1Box { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "data_reference_index={} width={} height={} frame_count={}", @@ -199,10 +195,6 @@ impl Mp4Box for AvcCBox { size } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("avc_profile_indication={}", self.avc_profile_indication); Ok(s) diff --git a/src/mp4box/co64.rs b/src/mp4box/co64.rs index c6f77d30..4ab94fff 100644 --- a/src/mp4box/co64.rs +++ b/src/mp4box/co64.rs @@ -33,10 +33,6 @@ impl Mp4Box for Co64Box { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries_count={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/ctts.rs b/src/mp4box/ctts.rs index 7316c9b0..7bad066e 100644 --- a/src/mp4box/ctts.rs +++ b/src/mp4box/ctts.rs @@ -39,10 +39,6 @@ impl Mp4Box for CttsBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries_count={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/data.rs b/src/mp4box/data.rs index f49631e8..79ef769a 100644 --- a/src/mp4box/data.rs +++ b/src/mp4box/data.rs @@ -36,10 +36,6 @@ impl Mp4Box for DataBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("type={:?} len={}", self.data_type, self.data.len()); Ok(s) diff --git a/src/mp4box/dinf.rs b/src/mp4box/dinf.rs index ad78a0f7..a6943c70 100644 --- a/src/mp4box/dinf.rs +++ b/src/mp4box/dinf.rs @@ -27,10 +27,6 @@ impl Mp4Box for DinfBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) @@ -131,10 +127,6 @@ impl Mp4Box for DrefBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) @@ -248,10 +240,6 @@ impl Mp4Box for UrlBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("location={}", self.location); Ok(s) diff --git a/src/mp4box/edts.rs b/src/mp4box/edts.rs index 5ab5962a..22f43ee7 100644 --- a/src/mp4box/edts.rs +++ b/src/mp4box/edts.rs @@ -36,10 +36,6 @@ impl Mp4Box for EdtsBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/elst.rs b/src/mp4box/elst.rs index 79267e56..1182e2a8 100644 --- a/src/mp4box/elst.rs +++ b/src/mp4box/elst.rs @@ -47,10 +47,6 @@ impl Mp4Box for ElstBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("elst_entries={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/emsg.rs b/src/mp4box/emsg.rs index c03bcae8..921dd4d8 100644 --- a/src/mp4box/emsg.rs +++ b/src/mp4box/emsg.rs @@ -48,10 +48,6 @@ impl Mp4Box for EmsgBox { + self.message_data.len() as u64 } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("id={} value={}", self.id, self.value); Ok(s) diff --git a/src/mp4box/ftyp.rs b/src/mp4box/ftyp.rs index 36c8e360..dd35bb5a 100644 --- a/src/mp4box/ftyp.rs +++ b/src/mp4box/ftyp.rs @@ -30,10 +30,6 @@ impl Mp4Box for FtypBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let mut compatible_brands = Vec::new(); for brand in self.compatible_brands.iter() { diff --git a/src/mp4box/hdlr.rs b/src/mp4box/hdlr.rs index 99455ceb..b5d9f5b1 100644 --- a/src/mp4box/hdlr.rs +++ b/src/mp4box/hdlr.rs @@ -31,10 +31,6 @@ impl Mp4Box for HdlrBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("handler_type={} name={}", self.handler_type, self.name); Ok(s) diff --git a/src/mp4box/hev1.rs b/src/mp4box/hev1.rs index c0731c6e..4472addb 100644 --- a/src/mp4box/hev1.rs +++ b/src/mp4box/hev1.rs @@ -67,10 +67,6 @@ impl Mp4Box for Hev1Box { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "data_reference_index={} width={} height={} frame_count={}", @@ -180,10 +176,6 @@ impl Mp4Box for HvcCBox { HEADER_SIZE + 1 } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("configuration_version={}", self.configuration_version); Ok(s) diff --git a/src/mp4box/ilst.rs b/src/mp4box/ilst.rs index 5de336af..9336b902 100644 --- a/src/mp4box/ilst.rs +++ b/src/mp4box/ilst.rs @@ -36,10 +36,6 @@ impl Mp4Box for IlstBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("item_count={}", self.items.len()); Ok(s) diff --git a/src/mp4box/mdhd.rs b/src/mp4box/mdhd.rs index ee4e753e..bd63a875 100644 --- a/src/mp4box/mdhd.rs +++ b/src/mp4box/mdhd.rs @@ -57,10 +57,6 @@ impl Mp4Box for MdhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "creation_time={} timescale={} duration={} language={}", diff --git a/src/mp4box/mdia.rs b/src/mp4box/mdia.rs index 3d1e1599..ea4d647b 100644 --- a/src/mp4box/mdia.rs +++ b/src/mp4box/mdia.rs @@ -30,10 +30,6 @@ impl Mp4Box for MdiaBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/mehd.rs b/src/mp4box/mehd.rs index 0bab2a5d..72db38a4 100644 --- a/src/mp4box/mehd.rs +++ b/src/mp4box/mehd.rs @@ -37,10 +37,6 @@ impl Mp4Box for MehdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("fragment_duration={}", self.fragment_duration); Ok(s) diff --git a/src/mp4box/meta.rs b/src/mp4box/meta.rs index a3fe74d5..ad441204 100644 --- a/src/mp4box/meta.rs +++ b/src/mp4box/meta.rs @@ -56,10 +56,6 @@ impl Mp4Box for MetaBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = match self { Self::Mdir { .. } => "hdlr=ilst".to_string(), diff --git a/src/mp4box/mfhd.rs b/src/mp4box/mfhd.rs index 067aa222..f1b0f9f9 100644 --- a/src/mp4box/mfhd.rs +++ b/src/mp4box/mfhd.rs @@ -40,10 +40,6 @@ impl Mp4Box for MfhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("sequence_number={}", self.sequence_number); Ok(s) diff --git a/src/mp4box/minf.rs b/src/mp4box/minf.rs index 2ec88786..6eb561fc 100644 --- a/src/mp4box/minf.rs +++ b/src/mp4box/minf.rs @@ -44,10 +44,6 @@ impl Mp4Box for MinfBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index f2762225..19578b17 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -57,6 +57,7 @@ //! use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; +use serde::Serialize; use std::convert::TryInto; use std::io::{Read, Seek, SeekFrom, Write}; @@ -206,7 +207,12 @@ boxtype! { pub trait Mp4Box: Sized { fn box_type(&self) -> BoxType; fn box_size(&self) -> u64; - fn to_json(&self) -> Result; + fn to_json(&self) -> Result + where + Self: Serialize, + { + serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) + } fn summary(&self) -> Result; } diff --git a/src/mp4box/moof.rs b/src/mp4box/moof.rs index 89bcf518..e90c1f50 100644 --- a/src/mp4box/moof.rs +++ b/src/mp4box/moof.rs @@ -35,10 +35,6 @@ impl Mp4Box for MoofBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("trafs={}", self.trafs.len()); Ok(s) diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index 194c9ae0..70578d97 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -51,10 +51,6 @@ impl Mp4Box for MoovBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("traks={}", self.traks.len()); Ok(s) diff --git a/src/mp4box/mp4a.rs b/src/mp4box/mp4a.rs index e6c2a636..f8f411d5 100644 --- a/src/mp4box/mp4a.rs +++ b/src/mp4box/mp4a.rs @@ -60,10 +60,6 @@ impl Mp4Box for Mp4aBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "channel_count={} sample_size={} sample_rate={}", @@ -169,10 +165,6 @@ impl Mp4Box for EsdsBox { + ESDescriptor::desc_size() as u64 } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { Ok(String::new()) } diff --git a/src/mp4box/mvex.rs b/src/mp4box/mvex.rs index 31a9eabd..6e269f7d 100644 --- a/src/mp4box/mvex.rs +++ b/src/mp4box/mvex.rs @@ -29,10 +29,6 @@ impl Mp4Box for MvexBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/mvhd.rs b/src/mp4box/mvhd.rs index d0593b17..9bcd0db8 100644 --- a/src/mp4box/mvhd.rs +++ b/src/mp4box/mvhd.rs @@ -66,10 +66,6 @@ impl Mp4Box for MvhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "creation_time={} timescale={} duration={} rate={} volume={}, matrix={}, next_track_id={}", diff --git a/src/mp4box/smhd.rs b/src/mp4box/smhd.rs index f0a34c23..bc919e5c 100644 --- a/src/mp4box/smhd.rs +++ b/src/mp4box/smhd.rs @@ -42,10 +42,6 @@ impl Mp4Box for SmhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("balance={}", self.balance.value()); Ok(s) diff --git a/src/mp4box/soun.rs b/src/mp4box/soun.rs index e2b79c9f..b2ddabab 100644 --- a/src/mp4box/soun.rs +++ b/src/mp4box/soun.rs @@ -22,10 +22,6 @@ impl Mp4Box for SounBox { todo!() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { todo!() } diff --git a/src/mp4box/stbl.rs b/src/mp4box/stbl.rs index 46199c12..03dd819a 100644 --- a/src/mp4box/stbl.rs +++ b/src/mp4box/stbl.rs @@ -63,10 +63,6 @@ impl Mp4Box for StblBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/stco.rs b/src/mp4box/stco.rs index daa37e0b..3ce39d9d 100644 --- a/src/mp4box/stco.rs +++ b/src/mp4box/stco.rs @@ -33,10 +33,6 @@ impl Mp4Box for StcoBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/stsc.rs b/src/mp4box/stsc.rs index 25d75bcb..44834e44 100644 --- a/src/mp4box/stsc.rs +++ b/src/mp4box/stsc.rs @@ -41,10 +41,6 @@ impl Mp4Box for StscBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/stsd.rs b/src/mp4box/stsd.rs index 635ac892..9a995bb2 100644 --- a/src/mp4box/stsd.rs +++ b/src/mp4box/stsd.rs @@ -58,10 +58,6 @@ impl Mp4Box for StsdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/stss.rs b/src/mp4box/stss.rs index 11b8d330..f6bed516 100644 --- a/src/mp4box/stss.rs +++ b/src/mp4box/stss.rs @@ -33,10 +33,6 @@ impl Mp4Box for StssBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/stsz.rs b/src/mp4box/stsz.rs index 38855df2..738b98f4 100644 --- a/src/mp4box/stsz.rs +++ b/src/mp4box/stsz.rs @@ -35,10 +35,6 @@ impl Mp4Box for StszBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "sample_size={} sample_count={} sample_sizes={}", diff --git a/src/mp4box/stts.rs b/src/mp4box/stts.rs index 66e76e54..9eab5062 100644 --- a/src/mp4box/stts.rs +++ b/src/mp4box/stts.rs @@ -39,10 +39,6 @@ impl Mp4Box for SttsBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("entries={}", self.entries.len()); Ok(s) diff --git a/src/mp4box/tfdt.rs b/src/mp4box/tfdt.rs index 68e55e9e..aa2d5ef9 100644 --- a/src/mp4box/tfdt.rs +++ b/src/mp4box/tfdt.rs @@ -36,10 +36,6 @@ impl Mp4Box for TfdtBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("base_media_decode_time={}", self.base_media_decode_time); Ok(s) diff --git a/src/mp4box/tfhd.rs b/src/mp4box/tfhd.rs index bc51684c..10b8d86b 100644 --- a/src/mp4box/tfhd.rs +++ b/src/mp4box/tfhd.rs @@ -57,10 +57,6 @@ impl Mp4Box for TfhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("track_id={}", self.track_id); Ok(s) diff --git a/src/mp4box/tkhd.rs b/src/mp4box/tkhd.rs index 58b0f6a3..56063b25 100644 --- a/src/mp4box/tkhd.rs +++ b/src/mp4box/tkhd.rs @@ -125,10 +125,6 @@ impl Mp4Box for TkhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "creation_time={} track_id={} duration={} layer={} volume={} matrix={} width={} height={}", diff --git a/src/mp4box/traf.rs b/src/mp4box/traf.rs index bdd5ffec..2c212903 100644 --- a/src/mp4box/traf.rs +++ b/src/mp4box/traf.rs @@ -35,10 +35,6 @@ impl Mp4Box for TrafBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/trak.rs b/src/mp4box/trak.rs index e0c286a1..40b06b4f 100644 --- a/src/mp4box/trak.rs +++ b/src/mp4box/trak.rs @@ -43,10 +43,6 @@ impl Mp4Box for TrakBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = String::new(); Ok(s) diff --git a/src/mp4box/trex.rs b/src/mp4box/trex.rs index 2a458617..8cbc6e94 100644 --- a/src/mp4box/trex.rs +++ b/src/mp4box/trex.rs @@ -34,10 +34,6 @@ impl Mp4Box for TrexBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "track_id={} default_sample_duration={}", diff --git a/src/mp4box/trun.rs b/src/mp4box/trun.rs index 793d53d0..444bf9cd 100644 --- a/src/mp4box/trun.rs +++ b/src/mp4box/trun.rs @@ -68,10 +68,6 @@ impl Mp4Box for TrunBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("sample_size={}", self.sample_count); Ok(s) diff --git a/src/mp4box/tx3g.rs b/src/mp4box/tx3g.rs index 7edcc34d..ef009009 100644 --- a/src/mp4box/tx3g.rs +++ b/src/mp4box/tx3g.rs @@ -61,10 +61,6 @@ impl Mp4Box for Tx3gBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!("data_reference_index={} horizontal_justification={} vertical_justification={} rgba={}{}{}{}", self.data_reference_index, self.horizontal_justification, diff --git a/src/mp4box/udta.rs b/src/mp4box/udta.rs index 3fb40b42..aedce92d 100644 --- a/src/mp4box/udta.rs +++ b/src/mp4box/udta.rs @@ -34,10 +34,6 @@ impl Mp4Box for UdtaBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { Ok(String::new()) } diff --git a/src/mp4box/vmhd.rs b/src/mp4box/vmhd.rs index 3eb8c9fa..e13df770 100644 --- a/src/mp4box/vmhd.rs +++ b/src/mp4box/vmhd.rs @@ -38,10 +38,6 @@ impl Mp4Box for VmhdBox { self.get_size() } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { let s = format!( "graphics_mode={} op_color={}{}{}", diff --git a/src/mp4box/vp09.rs b/src/mp4box/vp09.rs index 099339f7..e3e95bc5 100644 --- a/src/mp4box/vp09.rs +++ b/src/mp4box/vp09.rs @@ -74,10 +74,6 @@ impl Mp4Box for Vp09Box { 0x6A } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { Ok(format!("{self:?}")) } diff --git a/src/mp4box/vpcc.rs b/src/mp4box/vpcc.rs index f3beaf2a..520ec29a 100644 --- a/src/mp4box/vpcc.rs +++ b/src/mp4box/vpcc.rs @@ -31,10 +31,6 @@ impl Mp4Box for VpccBox { HEADER_SIZE + HEADER_EXT_SIZE + 8 } - fn to_json(&self) -> Result { - serde_json::to_string(&self).map_err(|e| crate::error::Error::IoError(e.into())) - } - fn summary(&self) -> Result { Ok(format!("{self:?}")) } From 12dac2e0eeee436417d17d061cd69dd832c6aa6b Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 13:08:10 -0400 Subject: [PATCH 5/8] remove more calls to unwrap. --- src/error.rs | 2 + src/mp4box/dinf.rs | 10 +---- src/mp4box/emsg.rs | 8 +++- src/mp4box/ilst.rs | 10 +---- src/mp4box/mdia.rs | 18 ++------- src/mp4box/minf.rs | 12 ++---- src/mp4box/mod.rs | 8 +++- src/mp4box/moof.rs | 11 +----- src/mp4box/moov.rs | 8 +--- src/track.rs | 93 +++++++++++++++++++++++++++++++++------------- 10 files changed, 98 insertions(+), 82 deletions(-) diff --git a/src/error.rs b/src/error.rs index 11690f0c..a09b9829 100644 --- a/src/error.rs +++ b/src/error.rs @@ -26,4 +26,6 @@ pub enum Error { EntryInTrunNotFound(u32, BoxType, u32), #[error("{0} version {1} is not supported")] UnsupportedBoxVersion(BoxType, u8), + #[error("{0}")] + GenericError(String), } diff --git a/src/mp4box/dinf.rs b/src/mp4box/dinf.rs index a6943c70..af6fbc2f 100644 --- a/src/mp4box/dinf.rs +++ b/src/mp4box/dinf.rs @@ -64,15 +64,9 @@ impl ReadBox<&mut R> for DinfBox { current = reader.stream_position()?; } - if dref.is_none() { - return Err(Error::BoxNotFound(BoxType::DrefBox)); - } - + let dref = dref.ok_or(Error::BoxNotFound(BoxType::DrefBox))?; skip_bytes_to(reader, start + size)?; - - Ok(DinfBox { - dref: dref.unwrap(), - }) + Ok(DinfBox { dref }) } } diff --git a/src/mp4box/emsg.rs b/src/mp4box/emsg.rs index 921dd4d8..1028ed0a 100644 --- a/src/mp4box/emsg.rs +++ b/src/mp4box/emsg.rs @@ -127,13 +127,17 @@ impl WriteBox<&mut W> for EmsgBox { write_null_terminated_str(writer, &self.scheme_id_uri)?; write_null_terminated_str(writer, &self.value)?; writer.write_u32::(self.timescale)?; - writer.write_u32::(self.presentation_time_delta.unwrap())?; + writer.write_u32::(self.presentation_time_delta.ok_or( + crate::error::Error::InvalidData("presentation_time_delta not found"), + )?)?; writer.write_u32::(self.event_duration)?; writer.write_u32::(self.id)?; } 1 => { writer.write_u32::(self.timescale)?; - writer.write_u64::(self.presentation_time.unwrap())?; + writer.write_u64::(self.presentation_time.ok_or( + crate::error::Error::InvalidData("presentation_time not found"), + )?)?; writer.write_u32::(self.event_duration)?; writer.write_u32::(self.id)?; write_null_terminated_str(writer, &self.scheme_id_uri)?; diff --git a/src/mp4box/ilst.rs b/src/mp4box/ilst.rs index 9336b902..9be03439 100644 --- a/src/mp4box/ilst.rs +++ b/src/mp4box/ilst.rs @@ -149,15 +149,9 @@ impl ReadBox<&mut R> for IlstItemBox { current = reader.stream_position()?; } - if data.is_none() { - return Err(Error::BoxNotFound(BoxType::DataBox)); - } - + let data = data.ok_or(Error::BoxNotFound(BoxType::DataBox))?; skip_bytes_to(reader, start + size)?; - - Ok(IlstItemBox { - data: data.unwrap(), - }) + Ok(IlstItemBox { data }) } } diff --git a/src/mp4box/mdia.rs b/src/mp4box/mdia.rs index ea4d647b..19009168 100644 --- a/src/mp4box/mdia.rs +++ b/src/mp4box/mdia.rs @@ -75,23 +75,13 @@ impl ReadBox<&mut R> for MdiaBox { current = reader.stream_position()?; } - if mdhd.is_none() { - return Err(Error::BoxNotFound(BoxType::MdhdBox)); - } - if hdlr.is_none() { - return Err(Error::BoxNotFound(BoxType::HdlrBox)); - } - if minf.is_none() { - return Err(Error::BoxNotFound(BoxType::MinfBox)); - } + let mdhd = mdhd.ok_or(Error::BoxNotFound(BoxType::MdhdBox))?; + let hdlr = hdlr.ok_or(Error::BoxNotFound(BoxType::HdlrBox))?; + let minf = minf.ok_or(Error::BoxNotFound(BoxType::MinfBox))?; skip_bytes_to(reader, start + size)?; - Ok(MdiaBox { - mdhd: mdhd.unwrap(), - hdlr: hdlr.unwrap(), - minf: minf.unwrap(), - }) + Ok(MdiaBox { mdhd, hdlr, minf }) } } diff --git a/src/mp4box/minf.rs b/src/mp4box/minf.rs index 6eb561fc..20d22a03 100644 --- a/src/mp4box/minf.rs +++ b/src/mp4box/minf.rs @@ -93,20 +93,16 @@ impl ReadBox<&mut R> for MinfBox { current = reader.stream_position()?; } - if dinf.is_none() { - return Err(Error::BoxNotFound(BoxType::DinfBox)); - } - if stbl.is_none() { - return Err(Error::BoxNotFound(BoxType::StblBox)); - } + let dinf = dinf.ok_or(Error::BoxNotFound(BoxType::DinfBox))?; + let stbl = stbl.ok_or(Error::BoxNotFound(BoxType::StblBox))?; skip_bytes_to(reader, start + size)?; Ok(MinfBox { vmhd, smhd, - dinf: dinf.unwrap(), - stbl: stbl.unwrap(), + dinf, + stbl, }) } } diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 19578b17..068f11e4 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -242,11 +242,15 @@ impl BoxHeader { reader.read_exact(&mut buf)?; // Get size. - let s = buf[0..4].try_into().unwrap(); + let s = buf[0..4] + .try_into() + .map_err(|_e| crate::error::Error::InvalidData("could not get slice"))?; let size = u32::from_be_bytes(s); // Get box type string. - let t = buf[4..8].try_into().unwrap(); + let t = buf[4..8] + .try_into() + .map_err(|_e| crate::error::Error::InvalidData("could not get slice"))?; let typ = u32::from_be_bytes(t); // Get largesize if size is 1 diff --git a/src/mp4box/moof.rs b/src/mp4box/moof.rs index e90c1f50..c4839a23 100644 --- a/src/mp4box/moof.rs +++ b/src/mp4box/moof.rs @@ -76,16 +76,9 @@ impl ReadBox<&mut R> for MoofBox { current = reader.stream_position()?; } - if mfhd.is_none() { - return Err(Error::BoxNotFound(BoxType::MfhdBox)); - } - + let mfhd = mfhd.ok_or(Error::BoxNotFound(BoxType::MfhdBox))?; skip_bytes_to(reader, start + size)?; - - Ok(MoofBox { - mfhd: mfhd.unwrap(), - trafs, - }) + Ok(MoofBox { mfhd, trafs }) } } diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index 70578d97..00ef2f93 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -105,14 +105,10 @@ impl ReadBox<&mut R> for MoovBox { current = reader.stream_position()?; } - if mvhd.is_none() { - return Err(Error::BoxNotFound(BoxType::MvhdBox)); - } - + let mvhd = mvhd.ok_or(Error::BoxNotFound(BoxType::MvhdBox))?; skip_bytes_to(reader, start + size)?; - Ok(MoovBox { - mvhd: mvhd.unwrap(), + mvhd, meta, udta, mvex, diff --git a/src/track.rs b/src/track.rs index 472ca1d5..946eba47 100644 --- a/src/track.rs +++ b/src/track.rs @@ -343,7 +343,10 @@ impl Mp4Track { } fn ctts_index(&self, sample_id: u32) -> Result<(usize, u32)> { - let ctts = self.trak.mdia.minf.stbl.ctts.as_ref().unwrap(); + let ctts = self.trak.mdia.minf.stbl.ctts.as_ref().ok_or( + // todo: is this the correct error to return here? + crate::error::Error::BoxNotFound(BoxType::CttsBox), + )?; let mut sample_count: u32 = 1; for (i, entry) in ctts.entries.iter().enumerate() { let next_sample_count = @@ -366,30 +369,36 @@ impl Mp4Track { } /// return `(traf_idx, sample_idx_in_trun)` - fn find_traf_idx_and_sample_idx(&self, sample_id: u32) -> Option<(usize, usize)> { + fn find_traf_idx_and_sample_idx(&self, sample_id: u32) -> Result> { let global_idx = sample_id - 1; let mut offset = 0; for traf_idx in 0..self.trafs.len() { if let Some(trun) = &self.trafs[traf_idx].trun { let sample_count = trun.sample_count; if sample_count > (global_idx - offset) { - return Some((traf_idx, (global_idx - offset) as _)); + return Ok(Some((traf_idx, (global_idx - offset) as _))); } - offset = offset - .checked_add(sample_count) - .expect("attempt to sum trun sample_count with overflow"); + offset = + offset + .checked_add(sample_count) + .ok_or(crate::error::Error::InvalidData( + "attempt to sum trun sample_count with overflow", + ))?; } } - None + Ok(None) } fn sample_size(&self, sample_id: u32) -> Result { if !self.trafs.is_empty() { - if let Some((traf_idx, sample_idx)) = self.find_traf_idx_and_sample_idx(sample_id) { + if let Some((traf_idx, sample_idx)) = self.find_traf_idx_and_sample_idx(sample_id)? { if let Some(size) = self.trafs[traf_idx] .trun .as_ref() - .unwrap() + .ok_or(crate::error::Error::BoxInTrafNotFound( + traf_idx as u32, + BoxType::TrunBox, + ))? .sample_sizes .get(sample_idx) { @@ -436,7 +445,7 @@ impl Mp4Track { fn sample_offset(&self, sample_id: u32) -> Result { if !self.trafs.is_empty() { - if let Some((traf_idx, _sample_idx)) = self.find_traf_idx_and_sample_idx(sample_id) { + if let Some((traf_idx, _sample_idx)) = self.find_traf_idx_and_sample_idx(sample_id)? { Ok(self.trafs[traf_idx].tfhd.base_data_offset.unwrap_or(0)) } else { Err(Error::BoxInTrafNotFound(self.track_id(), BoxType::TrafBox)) @@ -445,7 +454,13 @@ impl Mp4Track { let stsc_index = self.stsc_index(sample_id)?; let stsc = &self.trak.mdia.minf.stbl.stsc; - let stsc_entry = stsc.entries.get(stsc_index).unwrap(); + let stsc_entry = + stsc.entries + .get(stsc_index) + .ok_or(crate::error::Error::GenericError(format!( + "stsc entry not found for sample_id: {}, stsc_idx: {}", + sample_id, stsc_index + )))?; let first_chunk = stsc_entry.first_chunk; let first_sample = stsc_entry.first_sample; @@ -507,14 +522,19 @@ impl Mp4Track { } } - fn sample_rendering_offset(&self, sample_id: u32) -> i32 { + fn sample_rendering_offset(&self, sample_id: u32) -> Result { if let Some(ref ctts) = self.trak.mdia.minf.stbl.ctts { if let Ok((ctts_index, _)) = self.ctts_index(sample_id) { - let ctts_entry = ctts.entries.get(ctts_index).unwrap(); - return ctts_entry.sample_offset; + let ctts_entry = + ctts.entries + .get(ctts_index) + .ok_or(crate::error::Error::InvalidData( + "ctts not found after ctts_index was returned", + ))?; + return Ok(ctts_entry.sample_offset); } } - 0 + Ok(0) } fn is_sync_sample(&self, sample_id: u32) -> bool { @@ -550,8 +570,8 @@ impl Mp4Track { reader.seek(SeekFrom::Start(sample_offset))?; reader.read_exact(&mut buffer)?; - let (start_time, duration) = self.sample_time(sample_id).unwrap(); // XXX - let rendering_offset = self.sample_rendering_offset(sample_id); + let (start_time, duration) = self.sample_time(sample_id)?; // XXX + let rendering_offset = self.sample_rendering_offset(sample_id)?; let is_sync = self.is_sync_sample(sample_id); Ok(Some(Mp4Sample { @@ -780,9 +800,16 @@ impl Mp4TrackWriter { Ok(self.trak.tkhd.duration) } - fn chunk_count(&self) -> u32 { - let co64 = self.trak.mdia.minf.stbl.co64.as_ref().unwrap(); - co64.entries.len() as u32 + fn chunk_count(&self) -> Result { + let co64 = self + .trak + .mdia + .minf + .stbl + .co64 + .as_ref() + .ok_or(crate::error::Error::BoxNotFound(BoxType::Co64Box))?; + Ok(co64.entries.len() as u32) } fn update_sample_to_chunk(&mut self, chunk_id: u32) { @@ -801,9 +828,17 @@ impl Mp4TrackWriter { self.trak.mdia.minf.stbl.stsc.entries.push(entry); } - fn update_chunk_offsets(&mut self, offset: u64) { - let co64 = self.trak.mdia.minf.stbl.co64.as_mut().unwrap(); + fn update_chunk_offsets(&mut self, offset: u64) -> Result<()> { + let co64 = self + .trak + .mdia + .minf + .stbl + .co64 + .as_mut() + .ok_or(crate::error::Error::BoxNotFound(BoxType::Co64Box))?; co64.entries.push(offset); + Ok(()) } fn write_chunk(&mut self, writer: &mut W) -> Result<()> { @@ -814,8 +849,8 @@ impl Mp4TrackWriter { writer.write_all(&self.chunk_buffer)?; - self.update_sample_to_chunk(self.chunk_count() + 1); - self.update_chunk_offsets(chunk_offset); + self.update_sample_to_chunk(self.chunk_count()? + 1); + self.update_chunk_offsets(chunk_offset)?; self.chunk_buffer.clear(); self.chunk_samples = 0; @@ -848,7 +883,15 @@ impl Mp4TrackWriter { // mp4a.esds.es_desc.dec_config.max_bitrate // mp4a.esds.es_desc.dec_config.avg_bitrate } - if let Ok(stco) = StcoBox::try_from(self.trak.mdia.minf.stbl.co64.as_ref().unwrap()) { + if let Ok(stco) = StcoBox::try_from( + self.trak + .mdia + .minf + .stbl + .co64 + .as_ref() + .ok_or(crate::error::Error::BoxNotFound(BoxType::Co64Box))?, + ) { self.trak.mdia.minf.stbl.stco = Some(stco); self.trak.mdia.minf.stbl.co64 = None; } From f5a8be435c077609f6207a359fb088646ac67b5b Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 13:09:09 -0400 Subject: [PATCH 6/8] fix(clippy) --- src/mp4box/mod.rs | 2 +- src/mp4box/soun.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 068f11e4..00b7d2f7 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -87,7 +87,7 @@ pub(crate) mod mp4a; pub(crate) mod mvex; pub(crate) mod mvhd; pub(crate) mod smhd; -pub(crate) mod soun; +//pub(crate) mod soun; pub(crate) mod stbl; pub(crate) mod stco; pub(crate) mod stsc; diff --git a/src/mp4box/soun.rs b/src/mp4box/soun.rs index b2ddabab..4d2ad48a 100644 --- a/src/mp4box/soun.rs +++ b/src/mp4box/soun.rs @@ -1,4 +1,4 @@ -use serde::Serialize; +/*use serde::Serialize; use crate::mp4box::*; @@ -25,4 +25,4 @@ impl Mp4Box for SounBox { fn summary(&self) -> Result { todo!() } -} +}*/ From 0e81b1f70c2141d396cf80c131f2429181dee26f Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 15:18:48 -0400 Subject: [PATCH 7/8] chore(mp4box): remove soun module --- src/mp4box/mod.rs | 4 +--- src/mp4box/soun.rs | 28 ---------------------------- 2 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 src/mp4box/soun.rs diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 00b7d2f7..3f85c3ee 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -87,7 +87,6 @@ pub(crate) mod mp4a; pub(crate) mod mvex; pub(crate) mod mvhd; pub(crate) mod smhd; -//pub(crate) mod soun; pub(crate) mod stbl; pub(crate) mod stco; pub(crate) mod stsc; @@ -200,8 +199,7 @@ boxtype! { DayBox => 0xa9646179, CovrBox => 0x636f7672, DescBox => 0x64657363, - WideBox => 0x77696465, - SounBox => 0x736F756E + WideBox => 0x77696465 } pub trait Mp4Box: Sized { diff --git a/src/mp4box/soun.rs b/src/mp4box/soun.rs deleted file mode 100644 index 4d2ad48a..00000000 --- a/src/mp4box/soun.rs +++ /dev/null @@ -1,28 +0,0 @@ -/*use serde::Serialize; - -use crate::mp4box::*; - -// for opus -// https://opus-codec.org/docs/opus_in_isobmff.html -#[derive(Debug, Clone, PartialEq, Eq, Serialize)] -pub struct SounBox {} - -impl Default for SounBox { - fn default() -> Self { - Self {} - } -} - -impl Mp4Box for SounBox { - fn box_type(&self) -> BoxType { - BoxType::SounBox - } - - fn box_size(&self) -> u64 { - todo!() - } - - fn summary(&self) -> Result { - todo!() - } -}*/ From 86cc3481007054393c22147d10c599633d898c7c Mon Sep 17 00:00:00 2001 From: Stuart Woodbury Date: Wed, 5 Jul 2023 16:34:09 -0400 Subject: [PATCH 8/8] chore(reader): refactor read_header --- src/reader.rs | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/src/reader.rs b/src/reader.rs index 45c64b17..88d86bf9 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -72,33 +72,24 @@ impl Mp4Reader { current = reader.stream_position()?; } - if ftyp.is_none() { - return Err(Error::BoxNotFound(BoxType::FtypBox)); - } - if moov.is_none() { - return Err(Error::BoxNotFound(BoxType::MoovBox)); - } + let ftyp = ftyp.ok_or(Error::BoxNotFound(BoxType::FtypBox))?; + let moov = moov.ok_or(Error::BoxNotFound(BoxType::MoovBox))?; let size = current - start; - let mut tracks = if let Some(ref moov) = moov { - if moov.traks.iter().any(|trak| trak.tkhd.track_id == 0) { - return Err(Error::InvalidData("illegal track id 0")); - } - moov.traks - .iter() - .map(|trak| (trak.tkhd.track_id, Mp4Track::from(trak))) - .collect() - } else { - HashMap::new() - }; + if moov.traks.iter().any(|trak| trak.tkhd.track_id == 0) { + return Err(Error::InvalidData("illegal track id 0")); + } + let mut tracks: HashMap = moov + .traks + .iter() + .map(|trak| (trak.tkhd.track_id, Mp4Track::from(trak))) + .collect(); // Update tracks if any fragmented (moof) boxes are found. if !moofs.is_empty() { let mut default_sample_duration = 0; - if let Some(ref moov) = moov { - if let Some(ref mvex) = &moov.mvex { - default_sample_duration = mvex.trex.default_sample_duration - } + if let Some(ref mvex) = &moov.mvex { + default_sample_duration = mvex.trex.default_sample_duration } for moof in moofs.iter() { @@ -116,8 +107,8 @@ impl Mp4Reader { Ok(Mp4Reader { reader, - ftyp: ftyp.ok_or(crate::error::Error::BoxNotFound(BoxType::FtypBox))?, - moov: moov.ok_or(crate::error::Error::BoxNotFound(BoxType::MoovBox))?, + ftyp, + moov, moofs, emsgs, size,