| Index: third_party/libwebp/dsp/filters.c
|
| diff --git a/third_party/libwebp/dsp/filters.c b/third_party/libwebp/dsp/filters.c
|
| index 5c30f2e457e49d901741e39d0085ab31aac7897b..9f04faf0cb1a4430f4600393aafabf841f8217e1 100644
|
| --- a/third_party/libwebp/dsp/filters.c
|
| +++ b/third_party/libwebp/dsp/filters.c
|
| @@ -184,19 +184,40 @@ static void GradientFilter(const uint8_t* data, int width, int height,
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| -static void VerticalUnfilter(int width, int height, int stride, int row,
|
| - int num_rows, uint8_t* data) {
|
| - DoVerticalFilter(data, width, height, stride, row, num_rows, 1, data);
|
| +static void HorizontalUnfilter(const uint8_t* prev, const uint8_t* in,
|
| + uint8_t* out, int width) {
|
| + uint8_t pred = (prev == NULL) ? 0 : prev[0];
|
| + int i;
|
| + for (i = 0; i < width; ++i) {
|
| + out[i] = pred + in[i];
|
| + pred = out[i];
|
| + }
|
| }
|
|
|
| -static void HorizontalUnfilter(int width, int height, int stride, int row,
|
| - int num_rows, uint8_t* data) {
|
| - DoHorizontalFilter(data, width, height, stride, row, num_rows, 1, data);
|
| +static void VerticalUnfilter(const uint8_t* prev, const uint8_t* in,
|
| + uint8_t* out, int width) {
|
| + if (prev == NULL) {
|
| + HorizontalUnfilter(NULL, in, out, width);
|
| + } else {
|
| + int i;
|
| + for (i = 0; i < width; ++i) out[i] = prev[i] + in[i];
|
| + }
|
| }
|
|
|
| -static void GradientUnfilter(int width, int height, int stride, int row,
|
| - int num_rows, uint8_t* data) {
|
| - DoGradientFilter(data, width, height, stride, row, num_rows, 1, data);
|
| +static void GradientUnfilter(const uint8_t* prev, const uint8_t* in,
|
| + uint8_t* out, int width) {
|
| + if (prev == NULL) {
|
| + HorizontalUnfilter(NULL, in, out, width);
|
| + } else {
|
| + uint8_t top = prev[0], top_left = top, left = top;
|
| + int i;
|
| + for (i = 0; i < width; ++i) {
|
| + top = prev[i]; // need to read this first, in case prev==out
|
| + left = in[i] + GradientPredictor(left, top, top_left);
|
| + top_left = top;
|
| + out[i] = left;
|
| + }
|
| + }
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
|
|