X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-indeo%2Fsrc%2Fcodecs%2Findeo3enc%2Fcell.rs;h=b4e30f912080442baff9b44a169bef2b23648226;hb=HEAD;hp=6f641eb3c87355a8f6db9f98552b5e79365463c9;hpb=77c25c7b24cc20357dff1bdacf8561e9ec1e57f2;p=nihav.git diff --git a/nihav-indeo/src/codecs/indeo3enc/cell.rs b/nihav-indeo/src/codecs/indeo3enc/cell.rs index 6f641eb..b4e30f9 100644 --- a/nihav-indeo/src/codecs/indeo3enc/cell.rs +++ b/nihav-indeo/src/codecs/indeo3enc/cell.rs @@ -132,7 +132,7 @@ impl CodebookSuggester { if delta == 0 { continue; } - let delta = delta.abs() as u8; + let delta = delta.unsigned_abs(); self.add_delta(delta); } } @@ -141,7 +141,7 @@ impl CodebookSuggester { if delta == 0 { continue; } - let delta = delta.abs() as u8; + let delta = delta.unsigned_abs(); self.add_delta(delta); } } @@ -176,7 +176,7 @@ impl CellEncoder { buf: [0; MAX_CELL_SIZE + 160], rbuf: [0; MAX_CELL_SIZE + 160], deltas: [0; MAX_CELL_SIZE], - cell: Indeo3Cell::new(0, 0, false), + cell: Indeo3Cell::new(0, 0), out: [0; MAX_CELL_SIZE / 2 + 1], osize: 0, @@ -253,9 +253,9 @@ impl CellEncoder { fn determine_mode(&self, intra: bool, mut mode_hint: u8) -> (u8, [u8; 2]) { if let Some(qmode) = self.quant { if intra { - return (mode_hint, [qmode as u8, qmode as u8]); + return (mode_hint, [qmode, qmode]); } else { - let qmode = (qmode & 7) as u8; + let qmode = qmode & 7; return (mode_hint, [qmode, qmode]); } } @@ -368,10 +368,6 @@ impl CellEncoder { } } self.out[0] = (mode << 4) | (idx as u8); - - if idx >= 8 { - requant_idx = Some(idx - 8); - } } else { self.out[0] = (mode << 4) | (cb_no1 as u8); @@ -379,7 +375,7 @@ impl CellEncoder { requant_idx = Some(cb_no1 - 8); } } - if self.cell.get_y() == 0 { + if self.cell.get_y() == 0 || !matches!(mode, 0 | 3 | 10) { requant_idx = None; } @@ -619,13 +615,11 @@ impl CellEncoder { let dst = &mut data[x + y * stride..]; let mut dst_idx = stride; for line in 0..4 { - for x in 0..4 { - let top = dst[dst_idx - stride + x * 2]; - let cur = cell[(line + 1) * 4 + x]; - dst[dst_idx + x * 2] = (top + cur) >> 1; - dst[dst_idx + x * 2 + 1] = (top + cur) >> 1; - dst[dst_idx + stride + x * 2] = cur; - dst[dst_idx + stride + x * 2 + 1] = cur; + for x in 0..8 { + let top = dst[dst_idx - stride + x]; + let cur = cell[(line + 1) * 4 + x / 2]; + dst[dst_idx + x] = (top + cur) >> 1; + dst[dst_idx + stride + x] = cur; } dst_idx += stride * 2; } @@ -652,7 +646,7 @@ fn compress_intra_cell(iwriter: &mut IndexWriter, cell4: &mut [u8; 20], cbs: &[& let (prev, cur) = cell4.split_at_mut(pivot); let prev = &prev[prev.len() - 4..]; let cur = &mut cur[..4]; - let (idx0, idx1) = find_quad(&cb.data, prev, cur); + let (idx0, idx1) = find_quad(cb.data, prev, cur); cur[0] = ((prev[0] as i8) + cb.data[usize::from(idx1) * 2]) as u8; cur[1] = ((prev[1] as i8) + cb.data[usize::from(idx1) * 2 + 1]) as u8; @@ -671,7 +665,7 @@ fn compress_inter_cell(iwriter: &mut IndexWriter, ccell4: &mut [u8; 20], pcell: let cb = cbs[y]; let esc_val = esc_vals[y]; - let (idx0, idx1) = find_quad(&cb.data, prev, cur); + let (idx0, idx1) = find_quad(cb.data, prev, cur); cur[0] = ((prev[0] as i8) + cb.data[usize::from(idx1) * 2]) as u8; cur[1] = ((prev[1] as i8) + cb.data[usize::from(idx1) * 2 + 1]) as u8; @@ -786,8 +780,8 @@ fn compress_inter_cell_mode11(iwriter: &mut IndexWriter, cell: &mut [u8; 32], di } fn pair_dist(src: &[i8], pair: &[i8]) -> u32 { - let d0 = (i32::from(src[0]) - i32::from(pair[0])).abs() as u32; - let d1 = (i32::from(src[1]) - i32::from(pair[1])).abs() as u32; + let d0 = (i32::from(src[0]) - i32::from(pair[0])).unsigned_abs(); + let d1 = (i32::from(src[1]) - i32::from(pair[1])).unsigned_abs(); d0 * d0 + d1 * d1 }