static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,

                           uint8_t *src, uint8_t *last, int size, int bpp)

{

    int i, p, r, g, b, a;



    switch (filter_type) {

    case PNG_FILTER_VALUE_NONE:

        memcpy(dst, src, size);

        break;

    case PNG_FILTER_VALUE_SUB:

        for (i = 0; i < bpp; i++) {

            dst[i] = src[i];

        }

        if (bpp == 4) {

            p = *(int*)dst;

            for (; i < size; i += bpp) {

                int s = *(int*)(src + i);

                p = ((s & 0x7f7f7f7f) + (p & 0x7f7f7f7f)) ^ ((s ^ p) & 0x80808080);

                *(int*)(dst + i) = p;

            }

        } else {

#define OP_SUB(x,s,l) x+s

            UNROLL_FILTER(OP_SUB);

        }

        break;

    case PNG_FILTER_VALUE_UP:

        dsp->add_bytes_l2(dst, src, last, size);

        break;

    case PNG_FILTER_VALUE_AVG:

        for (i = 0; i < bpp; i++) {

            p = (last[i] >> 1);

            dst[i] = p + src[i];

        }

#define OP_AVG(x,s,l) (((x + l) >> 1) + s) & 0xff

        UNROLL_FILTER(OP_AVG);

        break;

    case PNG_FILTER_VALUE_PAETH:

        for (i = 0; i < bpp; i++) {

            p = last[i];

            dst[i] = p + src[i];

        }

        if (bpp > 2 && size > 4) {

            // would write off the end of the array if we let it process the last pixel with bpp=3

            int w = bpp == 4 ? size : size - 3;

            dsp->add_paeth_prediction(dst + i, src + i, last + i, w - i, bpp);

            i = w;

        }

        ff_add_png_paeth_prediction(dst + i, src + i, last + i, size - i, bpp);

        break;

    }

}

static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,

                           uint8_t *src, uint8_t *last, int size, int bpp)

{

    int i, p, r, g, b, a;



    switch (filter_type) {

    case PNG_FILTER_VALUE_NONE:

        memcpy(dst, src, size);

        break;

    case PNG_FILTER_VALUE_SUB:

        for (i = 0; i < bpp; i++) {

            dst[i] = src[i];

        }

        if (bpp == 4) {

            p = *(int*)dst;

            for (; i < size; i += bpp) {

                int s = *(int*)(src + i);

                p = ((s & 0x7f7f7f7f) + (p & 0x7f7f7f7f)) ^ ((s ^ p) & 0x80808080);

                *(int*)(dst + i) = p;

            }

        } else {

#define OP_SUB(x,s,l) x+s

            UNROLL_FILTER(OP_SUB);

        }

        break;

    case PNG_FILTER_VALUE_UP:

        dsp->add_bytes_l2(dst, src, last, size);

        break;

    case PNG_FILTER_VALUE_AVG:

        for (i = 0; i < bpp; i++) {

            p = (last[i] >> 1);

            dst[i] = p + src[i];

        }

#define OP_AVG(x,s,l) (((x + l) >> 1) + s) & 0xff

        UNROLL_FILTER(OP_AVG);

        break;

    case PNG_FILTER_VALUE_PAETH:

        for (i = 0; i < bpp; i++) {

            p = last[i];

            dst[i] = p + src[i];

        }

        if (bpp > 2 && size > 4) {

            

            int w = bpp == 4 ? size : size - 3;

            dsp->add_paeth_prediction(dst + i, src + i, last + i, w - i, bpp);

            i = w;

        }

        ff_add_png_paeth_prediction(dst + i, src + i, last + i, size - i, bpp);

        break;

    }

}

                int s = *(int*)(src + i);
static void FUNC_0(PNGDSPContext *VAR_0, uint8_t *VAR_1, int VAR_2,

                           uint8_t *VAR_3, uint8_t *VAR_4, int VAR_5, int VAR_6)

{

    int VAR_7, VAR_8, VAR_9, VAR_10, VAR_11, VAR_12;



    switch (VAR_2) {

    case PNG_FILTER_VALUE_NONE:

        memcpy(VAR_1, VAR_3, VAR_5);

        break;

    case PNG_FILTER_VALUE_SUB:

        for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) {

            VAR_1[VAR_7] = VAR_3[VAR_7];

        }

        if (VAR_6 == 4) {

            VAR_8 = *(int*)VAR_1;

            for (; VAR_7 < VAR_5; VAR_7 += VAR_6) {

                int VAR_13 = *(int*)(VAR_3 + VAR_7);

                VAR_8 = ((VAR_13 & 0x7f7f7f7f) + (VAR_8 & 0x7f7f7f7f)) ^ ((VAR_13 ^ VAR_8) & 0x80808080);

                *(int*)(VAR_1 + VAR_7) = VAR_8;

            }

        } else {

#define OP_SUB(x,VAR_13,l) x+VAR_13

            UNROLL_FILTER(OP_SUB);

        }

        break;

    case PNG_FILTER_VALUE_UP:

        VAR_0->add_bytes_l2(VAR_1, VAR_3, VAR_4, VAR_5);

        break;

    case PNG_FILTER_VALUE_AVG:

        for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) {

            VAR_8 = (VAR_4[VAR_7] >> 1);

            VAR_1[VAR_7] = VAR_8 + VAR_3[VAR_7];

        }

#define OP_AVG(x,VAR_13,l) (((x + l) >> 1) + VAR_13) & 0xff

        UNROLL_FILTER(OP_AVG);

        break;

    case PNG_FILTER_VALUE_PAETH:

        for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) {

            VAR_8 = VAR_4[VAR_7];

            VAR_1[VAR_7] = VAR_8 + VAR_3[VAR_7];

        }

        if (VAR_6 > 2 && VAR_5 > 4) {

            

            int VAR_14 = VAR_6 == 4 ? VAR_5 : VAR_5 - 3;

            VAR_0->add_paeth_prediction(VAR_1 + VAR_7, VAR_3 + VAR_7, VAR_4 + VAR_7, VAR_14 - VAR_7, VAR_6);

            VAR_7 = VAR_14;

        }

        ff_add_png_paeth_prediction(VAR_1 + VAR_7, VAR_3 + VAR_7, VAR_4 + VAR_7, VAR_5 - VAR_7, VAR_6);

        break;

    }

}

static void FUNC_0(PNGDSPContext *VAR_0, uint8_t *VAR_1, int VAR_2,
uint8_t *VAR_3, uint8_t *VAR_4, int VAR_5, int VAR_6)
{ int VAR_7, VAR_8, VAR_9, VAR_10, VAR_11, VAR_12; switch (VAR_2) { case PNG_FILTER_VALUE_NONE:
memcpy(VAR_1, VAR_3, VAR_5); break; case PNG_FILTER_VALUE_SUB:
for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) { VAR_1[VAR_7] = VAR_3[VAR_7]; } if (VAR_6 == 4) { VAR_8 = *(int*)VAR_1; for (; VAR_7 < VAR_5; VAR_7 += VAR_6) { int VAR_13 = *(int*)(VAR_3 + VAR_7); VAR_8 = ((VAR_13 & 0x7f7f7f7f) + (VAR_8 & 0x7f7f7f7f)) ^ ((VAR_13 ^ VAR_8) & 0x80808080); *(int*)(VAR_1 + VAR_7) = VAR_8; } } else { #define OP_SUB(x,VAR_13,l) x+VAR_13
UNROLL_FILTER(OP_SUB); } break; case PNG_FILTER_VALUE_UP:
VAR_0->add_bytes_l2(VAR_1, VAR_3, VAR_4, VAR_5); break; case PNG_FILTER_VALUE_AVG:
for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) { VAR_8 = (VAR_4[VAR_7] >> 1); VAR_1[VAR_7] = VAR_8 + VAR_3[VAR_7]; } #define OP_AVG(x,VAR_13,l) (((x + l) >> 1) + VAR_13) & 0xff
UNROLL_FILTER(OP_AVG); break; case PNG_FILTER_VALUE_PAETH:
for (VAR_7 = 0; VAR_7 < VAR_6; VAR_7++) { VAR_8 = VAR_4[VAR_7]; VAR_1[VAR_7] = VAR_8 + VAR_3[VAR_7]; } if (VAR_6 > 2 && VAR_5 > 4) { int VAR_14 = VAR_6 == 4 ? VAR_5 : VAR_5 - 3; VAR_0->add_paeth_prediction(VAR_1 + VAR_7, VAR_3 + VAR_7, VAR_4 + VAR_7, VAR_14 - VAR_7, VAR_6); VAR_7 = VAR_14; } ff_add_png_paeth_prediction(VAR_1 + VAR_7, VAR_3 + VAR_7, VAR_4 + VAR_7, VAR_5 - VAR_7, VAR_6); break; } }