X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fvmd.rs;fp=nihav-game%2Fsrc%2Fcodecs%2Fvmd.rs;h=c8ef7daa55c5d4f3cc5ef1508b92a0ee341f0889;hb=3e91c67bfde3462596707d2d82fa6271f8b99301;hp=904fe1fc998a0a027c617a6b8a4fdaf3ae7bab1f;hpb=02c01d44e486b34dee5948f6d5821ea844014d70;p=nihav.git diff --git a/nihav-game/src/codecs/vmd.rs b/nihav-game/src/codecs/vmd.rs index 904fe1f..c8ef7da 100644 --- a/nihav-game/src/codecs/vmd.rs +++ b/nihav-game/src/codecs/vmd.rs @@ -471,7 +471,7 @@ impl NADecoder for VMDAudioDecoder { self.blk_size = (ainfo.get_block_len() + 1) * channels; self.mode = VMDAudioMode::DPCM; } else { - self.blk_size = ainfo.get_block_len() / 2 + 3; + self.blk_size = (ainfo.get_block_len() + 1) / 2 + 3; self.mode = VMDAudioMode::ADPCM; } }; @@ -603,7 +603,7 @@ impl NADecoder for VMDAudioDecoder { let mut ima = IMAState::new(); for _ in 0..nblocks { if (mask & 1) != 0 { - doff += (self.blk_size - 3) * 2; + doff += self.blk_align; mask >>= 1; continue; } @@ -611,11 +611,14 @@ impl NADecoder for VMDAudioDecoder { let step = br.read_byte()?; validate!((step as usize) < IMA_STEP_TABLE.len()); ima.reset(pred, step); - for _ in 3..self.blk_size { - let b = br.read_byte()?; - dst[doff] = ima.expand_sample(b >> 4); - doff += 1; - dst[doff] = ima.expand_sample(b & 0xF); + let mut b = 0; + for i in 0..self.blk_align { + if (i & 1) == 0 { + b = br.read_byte()?; + dst[doff] = ima.expand_sample(b >> 4); + } else { + dst[doff] = ima.expand_sample(b & 0xF); + } doff += 1; } mask >>= 1;