mirror of
https://github.com/alfg/mp4-rust.git
synced 2024-06-10 17:09:22 +00:00
Fix some bugs
This commit is contained in:
parent
51252c16ae
commit
6152caa13c
|
@ -18,7 +18,7 @@ impl Mp4Box for StsdBox {
|
|||
}
|
||||
|
||||
fn box_size(&self) -> u64 {
|
||||
let mut size = HEADER_SIZE + HEADER_EXT_SIZE;
|
||||
let mut size = HEADER_SIZE + HEADER_EXT_SIZE + 4;
|
||||
if let Some(ref avc1) = self.avc1 {
|
||||
size += avc1.box_size();
|
||||
} else if let Some(ref mp4a) = self.mp4a {
|
||||
|
|
|
@ -32,7 +32,7 @@ impl<R: Read + Seek> ReadBox<&mut R> for StszBox {
|
|||
let sample_count = reader.read_u32::<BigEndian>()?;
|
||||
let mut sample_sizes = Vec::with_capacity(sample_count as usize);
|
||||
if sample_size == 0 {
|
||||
for _i in 0..sample_count {
|
||||
for _ in 0..sample_count {
|
||||
let sample_number = reader.read_u32::<BigEndian>()?;
|
||||
sample_sizes.push(sample_number);
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ impl<W: Write> WriteBox<&mut W> for StszBox {
|
|||
writer.write_u32::<BigEndian>(self.sample_size)?;
|
||||
writer.write_u32::<BigEndian>(self.sample_count)?;
|
||||
if self.sample_size == 0 {
|
||||
assert_eq!(self.sample_count, self.sample_sizes.len() as u32);
|
||||
for sample_number in self.sample_sizes.iter() {
|
||||
writer.write_u32::<BigEndian>(*sample_number)?;
|
||||
}
|
||||
|
|
29
src/track.rs
29
src/track.rs
|
@ -465,25 +465,32 @@ impl Mp4TrackWriter {
|
|||
if size == 0 {
|
||||
self.trak.mdia.minf.stbl.stsz.sample_size = 0;
|
||||
self.is_fixed_sample_size = false;
|
||||
self.trak.mdia.minf.stbl.stsz.sample_sizes.push(0);
|
||||
} else {
|
||||
self.trak.mdia.minf.stbl.stsz.sample_size = size;
|
||||
self.fixed_sample_size = size;
|
||||
self.is_fixed_sample_size = true;
|
||||
}
|
||||
} else {
|
||||
assert!(self.trak.mdia.minf.stbl.stsz.sample_count > 0);
|
||||
if !self.is_fixed_sample_size || self.fixed_sample_size != size {
|
||||
if self.trak.mdia.minf.stbl.stsz.sample_size > 0 {
|
||||
self.trak.mdia.minf.stbl.stsz.sample_size = 0;
|
||||
for _ in 0..self.trak.mdia.minf.stbl.stsz.sample_count {
|
||||
self.trak
|
||||
.mdia
|
||||
.minf
|
||||
.stbl
|
||||
.stsz
|
||||
.sample_sizes
|
||||
.push(self.fixed_sample_size);
|
||||
if self.is_fixed_sample_size {
|
||||
if self.fixed_sample_size != size {
|
||||
self.is_fixed_sample_size = false;
|
||||
if self.trak.mdia.minf.stbl.stsz.sample_size > 0 {
|
||||
self.trak.mdia.minf.stbl.stsz.sample_size = 0;
|
||||
for _ in 0..self.trak.mdia.minf.stbl.stsz.sample_count {
|
||||
self.trak
|
||||
.mdia
|
||||
.minf
|
||||
.stbl
|
||||
.stsz
|
||||
.sample_sizes
|
||||
.push(self.fixed_sample_size);
|
||||
}
|
||||
}
|
||||
self.trak.mdia.minf.stbl.stsz.sample_sizes.push(size);
|
||||
}
|
||||
} else {
|
||||
self.trak.mdia.minf.stbl.stsz.sample_sizes.push(size);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue