From: Kostya Shishkov Date: Sun, 25 Jan 2026 17:13:05 +0000 (+0100) Subject: wav: better handling for VBR codecs (like MP3) X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=915d9019912bd9bb4529814a141417bf08287df3;p=nihav.git wav: better handling for VBR codecs (like MP3) Those formats set block_size=1, so make demuxer read and pass ~1kB packets to the decoder instead in hope it can handle it. --- diff --git a/nihav-commonfmt/src/demuxers/wav.rs b/nihav-commonfmt/src/demuxers/wav.rs index c6b90a4..f96bd3f 100644 --- a/nihav-commonfmt/src/demuxers/wav.rs +++ b/nihav-commonfmt/src/demuxers/wav.rs @@ -112,8 +112,23 @@ impl<'a> DemuxCore<'a> for WAVDemuxer<'a> { } buf.truncate(tot_size); Ok(NAPacket::new(stream, ts, true, buf)) - } else { + } else if self.block_size != 1 { self.src.read_packet(stream, ts, true, self.block_size) + } else { + let to_read = (self.data_end - self.src.tell()).min(1024) as usize; + let mut buf = vec![0; to_read]; + let mut pos = 0; + while pos < buf.len() { + if let Ok(rsize) = self.src.read_buf_some(&mut buf[pos..]) { + pos += rsize; + } else { + break; + } + } + if pos == 0 { + return Err(DemuxerError::IOError); + } + Ok(NAPacket::new(stream, ts, false, buf)) } }