From: Kostya Shishkov Date: Mon, 27 Jan 2025 17:45:32 +0000 (+0100) Subject: mpeg4asp: fix DC prediction calculations X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=807ff09707b5577dd91b00120ea30ab88250eb29;p=nihav.git mpeg4asp: fix DC prediction calculations --- diff --git a/nihav-mpeg/src/codecs/mpeg4asp/types.rs b/nihav-mpeg/src/codecs/mpeg4asp/types.rs index 73164da..f765480 100644 --- a/nihav-mpeg/src/codecs/mpeg4asp/types.rs +++ b/nihav-mpeg/src/codecs/mpeg4asp/types.rs @@ -288,19 +288,19 @@ impl PredState { 0..=3 => { let cur_addr = mb_x * 2 + (n & 1) + (n / 2) * self.y_dc.stride; let (diff, dir) = Self::dc_pred(&self.y_dc, cur_addr); - let dc = ((cur_dc + diff / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); + let dc = ((cur_dc + (diff + i16::from(dc_scale >> 1)) / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); self.y_dc.data[self.y_dc.xpos + cur_addr] = dc; (dc, dir) }, 4 => { let (diff, dir) = Self::dc_pred(&self.u_dc, mb_x); - let dc = ((cur_dc + diff / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); + let dc = ((cur_dc + (diff + i16::from(dc_scale >> 1)) / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); self.u_dc.data[self.u_dc.xpos + mb_x] = dc; (dc, dir) }, 5 => { let (diff, dir) = Self::dc_pred(&self.v_dc, mb_x); - let dc = ((cur_dc + diff / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); + let dc = ((cur_dc + (diff + i16::from(dc_scale >> 1)) / i16::from(dc_scale)) * i16::from(dc_scale)).max(-2048).min(2047); self.v_dc.data[self.v_dc.xpos + mb_x] = dc; (dc, dir) },