|
|
|
@ -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, |
|
|
|
|