diff --git a/src/chunk.rs b/src/chunk.rs index 1d82db7..cfa4506 100644 --- a/src/chunk.rs +++ b/src/chunk.rs @@ -12,7 +12,8 @@ pub enum Chunk = Vec> { start: u64, end: u64, // space for a Cluster tag and a Timecode tag - bytes: [u8;16] + bytes: [u8;16], + bytes_used: u8 }, ClusterBody { bytes: Arc @@ -21,7 +22,7 @@ pub enum Chunk = Vec> { impl> Chunk { pub fn update_timecode(&mut self, timecode: u64) { - if let &mut Chunk::ClusterHead {ref mut start, ref mut end, ref mut bytes, ..} = self { + if let &mut Chunk::ClusterHead {ref mut start, ref mut end, ref mut bytes, ref mut bytes_used, ..} = self { let delta = *end - *start; *start = timecode; *end = *start + delta; @@ -29,6 +30,7 @@ impl> Chunk { // buffer is sized so these should never fail encode_webm_element(&WebmElement::Cluster, &mut cursor).unwrap(); encode_webm_element(&WebmElement::Timecode(timecode), &mut cursor).unwrap(); + *bytes_used = cursor.position() as u8; } } } @@ -37,7 +39,7 @@ impl> AsRef<[u8]> for Chunk { fn as_ref(&self) -> &[u8] { match self { &Chunk::Headers {ref bytes, ..} => bytes.as_ref().as_ref(), - &Chunk::ClusterHead {ref bytes, ..} => bytes, + &Chunk::ClusterHead {ref bytes, bytes_used, ..} => bytes[..bytes_used as usize].as_ref(), &Chunk::ClusterBody {ref bytes, ..} => bytes.as_ref().as_ref() } }