diff --git a/src/dsp/filters.c b/src/dsp/filters.c index c9232ff1..bb779b39 100644 --- a/src/dsp/filters.c +++ b/src/dsp/filters.c @@ -32,13 +32,9 @@ #if !WEBP_NEON_OMIT_C_CODE static WEBP_INLINE void PredictLine_C(const uint8_t* src, const uint8_t* pred, - uint8_t* dst, int length, int inverse) { + uint8_t* dst, int length) { int i; - if (inverse) { - for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] + pred[i]); - } else { - for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] - pred[i]); - } + for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] - pred[i]); } //------------------------------------------------------------------------------ @@ -47,19 +43,19 @@ static WEBP_INLINE void PredictLine_C(const uint8_t* src, const uint8_t* pred, static WEBP_INLINE void DoHorizontalFilter_C(const uint8_t* in, int width, int height, int stride, int row, int num_rows, - int inverse, uint8_t* out) { + uint8_t* out) { const uint8_t* preds; const size_t start_offset = row * stride; const int last_row = row + num_rows; DCHECK(in, out); in += start_offset; out += start_offset; - preds = inverse ? out : in; + preds = in; if (row == 0) { // Leftmost pixel is the same as input for topmost scanline. out[0] = in[0]; - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); + PredictLine_C(in + 1, preds, out + 1, width - 1); row = 1; preds += stride; in += stride; @@ -69,8 +65,8 @@ static WEBP_INLINE void DoHorizontalFilter_C(const uint8_t* in, // Filter line-by-line. while (row < last_row) { // Leftmost pixel is predicted from above. - PredictLine_C(in, preds - stride, out, 1, inverse); - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); + PredictLine_C(in, preds - stride, out, 1); + PredictLine_C(in + 1, preds, out + 1, width - 1); ++row; preds += stride; in += stride; @@ -84,20 +80,20 @@ static WEBP_INLINE void DoHorizontalFilter_C(const uint8_t* in, static WEBP_INLINE void DoVerticalFilter_C(const uint8_t* in, int width, int height, int stride, int row, int num_rows, - int inverse, uint8_t* out) { + uint8_t* out) { const uint8_t* preds; const size_t start_offset = row * stride; const int last_row = row + num_rows; DCHECK(in, out); in += start_offset; out += start_offset; - preds = inverse ? out : in; + preds = in; if (row == 0) { // Very first top-left pixel is copied. out[0] = in[0]; // Rest of top scan-line is left-predicted. - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); + PredictLine_C(in + 1, preds, out + 1, width - 1); row = 1; in += stride; out += stride; @@ -108,7 +104,7 @@ static WEBP_INLINE void DoVerticalFilter_C(const uint8_t* in, // Filter line-by-line. while (row < last_row) { - PredictLine_C(in, preds, out, width, inverse); + PredictLine_C(in, preds, out, width); ++row; preds += stride; in += stride; @@ -129,19 +125,19 @@ static WEBP_INLINE int GradientPredictor_C(uint8_t a, uint8_t b, uint8_t c) { static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in, int width, int height, int stride, int row, int num_rows, - int inverse, uint8_t* out) { + uint8_t* out) { const uint8_t* preds; const size_t start_offset = row * stride; const int last_row = row + num_rows; DCHECK(in, out); in += start_offset; out += start_offset; - preds = inverse ? out : in; + preds = in; // left prediction for top scan-line if (row == 0) { out[0] = in[0]; - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); + PredictLine_C(in + 1, preds, out + 1, width - 1); row = 1; preds += stride; in += stride; @@ -152,12 +148,12 @@ static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in, while (row < last_row) { int w; // leftmost pixel: predict from above. - PredictLine_C(in, preds - stride, out, 1, inverse); + PredictLine_C(in, preds - stride, out, 1); for (w = 1; w < width; ++w) { const int pred = GradientPredictor_C(preds[w - 1], preds[w - stride], preds[w - stride - 1]); - out[w] = (uint8_t)(in[w] + (inverse ? pred : -pred)); + out[w] = (uint8_t)(in[w] - pred); } ++row; preds += stride; @@ -174,18 +170,17 @@ static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in, #if !WEBP_NEON_OMIT_C_CODE static void HorizontalFilter_C(const uint8_t* data, int width, int height, int stride, uint8_t* filtered_data) { - DoHorizontalFilter_C(data, width, height, stride, 0, height, 0, - filtered_data); + DoHorizontalFilter_C(data, width, height, stride, 0, height, filtered_data); } static void VerticalFilter_C(const uint8_t* data, int width, int height, int stride, uint8_t* filtered_data) { - DoVerticalFilter_C(data, width, height, stride, 0, height, 0, filtered_data); + DoVerticalFilter_C(data, width, height, stride, 0, height, filtered_data); } static void GradientFilter_C(const uint8_t* data, int width, int height, int stride, uint8_t* filtered_data) { - DoGradientFilter_C(data, width, height, stride, 0, height, 0, filtered_data); + DoGradientFilter_C(data, width, height, stride, 0, height, filtered_data); } #endif // !WEBP_NEON_OMIT_C_CODE