mirror of
https://github.com/alfg/mp4-rust.git
synced 2024-06-11 01:19:21 +00:00
when writing, mdat box is always large
This adds 8 bytes per file but allows files > 4GB.
This commit is contained in:
parent
0cd2abb60a
commit
696a02833b
|
@ -110,7 +110,7 @@ pub use moof::MoofBox;
|
|||
pub use moov::MoovBox;
|
||||
|
||||
pub const HEADER_SIZE: u64 = 8;
|
||||
// const HEADER_LARGE_SIZE: u64 = 16;
|
||||
pub const HEADER_LARGE_SIZE: u64 = 16;
|
||||
pub const HEADER_EXT_SIZE: u64 = 4;
|
||||
|
||||
macro_rules! boxtype {
|
||||
|
@ -266,6 +266,13 @@ impl BoxHeader {
|
|||
Ok(8)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write_large<W: Write>(&self, writer: &mut W) -> Result<u64> {
|
||||
writer.write_u32::<BigEndian>(1)?;
|
||||
writer.write_u32::<BigEndian>(self.name.into())?;
|
||||
writer.write_u64::<BigEndian>(self.size)?;
|
||||
Ok(16)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read_box_header_ext<R: Read>(reader: &mut R) -> Result<(u8, u32)> {
|
||||
|
|
|
@ -68,9 +68,8 @@ impl<W: Write + Seek> Mp4Writer<W> {
|
|||
};
|
||||
ftyp.write_box(&mut writer)?;
|
||||
|
||||
// TODO largesize
|
||||
let mdat_pos = writer.seek(SeekFrom::Current(0))?;
|
||||
BoxHeader::new(BoxType::MdatBox, HEADER_SIZE).write(&mut writer)?;
|
||||
BoxHeader::new(BoxType::MdatBox, HEADER_LARGE_SIZE).write_large(&mut writer)?;
|
||||
|
||||
let tracks = Vec::new();
|
||||
let timescale = config.timescale;
|
||||
|
@ -116,11 +115,8 @@ impl<W: Write + Seek> Mp4Writer<W> {
|
|||
fn update_mdat_size(&mut self) -> Result<()> {
|
||||
let mdat_end = self.writer.seek(SeekFrom::Current(0))?;
|
||||
let mdat_size = mdat_end - self.mdat_pos;
|
||||
if mdat_size > std::u32::MAX as u64 {
|
||||
return Err(Error::InvalidData("mdat size too large"));
|
||||
}
|
||||
self.writer.seek(SeekFrom::Start(self.mdat_pos))?;
|
||||
self.writer.write_u32::<BigEndian>(mdat_size as u32)?;
|
||||
self.writer.seek(SeekFrom::Start(self.mdat_pos + 8))?;
|
||||
self.writer.write_u64::<BigEndian>(mdat_size)?;
|
||||
self.writer.seek(SeekFrom::Start(mdat_end))?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue