]> git.nihav.org Git - nihav.git/blobdiff - nihav-game/src/codecs/vx.rs
vx: fix typo in pred_hor_down()
[nihav.git] / nihav-game / src / codecs / vx.rs
index 1a37359153d279c4d582f6b6934019c1c5ae92c2..37bd047aea6303ab929a5d63e0971e26401c2f76 100644 (file)
@@ -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;