X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fvx.rs;h=37bd047aea6303ab929a5d63e0971e26401c2f76;hb=21e827ed85aec5e1b34c15e09a5a52a77e51c261;hp=1a37359153d279c4d582f6b6934019c1c5ae92c2;hpb=55d852316872154db020827bd833fff7d5b49604;p=nihav.git diff --git a/nihav-game/src/codecs/vx.rs b/nihav-game/src/codecs/vx.rs index 1a37359..37bd047 100644 --- a/nihav-game/src/codecs/vx.rs +++ b/nihav-game/src/codecs/vx.rs @@ -304,7 +304,7 @@ fn pred_hor_down(blk: &mut [u8], pos: usize) { let pix = avg(l0, l1); blk[pos + 0 + 1 * 256] = pix; blk[pos + 2 + 2 * 256] = pix; - let pix = interp2(tl, t0, l1); + let pix = interp2(tl, l0, l1); blk[pos + 1 + 1 * 256] = pix; blk[pos + 3 + 2 * 256] = pix; let pix = avg(tl, l0); @@ -402,8 +402,12 @@ fn pred_plane(blk: &mut [u8], pos: usize, w: usize, h: usize) { let dm = avg_nr(dl, dr); blk[pos + w2off + hoff] = dm; blk[pos + woff + h2off] = avg_nr(tr, dr); - let val2 = if is_even_block { blk[pos + w2off - 256] } else { blk[pos - 1 + h2off] }; - blk[pos + w2off + h2off] = avg_nr(dm, val2); + let (val1, val2) = if is_even_block { + (dm, blk[pos + w2off - 256]) + } else { + (blk[pos + woff + h2off], blk[pos - 1 + h2off]) + }; + blk[pos + w2off + h2off] = avg_nr(val1, val2); let hw = w / 2; let hh = h / 2; @@ -415,9 +419,7 @@ fn pred_plane(blk: &mut [u8], pos: usize, w: usize, h: usize) { fn pred_plane_delta(blk: &mut [u8], pos: usize, w: usize, h: usize, delta: i32) { let tr = blk[pos + w - 1 - 256]; let dl = blk[pos + 256 * (h - 1) - 1]; - //XXX: this is a hack since it should not wrap around normally but this conceals some artefacts so let it be until the reconstruction is properly fixed - let pred = (((i32::from(tr) + i32::from(dl) + 1) >> 1) + delta).max(0).min(255) as u8; - //let pred = avg(tr, dl).wrapping_add(delta as u8); + let pred = avg(tr, dl).wrapping_add(delta as u8); blk[pos + 256 * (h - 1) + w - 1] = pred; pred_plane(blk, pos, w, h); } @@ -1090,7 +1092,7 @@ impl AudioState { idx += 128; for _ in 0..len { let val = br.read_u16le()?; - for i in 0..4 { + for i in 0..8 { let add = i32::from((val >> (14 - i * 2)) & 3); dst[idx] += self.scale * (add * 2 - 3); idx += step;