Similarly optimize unfilter mode 2

Unfilter mode 1 can't benefit from this optimization
because it modifies and reads from the same line of data
This commit is contained in:
Joshua Holmer 2016-05-02 15:58:45 -04:00
parent 3652a69255
commit aaf443fca7

View file

@ -1149,13 +1149,14 @@ fn unfilter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8]) -> Vec<u
} }
} }
2 => { 2 => {
for (i, byte) in data.iter().enumerate() { if last_line.is_empty() {
if last_line.is_empty() { unfiltered.extend_from_slice(data);
unfiltered.push(*byte); } else {
} else { unfiltered.extend_from_slice(&data.iter()
unfiltered.push(byte.wrapping_add(last_line[i])); .zip(last_line.iter())
}; .map(|(cur, last)| cur.wrapping_add(*last))
} .collect::<Vec<u8>>());
};
} }
3 => { 3 => {
for (i, byte) in data.iter().enumerate() { for (i, byte) in data.iter().enumerate() {