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

Refactoring

This commit is contained in:
Ian Jun 2020-11-12 16:46:56 +09:00
parent 8dc8ab20c2
commit f950a15081

View file

@ -124,7 +124,7 @@ impl Mp4Box for EsdsBox {
}
fn box_size(&self) -> u64 {
HEADER_SIZE + HEADER_EXT_SIZE + ESDescriptor::desc_size() as u64
HEADER_SIZE + HEADER_EXT_SIZE + 2 + ESDescriptor::desc_size() as u64 // XXX desc_size < 0x80
}
}
@ -189,11 +189,6 @@ trait WriteDesc<T>: Sized {
fn write_desc(&self, _: T) -> Result<u32>;
}
// XXX assert_eq!(size, 1)
fn desc_start<R: Seek>(reader: &mut R) -> Result<u64> {
Ok(reader.seek(SeekFrom::Current(0))? - 2)
}
fn read_desc<R: Read>(reader: &mut R) -> Result<(u8, u32)> {
let tag = reader.read_u8()?;
@ -259,13 +254,13 @@ impl Descriptor for ESDescriptor {
// XXX size < 0x80
fn desc_size() -> u32 {
2 + 3 + DecoderConfigDescriptor::desc_size() + SLConfigDescriptor::desc_size()
3 + 2 + DecoderConfigDescriptor::desc_size() + 2 + SLConfigDescriptor::desc_size()
}
}
impl<R: Read + Seek> ReadDesc<&mut R> for ESDescriptor {
fn read_desc(reader: &mut R, size: u32) -> Result<Self> {
let start = desc_start(reader)?;
let start = reader.seek(SeekFrom::Current(0))?;
let es_id = reader.read_u16::<BigEndian>()?;
reader.read_u8()?; // XXX flags must be 0
@ -274,7 +269,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for ESDescriptor {
let mut sl_config = None;
let mut current = reader.seek(SeekFrom::Current(0))?;
let end = start + size as u64 + 2; // XXX size < 0x80
let end = start + size as u64;
while current < end {
let (desc_tag, desc_size) = read_desc(reader)?;
match desc_tag {
@ -285,7 +280,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for ESDescriptor {
sl_config = Some(SLConfigDescriptor::read_desc(reader, desc_size)?);
}
_ => {
skip_bytes(reader, desc_size as u64 - 1)?;
skip_bytes(reader, desc_size as u64)?;
}
}
current = reader.seek(SeekFrom::Current(0))?;
@ -306,7 +301,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for ESDescriptor {
impl<W: Write> WriteDesc<&mut W> for ESDescriptor {
fn write_desc(&self, writer: &mut W) -> Result<u32> {
let size = Self::desc_size();
write_desc(writer, Self::desc_tag(), size - 2)?; // XXX size < 0x80
write_desc(writer, Self::desc_tag(), size)?;
writer.write_u16::<BigEndian>(self.es_id)?;
writer.write_u8(0)?;
@ -351,13 +346,13 @@ impl Descriptor for DecoderConfigDescriptor {
// XXX size < 0x80
fn desc_size() -> u32 {
2 + 13 + DecoderSpecificDescriptor::desc_size()
13 + 2 + DecoderSpecificDescriptor::desc_size()
}
}
impl<R: Read + Seek> ReadDesc<&mut R> for DecoderConfigDescriptor {
fn read_desc(reader: &mut R, size: u32) -> Result<Self> {
let start = desc_start(reader)?;
let start = reader.seek(SeekFrom::Current(0))?;
let object_type_indication = reader.read_u8()?;
let byte_a = reader.read_u8()?;
@ -370,7 +365,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for DecoderConfigDescriptor {
let mut dec_specific = None;
let mut current = reader.seek(SeekFrom::Current(0))?;
let end = start + size as u64 + 2; // XXX size < 0x80
let end = start + size as u64;
while current < end {
let (desc_tag, desc_size) = read_desc(reader)?;
match desc_tag {
@ -378,7 +373,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for DecoderConfigDescriptor {
dec_specific = Some(DecoderSpecificDescriptor::read_desc(reader, desc_size)?);
}
_ => {
skip_bytes(reader, desc_size as u64 - 1)?;
skip_bytes(reader, desc_size as u64)?;
}
}
current = reader.seek(SeekFrom::Current(0))?;
@ -403,7 +398,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for DecoderConfigDescriptor {
impl<W: Write> WriteDesc<&mut W> for DecoderConfigDescriptor {
fn write_desc(&self, writer: &mut W) -> Result<u32> {
let size = Self::desc_size();
write_desc(writer, Self::desc_tag(), size - 2)?; // XXX size < 0x80
write_desc(writer, Self::desc_tag(), size)?;
writer.write_u8(self.object_type_indication)?;
writer.write_u8((self.stream_type << 2) + (self.up_stream & 0x02))?;
@ -439,9 +434,8 @@ impl Descriptor for DecoderSpecificDescriptor {
0x05
}
// XXX size < 0x80
fn desc_size() -> u32 {
2 + 2
2
}
}
@ -464,7 +458,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for DecoderSpecificDescriptor {
impl<W: Write> WriteDesc<&mut W> for DecoderSpecificDescriptor {
fn write_desc(&self, writer: &mut W) -> Result<u32> {
let size = Self::desc_size();
write_desc(writer, Self::desc_tag(), size - 2)?; // XXX size < 0x80
write_desc(writer, Self::desc_tag(), size)?;
writer.write_u8((self.profile << 3) + (self.freq_index >> 1))?;
writer.write_u8((self.freq_index << 7) + (self.chan_conf << 3))?;
@ -487,9 +481,8 @@ impl Descriptor for SLConfigDescriptor {
0x06
}
// XXX size < 0x80
fn desc_size() -> u32 {
2 + 1
1
}
}
@ -504,7 +497,7 @@ impl<R: Read + Seek> ReadDesc<&mut R> for SLConfigDescriptor {
impl<W: Write> WriteDesc<&mut W> for SLConfigDescriptor {
fn write_desc(&self, writer: &mut W) -> Result<u32> {
let size = Self::desc_size();
write_desc(writer, Self::desc_tag(), size - 2)?; // XXX size < 0x80
write_desc(writer, Self::desc_tag(), size)?;
writer.write_u8(0)?; // pre-defined
Ok(size)