]> git.nihav.org Git - nihav.git/commitdiff
wav: better handling for VBR codecs (like MP3)
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 25 Jan 2026 17:13:05 +0000 (18:13 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 25 Jan 2026 17:15:06 +0000 (18:15 +0100)
Those formats set block_size=1, so make demuxer read and pass
~1kB packets to the decoder instead in hope it can handle it.

nihav-commonfmt/src/demuxers/wav.rs

index c6b90a4a48e88b7ebd37a0046c7818a1ba45f50b..f96bd3fc7b58b2c543c7805ae99f43130dd90adc 100644 (file)
@@ -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))
         }
     }