1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2024-06-02 13:39:54 +00:00

Remove offset in BoxHeader

This commit is contained in:
Ian Jun 2020-07-24 09:00:20 +00:00
parent acc0566296
commit ab1ee1834f
2 changed files with 43 additions and 45 deletions

View file

@ -112,7 +112,7 @@ impl fmt::Display for FourCC {
}
pub trait ReadBox<T>: Sized {
fn read_box(_: T, offset: u64, size: u32) -> Result<Self>;
fn read_box(_: T, size: u32) -> Result<Self>;
}
#[derive(Debug, Default)]
@ -294,7 +294,7 @@ pub struct StsdBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for FtypBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let major = reader.read_u32::<BigEndian>().unwrap();
let minor = reader.read_u32::<BigEndian>().unwrap();
if size % 4 != 0 {
@ -317,7 +317,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for FtypBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MoovBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let mut moov = MoovBox::new();
let mut start = 0u64;
@ -325,14 +325,14 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MoovBox {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::MvhdBox => {
moov.mvhd = MvhdBox::read_box(reader, 0, s as u32).unwrap();
moov.mvhd = MvhdBox::read_box(reader, s as u32).unwrap();
}
BoxType::TrakBox => {
let trak = TrakBox::read_box(reader, 0, s as u32).unwrap();
let trak = TrakBox::read_box(reader, s as u32).unwrap();
moov.traks.push(trak);
}
BoxType::UdtaBox => {
@ -346,7 +346,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MoovBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MvhdBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -374,7 +374,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MvhdBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for TrakBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let mut trak = TrakBox::new();
@ -382,19 +382,19 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for TrakBox {
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::TkhdBox => {
let tkhd = TkhdBox::read_box(reader, 0, s as u32).unwrap();
let tkhd = TkhdBox::read_box(reader, s as u32).unwrap();
trak.tkhd = Some(tkhd);
}
BoxType::EdtsBox => {
let edts = EdtsBox::read_box(reader, 0, s as u32).unwrap();
let edts = EdtsBox::read_box(reader, s as u32).unwrap();
trak.edts = Some(edts);
}
BoxType::MdiaBox => {
let mdia = MdiaBox::read_box(reader, 0, s as u32).unwrap();
let mdia = MdiaBox::read_box(reader, s as u32).unwrap();
trak.mdia = Some(mdia);
}
_ => break
@ -407,7 +407,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for TrakBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for TkhdBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -459,7 +459,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for TkhdBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for EdtsBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let mut edts = EdtsBox::new();
@ -467,11 +467,11 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for EdtsBox {
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::ElstBox => {
let elst = ElstBox::read_box(reader, 0, s as u32).unwrap();
let elst = ElstBox::read_box(reader, s as u32).unwrap();
edts.elst = Some(elst);
}
_ => break
@ -484,7 +484,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for EdtsBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for ElstBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u32::<BigEndian>().unwrap();
@ -512,7 +512,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for ElstBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MdiaBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let mut mdia = MdiaBox::new();
@ -520,19 +520,19 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MdiaBox {
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::MdhdBox => {
let mdhd = MdhdBox::read_box(reader, 0, s as u32).unwrap();
let mdhd = MdhdBox::read_box(reader, s as u32).unwrap();
mdia.mdhd = Some(mdhd);
}
BoxType::HdlrBox => {
let hdlr = HdlrBox::read_box(reader, 0, s as u32).unwrap();
let hdlr = HdlrBox::read_box(reader, s as u32).unwrap();
mdia.hdlr = Some(hdlr);
}
BoxType::MinfBox => {
let minf = MinfBox::read_box(reader, 0, s as u32).unwrap();
let minf = MinfBox::read_box(reader, s as u32).unwrap();
mdia.minf = Some(minf);
}
_ => break
@ -545,7 +545,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MdiaBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MdhdBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -590,7 +590,7 @@ fn get_language_string(language: u16) -> String {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for HdlrBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -622,7 +622,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for HdlrBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MinfBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let mut minf = MinfBox::new();
@ -630,11 +630,11 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MinfBox {
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::VmhdBox => {
let vmhd = VmhdBox::read_box(reader, 0, s as u32).unwrap();
let vmhd = VmhdBox::read_box(reader, s as u32).unwrap();
minf.vmhd = Some(vmhd);
}
BoxType::SmhdBox => {
@ -644,7 +644,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MinfBox {
start = (s as u32 - HEADER_SIZE) as u64;
}
BoxType::StblBox => {
let stbl = StblBox::read_box(reader, 0, s as u32).unwrap();
let stbl = StblBox::read_box(reader, s as u32).unwrap();
minf.stbl = Some(stbl);
}
_ => break
@ -657,7 +657,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for MinfBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for VmhdBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -679,22 +679,22 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for VmhdBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for StblBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let mut stbl = StblBox::new();
let start = 0u64;
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::StsdBox => {
let stsd = StsdBox::read_box(reader, 0, s as u32).unwrap();
let stsd = StsdBox::read_box(reader, s as u32).unwrap();
stbl.stsd = Some(stsd);
}
BoxType::SttsBox => {
let stts = SttsBox::read_box(reader, 0, s as u32).unwrap();
let stts = SttsBox::read_box(reader, s as u32).unwrap();
stbl.stts = Some(stts);
}
_ => break
@ -705,7 +705,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for StblBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for SttsBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -736,7 +736,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for SttsBox {
}
impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for StsdBox {
fn read_box(reader: &mut BufReader<R>, _offset: u64, size: u32) -> Result<Self> {
fn read_box(reader: &mut BufReader<R>, size: u32) -> Result<Self> {
let current = reader.seek(SeekFrom::Current(0)).unwrap(); // Current cursor position.
let version = reader.read_u8().unwrap();
@ -750,7 +750,7 @@ impl<R: Read + Seek> ReadBox<&mut BufReader<R>> for StsdBox {
while start < size as u64 {
// Get box header.
let header = read_box_header(reader, start).unwrap();
let BoxHeader{ name, size: s, offset: _ } = header;
let BoxHeader{ name, size: s } = header;
match name {
BoxType::Avc1Box => {

View file

@ -40,7 +40,6 @@ impl BMFF {
struct BoxHeader {
name: BoxType,
size: u64,
offset: u64,
}
pub fn read_mp4(f: File) -> Result<BMFF> {
@ -62,12 +61,12 @@ fn read_boxes(f: File) -> Result<BMFF> {
// Get box header.
let header = read_box_header(&mut reader, start).unwrap();
let BoxHeader{ name, size, offset: _ } = header;
let BoxHeader{ name, size } = header;
// Match and parse the atom boxes.
match name {
BoxType::FtypBox => {
let ftyp = FtypBox::read_box(&mut reader, 0, size as u32).unwrap();
let ftyp = FtypBox::read_box(&mut reader, size as u32).unwrap();
bmff.ftyp = ftyp;
}
BoxType::FreeBox => {
@ -77,7 +76,7 @@ fn read_boxes(f: File) -> Result<BMFF> {
start = (size as u32 - HEADER_SIZE) as u64;
}
BoxType::MoovBox => {
let moov = MoovBox::read_box(&mut reader, 0, size as u32).unwrap();
let moov = MoovBox::read_box(&mut reader, size as u32).unwrap();
bmff.moov = Some(moov);
}
BoxType::MoofBox => {
@ -116,15 +115,14 @@ fn read_box_header<R: Read + Seek>(reader: &mut BufReader<R>, start: u64) -> Res
let t = buf[4..8].try_into().unwrap();
let typ = u32::from_be_bytes(t);
let offset = match size {
1 => 4 + 4 + 8,
_ => 4 + 4,
};
// let offset = match size {
// 1 => 4 + 4 + 8,
// _ => 4 + 4,
// };
Ok(BoxHeader {
name: BoxType::from(typ),
size: size as u64,
offset: offset as u64,
})
}