mirror of
https://github.com/alfg/mp4-rust.git
synced 2024-06-02 13:39:54 +00:00
Refactoring
This commit is contained in:
parent
8dc8ab20c2
commit
f950a15081
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue