From 0085dfe8c276a4aa141b0144f975a925f4ea54f4 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sat, 16 Aug 2025 16:03:42 +0200 Subject: [PATCH] nihav_core/io: add read_extend() to byte reader Also change Vivo demuxer to use it as an example. --- nihav-core/src/io/byteio.rs | 7 +++++++ nihav-vivo/src/demuxers/vivo.rs | 5 +---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/nihav-core/src/io/byteio.rs b/nihav-core/src/io/byteio.rs index 3642422..b6c0c33 100644 --- a/nihav-core/src/io/byteio.rs +++ b/nihav-core/src/io/byteio.rs @@ -258,6 +258,13 @@ impl<'a> ByteReader<'a> { self.io.read_buf(buf) } + /// Allocates additional space in vector and reads data there. Partial read is treated as success. + pub fn read_extend(&mut self, buf: &mut Vec, add_size: usize) -> ByteIOResult { + let cur_size = buf.len(); + buf.resize(cur_size + add_size, 0); + self.io.read_buf(&mut buf[cur_size..]) + } + /// Reads data into provided buffer. Partial read is treated as success. pub fn read_buf_some(&mut self, buf: &mut [u8]) -> ByteIOResult { self.io.read_buf_some(buf) diff --git a/nihav-vivo/src/demuxers/vivo.rs b/nihav-vivo/src/demuxers/vivo.rs index 5d455b6..cee0753 100644 --- a/nihav-vivo/src/demuxers/vivo.rs +++ b/nihav-vivo/src/demuxers/vivo.rs @@ -101,10 +101,7 @@ impl<'a> DemuxCore<'a> for VivoDemuxer<'a> { } if is_video { validate!(self.v_den != 0); - let cur_size = self.video_buf.len(); - let new_size = cur_size + size; - self.video_buf.resize(new_size, 0); - br.read_buf(&mut self.video_buf[cur_size..])?; + br.read_extend(&mut self.video_buf, size)?; if (hdr >> 4) == 2 { let mut buf = Vec::new(); std::mem::swap(&mut self.video_buf, &mut buf); -- 2.39.5