1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2025-02-22 16:06:16 +00:00

chore(reader): refactor read_header

This commit is contained in:
Stuart Woodbury 2023-07-05 16:34:09 -04:00
parent 0e81b1f70c
commit 86cc348100

View file

@ -72,33 +72,24 @@ impl<R: Read + Seek> Mp4Reader<R> {
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<u32, Mp4Track> = 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<R: Read + Seek> Mp4Reader<R> {
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,