From 031d32352adc52bc8c77257996263480054587e1 Mon Sep 17 00:00:00 2001 From: Tangent 128 Date: Fri, 29 Sep 2017 00:07:56 -0400 Subject: [PATCH] Fix dumping the whole cluster head buffer instead of the used portion --- src/chunk.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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() } }