| @@ -159,7 +159,8 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, | |||
| } | |||
| } | |||
| #define UNROLL1(bpp, op) { \ | |||
| #define UNROLL1(bpp, op) \ | |||
| { \ | |||
| r = dst[0]; \ | |||
| if (bpp >= 2) \ | |||
| g = dst[1]; \ | |||
| @@ -179,25 +180,24 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, | |||
| continue; \ | |||
| dst[i + 3] = a = op(a, src[i + 3], last[i + 3]); \ | |||
| } \ | |||
| } | |||
| } | |||
| #define UNROLL_FILTER(op) \ | |||
| if (bpp == 1) \ | |||
| if (bpp == 1) { \ | |||
| UNROLL1(1, op) \ | |||
| else if (bpp == 2) \ | |||
| UNROLL1(2, op) \ | |||
| else if (bpp == 3) \ | |||
| UNROLL1(3, op) \ | |||
| else if (bpp == 4) \ | |||
| UNROLL1(4, op) \ | |||
| else { \ | |||
| for (; i < size; i += bpp) { \ | |||
| int j; \ | |||
| for (j = 0; j < bpp; j++) \ | |||
| dst[i + j] = op(dst[i + j - bpp], \ | |||
| src[i + j], last[i + j]); \ | |||
| } \ | |||
| } | |||
| } else if (bpp == 2) { \ | |||
| UNROLL1(2, op) \ | |||
| } else if (bpp == 3) { \ | |||
| UNROLL1(3, op) \ | |||
| } else if (bpp == 4) { \ | |||
| UNROLL1(4, op) \ | |||
| } else { \ | |||
| for (; i < size; i += bpp) { \ | |||
| int j; \ | |||
| for (j = 0; j < bpp; j++) \ | |||
| dst[i + j] = op(dst[i + j - bpp], src[i + j], last[i + j]); \ | |||
| } \ | |||
| } | |||
| /* NOTE: 'dst' can be equal to 'last' */ | |||
| static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type, | |||