From c9f132d58884adda511318952f407e0db026b6c3 Mon Sep 17 00:00:00 2001 From: Precision Date: Thu, 27 Jul 2023 18:33:56 +0800 Subject: [PATCH 1/9] fix clippy (rustc 1.71.0) --- src/mp4box/stsc.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mp4box/stsc.rs b/src/mp4box/stsc.rs index e5b444ef..a2b034bb 100644 --- a/src/mp4box/stsc.rs +++ b/src/mp4box/stsc.rs @@ -85,7 +85,7 @@ impl ReadBox<&mut R> for StscBox { let mut sample_id = 1; for i in 0..entry_count { let (first_chunk, samples_per_chunk) = { - let mut entry = entries.get_mut(i as usize).unwrap(); + let entry = entries.get_mut(i as usize).unwrap(); entry.first_sample = sample_id; (entry.first_chunk, entry.samples_per_chunk) }; From 6855d306a48ff325839ad600b88cccd9ba55d0d1 Mon Sep 17 00:00:00 2001 From: Precision Date: Sun, 30 Jul 2023 16:30:29 +0800 Subject: [PATCH 2/9] Add support for gpx box --- src/lib.rs | 5 +++ src/mp4box/gps.rs | 103 +++++++++++++++++++++++++++++++++++++++++++++ src/mp4box/mod.rs | 2 + src/mp4box/moov.rs | 17 +++++++- src/reader.rs | 13 ++++++ 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 src/mp4box/gps.rs diff --git a/src/lib.rs b/src/lib.rs index 92319e18..79cc1fbd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,11 @@ pub use types::*; mod mp4box; pub use mp4box::*; +pub use mp4box::{ + gps::{GpsBox, GpsDataBlockInfo}, + Mp4Box, +}; + mod track; pub use track::{Mp4Track, TrackConfig}; diff --git a/src/mp4box/gps.rs b/src/mp4box/gps.rs new file mode 100644 index 00000000..1b78e1a9 --- /dev/null +++ b/src/mp4box/gps.rs @@ -0,0 +1,103 @@ +use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; +use serde::Serialize; +use std::io::{Read, Seek, Write}; + +use crate::mp4box::*; + +const GPS_DATA_BLOCK_HEADER_SIZE: u64 = 8; +const GPS_DATA_BLOCK_INFO_SIZE: u64 = 8; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize)] +pub struct GpsDataBlockInfo { + /// File offset of GPS data block in bytes + pub offset: u32, + /// Size of GPS data block in bytes + pub size: u32, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)] +pub struct GpsBox { + pub version_and_date: u64, + pub data_blocks: Vec, +} + +impl GpsBox { + pub fn get_type(&self) -> BoxType { + BoxType::GpsBox + } + + pub fn get_size(&self) -> u64 { + HEADER_SIZE + + GPS_DATA_BLOCK_HEADER_SIZE + + (self.data_blocks.len() as u64 * GPS_DATA_BLOCK_INFO_SIZE) + } +} + +impl Mp4Box for GpsBox { + fn box_type(&self) -> BoxType { + self.get_type() + } + + fn box_size(&self) -> u64 { + self.get_size() + } + + fn to_json(&self) -> Result { + Ok(serde_json::to_string(&self).unwrap()) + } + + fn summary(&self) -> Result { + let s = format!( + "version_and_date=0x{:X}, num_blocks={}", + self.version_and_date, + self.data_blocks.len() + ); + Ok(s) + } +} + +impl ReadBox<&mut R> for GpsBox { + fn read_box(reader: &mut R, size: u64) -> Result { + let start = box_start(reader)?; + + let version_and_date = reader.read_u64::()?; + + // TODO - size checks/etc + let mut data_blocks = Vec::new(); + let count = (size - HEADER_SIZE - GPS_DATA_BLOCK_HEADER_SIZE) / GPS_DATA_BLOCK_INFO_SIZE; + for _ in 0..count { + let offset = reader.read_u32::()?; + let size = reader.read_u32::()?; + if offset == 0 || size == 0 { + // log::warn!("Ignoring block offset={}, size={}", offset, size); + } else { + data_blocks.push(GpsDataBlockInfo { offset, size }); + } + } + + skip_bytes_to(reader, start + size)?; + + Ok(GpsBox { + version_and_date, + data_blocks, + }) + } +} + +impl WriteBox<&mut W> for GpsBox { + fn write_box(&self, writer: &mut W) -> Result { + let size = self.box_size(); + BoxHeader::new(self.box_type(), size).write(writer)?; + writer.write_u64::(self.version_and_date)?; + for info in self.data_blocks.iter() { + writer.write_u32::(info.offset)?; + writer.write_u32::(info.size)?; + } + Ok(size) + } +} + +#[cfg(test)] +mod tests { + // TODO +} diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 0af14b5f..ab241fe5 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -71,6 +71,7 @@ pub(crate) mod edts; pub(crate) mod elst; pub(crate) mod emsg; pub(crate) mod ftyp; +pub(crate) mod gps; pub(crate) mod hdlr; pub(crate) mod hev1; pub(crate) mod ilst; @@ -198,6 +199,7 @@ boxtype! { DayBox => 0xa9646179, CovrBox => 0x636f7672, DescBox => 0x64657363, + GpsBox => 0x67707320, WideBox => 0x77696465 } diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index ac19381a..03d5de77 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -3,7 +3,7 @@ use std::io::{Read, Seek, Write}; use crate::meta::MetaBox; use crate::mp4box::*; -use crate::mp4box::{mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox}; +use crate::mp4box::{gps::GpsBox, mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox}; #[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MoovBox { @@ -20,6 +20,9 @@ pub struct MoovBox { #[serde(skip_serializing_if = "Option::is_none")] pub udta: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub gps: Option, } impl MoovBox { @@ -38,6 +41,9 @@ impl MoovBox { if let Some(udta) = &self.udta { size += udta.box_size(); } + if let Some(gps) = &self.gps { + size += gps.box_size(); + } size } } @@ -69,6 +75,7 @@ impl ReadBox<&mut R> for MoovBox { let mut meta = None; let mut udta = None; let mut mvex = None; + let mut gps = None; let mut traks = Vec::new(); let mut current = reader.stream_position()?; @@ -100,6 +107,9 @@ impl ReadBox<&mut R> for MoovBox { BoxType::UdtaBox => { udta = Some(UdtaBox::read_box(reader, s)?); } + BoxType::GpsBox => { + gps = Some(GpsBox::read_box(reader, s)?); + } _ => { // XXX warn!() skip_box(reader, s)?; @@ -121,6 +131,7 @@ impl ReadBox<&mut R> for MoovBox { udta, mvex, traks, + gps, }) } } @@ -140,6 +151,9 @@ impl WriteBox<&mut W> for MoovBox { if let Some(udta) = &self.udta { udta.write_box(writer)?; } + if let Some(gps) = &self.gps { + gps.write_box(writer)?; + } Ok(0) } } @@ -158,6 +172,7 @@ mod tests { traks: vec![], meta: Some(MetaBox::default()), udta: Some(UdtaBox::default()), + gps: Some(GpsBox::default()), }; let mut buf = Vec::new(); diff --git a/src/reader.rs b/src/reader.rs index 5a39eebb..30ed6977 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -3,6 +3,7 @@ use std::io::{Read, Seek}; use std::time::Duration; use crate::meta::MetaBox; +use crate::gps::GpsBox; use crate::*; #[derive(Debug)] @@ -172,6 +173,18 @@ impl Mp4Reader { Err(Error::TrakNotFound(track_id)) } } + + pub fn into_inner(self) -> R { + self.reader + } + + pub fn gps_box(&mut self) -> Option { + if self.moov.gps.is_some() { + self.moov.gps.clone() + } else { + None + } + } } impl Mp4Reader { From 3acc6a60827e559cd3b87aa1fe4bc1b4eba235f7 Mon Sep 17 00:00:00 2001 From: Precision Date: Sun, 30 Jul 2023 16:30:29 +0800 Subject: [PATCH 3/9] Add support for gps box --- src/lib.rs | 5 +++ src/mp4box/gps.rs | 103 +++++++++++++++++++++++++++++++++++++++++++++ src/mp4box/mod.rs | 2 + src/mp4box/moov.rs | 17 +++++++- src/reader.rs | 13 ++++++ 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 src/mp4box/gps.rs diff --git a/src/lib.rs b/src/lib.rs index 92319e18..79cc1fbd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,11 @@ pub use types::*; mod mp4box; pub use mp4box::*; +pub use mp4box::{ + gps::{GpsBox, GpsDataBlockInfo}, + Mp4Box, +}; + mod track; pub use track::{Mp4Track, TrackConfig}; diff --git a/src/mp4box/gps.rs b/src/mp4box/gps.rs new file mode 100644 index 00000000..1b78e1a9 --- /dev/null +++ b/src/mp4box/gps.rs @@ -0,0 +1,103 @@ +use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; +use serde::Serialize; +use std::io::{Read, Seek, Write}; + +use crate::mp4box::*; + +const GPS_DATA_BLOCK_HEADER_SIZE: u64 = 8; +const GPS_DATA_BLOCK_INFO_SIZE: u64 = 8; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize)] +pub struct GpsDataBlockInfo { + /// File offset of GPS data block in bytes + pub offset: u32, + /// Size of GPS data block in bytes + pub size: u32, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)] +pub struct GpsBox { + pub version_and_date: u64, + pub data_blocks: Vec, +} + +impl GpsBox { + pub fn get_type(&self) -> BoxType { + BoxType::GpsBox + } + + pub fn get_size(&self) -> u64 { + HEADER_SIZE + + GPS_DATA_BLOCK_HEADER_SIZE + + (self.data_blocks.len() as u64 * GPS_DATA_BLOCK_INFO_SIZE) + } +} + +impl Mp4Box for GpsBox { + fn box_type(&self) -> BoxType { + self.get_type() + } + + fn box_size(&self) -> u64 { + self.get_size() + } + + fn to_json(&self) -> Result { + Ok(serde_json::to_string(&self).unwrap()) + } + + fn summary(&self) -> Result { + let s = format!( + "version_and_date=0x{:X}, num_blocks={}", + self.version_and_date, + self.data_blocks.len() + ); + Ok(s) + } +} + +impl ReadBox<&mut R> for GpsBox { + fn read_box(reader: &mut R, size: u64) -> Result { + let start = box_start(reader)?; + + let version_and_date = reader.read_u64::()?; + + // TODO - size checks/etc + let mut data_blocks = Vec::new(); + let count = (size - HEADER_SIZE - GPS_DATA_BLOCK_HEADER_SIZE) / GPS_DATA_BLOCK_INFO_SIZE; + for _ in 0..count { + let offset = reader.read_u32::()?; + let size = reader.read_u32::()?; + if offset == 0 || size == 0 { + // log::warn!("Ignoring block offset={}, size={}", offset, size); + } else { + data_blocks.push(GpsDataBlockInfo { offset, size }); + } + } + + skip_bytes_to(reader, start + size)?; + + Ok(GpsBox { + version_and_date, + data_blocks, + }) + } +} + +impl WriteBox<&mut W> for GpsBox { + fn write_box(&self, writer: &mut W) -> Result { + let size = self.box_size(); + BoxHeader::new(self.box_type(), size).write(writer)?; + writer.write_u64::(self.version_and_date)?; + for info in self.data_blocks.iter() { + writer.write_u32::(info.offset)?; + writer.write_u32::(info.size)?; + } + Ok(size) + } +} + +#[cfg(test)] +mod tests { + // TODO +} diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index 0af14b5f..ab241fe5 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -71,6 +71,7 @@ pub(crate) mod edts; pub(crate) mod elst; pub(crate) mod emsg; pub(crate) mod ftyp; +pub(crate) mod gps; pub(crate) mod hdlr; pub(crate) mod hev1; pub(crate) mod ilst; @@ -198,6 +199,7 @@ boxtype! { DayBox => 0xa9646179, CovrBox => 0x636f7672, DescBox => 0x64657363, + GpsBox => 0x67707320, WideBox => 0x77696465 } diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index ac19381a..03d5de77 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -3,7 +3,7 @@ use std::io::{Read, Seek, Write}; use crate::meta::MetaBox; use crate::mp4box::*; -use crate::mp4box::{mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox}; +use crate::mp4box::{gps::GpsBox, mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox}; #[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MoovBox { @@ -20,6 +20,9 @@ pub struct MoovBox { #[serde(skip_serializing_if = "Option::is_none")] pub udta: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub gps: Option, } impl MoovBox { @@ -38,6 +41,9 @@ impl MoovBox { if let Some(udta) = &self.udta { size += udta.box_size(); } + if let Some(gps) = &self.gps { + size += gps.box_size(); + } size } } @@ -69,6 +75,7 @@ impl ReadBox<&mut R> for MoovBox { let mut meta = None; let mut udta = None; let mut mvex = None; + let mut gps = None; let mut traks = Vec::new(); let mut current = reader.stream_position()?; @@ -100,6 +107,9 @@ impl ReadBox<&mut R> for MoovBox { BoxType::UdtaBox => { udta = Some(UdtaBox::read_box(reader, s)?); } + BoxType::GpsBox => { + gps = Some(GpsBox::read_box(reader, s)?); + } _ => { // XXX warn!() skip_box(reader, s)?; @@ -121,6 +131,7 @@ impl ReadBox<&mut R> for MoovBox { udta, mvex, traks, + gps, }) } } @@ -140,6 +151,9 @@ impl WriteBox<&mut W> for MoovBox { if let Some(udta) = &self.udta { udta.write_box(writer)?; } + if let Some(gps) = &self.gps { + gps.write_box(writer)?; + } Ok(0) } } @@ -158,6 +172,7 @@ mod tests { traks: vec![], meta: Some(MetaBox::default()), udta: Some(UdtaBox::default()), + gps: Some(GpsBox::default()), }; let mut buf = Vec::new(); diff --git a/src/reader.rs b/src/reader.rs index 5a39eebb..30ed6977 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -3,6 +3,7 @@ use std::io::{Read, Seek}; use std::time::Duration; use crate::meta::MetaBox; +use crate::gps::GpsBox; use crate::*; #[derive(Debug)] @@ -172,6 +173,18 @@ impl Mp4Reader { Err(Error::TrakNotFound(track_id)) } } + + pub fn into_inner(self) -> R { + self.reader + } + + pub fn gps_box(&mut self) -> Option { + if self.moov.gps.is_some() { + self.moov.gps.clone() + } else { + None + } + } } impl Mp4Reader { From 09fdedc2d6de888d329226bf6044a7621626a522 Mon Sep 17 00:00:00 2001 From: Precision Date: Sun, 30 Jul 2023 16:47:57 +0800 Subject: [PATCH 4/9] cargo fmt --- src/lib.rs | 1 - src/mp4box/moov.rs | 2 +- src/reader.rs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 79cc1fbd..edb64652 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -83,7 +83,6 @@ pub use mp4box::{ Mp4Box, }; - mod track; pub use track::{Mp4Track, TrackConfig}; diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index 03d5de77..93daaa88 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -153,7 +153,7 @@ impl WriteBox<&mut W> for MoovBox { } if let Some(gps) = &self.gps { gps.write_box(writer)?; - } + } Ok(0) } } diff --git a/src/reader.rs b/src/reader.rs index 30ed6977..0f3d791b 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -2,8 +2,8 @@ use std::collections::HashMap; use std::io::{Read, Seek}; use std::time::Duration; -use crate::meta::MetaBox; use crate::gps::GpsBox; +use crate::meta::MetaBox; use crate::*; #[derive(Debug)] From c0043dcb476be13e4251b06993364aa7a82fbfb5 Mon Sep 17 00:00:00 2001 From: Precision Date: Mon, 13 Jan 2025 12:50:19 +0800 Subject: [PATCH 5/9] refactor: remove redundant gps_box() and into_inner() methods from Mp4Reader trait --- src/reader.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/reader.rs b/src/reader.rs index 0f3d791b..6ac7ac23 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -173,18 +173,6 @@ impl Mp4Reader { Err(Error::TrakNotFound(track_id)) } } - - pub fn into_inner(self) -> R { - self.reader - } - - pub fn gps_box(&mut self) -> Option { - if self.moov.gps.is_some() { - self.moov.gps.clone() - } else { - None - } - } } impl Mp4Reader { From b8b3a3875e70834a86c94e555ed3e18122bc1ad2 Mon Sep 17 00:00:00 2001 From: Precision Date: Mon, 13 Jan 2025 13:03:14 +0800 Subject: [PATCH 6/9] Test: add unit tests for GpsBox --- src/mp4box/gps.rs | 43 ++++++++++++++++++++++++++++++++++++++++++- src/reader.rs | 2 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/mp4box/gps.rs b/src/mp4box/gps.rs index 1b78e1a9..99a033e6 100644 --- a/src/mp4box/gps.rs +++ b/src/mp4box/gps.rs @@ -99,5 +99,46 @@ impl WriteBox<&mut W> for GpsBox { #[cfg(test)] mod tests { - // TODO + use super::*; + use std::io::Cursor; + + #[test] + fn test_gps() { + let src_box = GpsBox { + version_and_date: 12345678, + data_blocks: vec![ + GpsDataBlockInfo { + offset: 100, + size: 256, + } + ], + }; + let mut buf = Vec::new(); + src_box.write_box(&mut buf).unwrap(); + assert_eq!(buf.len(), src_box.box_size() as usize); + + let mut reader = Cursor::new(&buf); + let header = BoxHeader::read(&mut reader).unwrap(); + assert_eq!(header.name, BoxType::GpsBox); + assert_eq!(src_box.box_size(), header.size); + + let dst_box = GpsBox::read_box(&mut reader, header.size).unwrap(); + assert_eq!(src_box, dst_box); + } + + #[test] + fn test_gps_empty() { + let src_box = GpsBox::default(); + let mut buf = Vec::new(); + src_box.write_box(&mut buf).unwrap(); + assert_eq!(buf.len(), src_box.box_size() as usize); + + let mut reader = Cursor::new(&buf); + let header = BoxHeader::read(&mut reader).unwrap(); + assert_eq!(header.name, BoxType::GpsBox); + assert_eq!(src_box.box_size(), header.size); + + let dst_box = GpsBox::read_box(&mut reader, header.size).unwrap(); + assert_eq!(src_box, dst_box); + } } diff --git a/src/reader.rs b/src/reader.rs index 6ac7ac23..fea0e301 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use std::io::{Read, Seek}; use std::time::Duration; -use crate::gps::GpsBox; + use crate::meta::MetaBox; use crate::*; From d8d4153b4becec852c80de19ccaf71ea583c4c3e Mon Sep 17 00:00:00 2001 From: Precision Date: Mon, 13 Jan 2025 13:24:45 +0800 Subject: [PATCH 7/9] cargo clippy: Fix cargo clippy for rust 1.84.0 --- src/mp4box/gps.rs | 10 ++++------ src/mp4box/ilst.rs | 2 +- src/mp4box/mp4a.rs | 2 +- src/reader.rs | 1 - src/track.rs | 4 ++-- src/writer.rs | 2 +- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/mp4box/gps.rs b/src/mp4box/gps.rs index 99a033e6..134ad2c4 100644 --- a/src/mp4box/gps.rs +++ b/src/mp4box/gps.rs @@ -106,12 +106,10 @@ mod tests { fn test_gps() { let src_box = GpsBox { version_and_date: 12345678, - data_blocks: vec![ - GpsDataBlockInfo { - offset: 100, - size: 256, - } - ], + data_blocks: vec![GpsDataBlockInfo { + offset: 100, + size: 256, + }], }; let mut buf = Vec::new(); src_box.write_box(&mut buf).unwrap(); diff --git a/src/mp4box/ilst.rs b/src/mp4box/ilst.rs index d0292a31..21f72867 100644 --- a/src/mp4box/ilst.rs +++ b/src/mp4box/ilst.rs @@ -165,7 +165,7 @@ impl ReadBox<&mut R> for IlstItemBox { } } -impl<'a> Metadata<'a> for IlstBox { +impl Metadata<'_> for IlstBox { fn title(&self) -> Option> { self.items.get(&MetadataKey::Title).map(item_to_str) } diff --git a/src/mp4box/mp4a.rs b/src/mp4box/mp4a.rs index a80c6c46..d7f6f25b 100644 --- a/src/mp4box/mp4a.rs +++ b/src/mp4box/mp4a.rs @@ -285,7 +285,7 @@ fn size_of_length(size: u32) -> u32 { fn write_desc(writer: &mut W, tag: u8, size: u32) -> Result { writer.write_u8(tag)?; - if size as u64 > std::u32::MAX as u64 { + if size as u64 > u32::MAX as u64 { return Err(Error::InvalidData("invalid descriptor length range")); } diff --git a/src/reader.rs b/src/reader.rs index ed23fbf9..e5ac2964 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -2,7 +2,6 @@ use std::collections::HashMap; use std::io::{Read, Seek}; use std::time::Duration; - use crate::meta::MetaBox; use crate::*; diff --git a/src/track.rs b/src/track.rs index 7eada834..4f385885 100644 --- a/src/track.rs +++ b/src/track.rs @@ -261,7 +261,7 @@ impl Mp4Track { pub fn sequence_parameter_set(&self) -> Result<&[u8]> { if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 { - match avc1.avcc.sequence_parameter_sets.get(0) { + match avc1.avcc.sequence_parameter_sets.first() { Some(nal) => Ok(nal.bytes.as_ref()), None => Err(Error::EntryInStblNotFound( self.track_id(), @@ -276,7 +276,7 @@ impl Mp4Track { pub fn picture_parameter_set(&self) -> Result<&[u8]> { if let Some(ref avc1) = self.trak.mdia.minf.stbl.stsd.avc1 { - match avc1.avcc.picture_parameter_sets.get(0) { + match avc1.avcc.picture_parameter_sets.first() { Some(nal) => Ok(nal.bytes.as_ref()), None => Err(Error::EntryInStblNotFound( self.track_id(), diff --git a/src/writer.rs b/src/writer.rs index a83a888c..eac3a247 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -117,7 +117,7 @@ impl Mp4Writer { fn update_mdat_size(&mut self) -> Result<()> { let mdat_end = self.writer.stream_position()?; let mdat_size = mdat_end - self.mdat_pos; - if mdat_size > std::u32::MAX as u64 { + if mdat_size > u32::MAX as u64 { self.writer.seek(SeekFrom::Start(self.mdat_pos))?; self.writer.write_u32::(1)?; self.writer.seek(SeekFrom::Start(self.mdat_pos + 8))?; From a83d87abc3af6a523e3766fd67d3fdb6fd6b891b Mon Sep 17 00:00:00 2001 From: Precision Date: Mon, 13 Jan 2025 13:34:02 +0800 Subject: [PATCH 8/9] refactor: remove unused imports from lib.rs --- src/lib.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index edb64652..92319e18 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,10 +78,6 @@ pub use types::*; mod mp4box; pub use mp4box::*; -pub use mp4box::{ - gps::{GpsBox, GpsDataBlockInfo}, - Mp4Box, -}; mod track; pub use track::{Mp4Track, TrackConfig}; From 5c28ec90875e31870cedccf733c833b315a9667f Mon Sep 17 00:00:00 2001 From: Precision Date: Mon, 13 Jan 2025 15:01:54 +0800 Subject: [PATCH 9/9] Revert "refactor: remove unused imports from lib.rs" This reverts commit a83d87abc3af6a523e3766fd67d3fdb6fd6b891b. --- src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 92319e18..edb64652 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,10 @@ pub use types::*; mod mp4box; pub use mp4box::*; +pub use mp4box::{ + gps::{GpsBox, GpsDataBlockInfo}, + Mp4Box, +}; mod track; pub use track::{Mp4Track, TrackConfig};