static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix,

                                        ptrdiff_t _xstride, ptrdiff_t _ystride,

                                        int *_beta, int *_tc,

                                        uint8_t *_no_p, uint8_t *_no_q)

{

    int d, j;

    pixel *pix        = (pixel *)_pix;

    ptrdiff_t xstride = _xstride / sizeof(pixel);

    ptrdiff_t ystride = _ystride / sizeof(pixel);



    for (j = 0; j < 2; j++) {

        const int dp0  = abs(P2  - 2 * P1  + P0);

        const int dq0  = abs(Q2  - 2 * Q1  + Q0);

        const int dp3  = abs(TP2 - 2 * TP1 + TP0);

        const int dq3  = abs(TQ2 - 2 * TQ1 + TQ0);

        const int d0   = dp0 + dq0;

        const int d3   = dp3 + dq3;

        const int beta = _beta[j] << (BIT_DEPTH - 8);

        const int tc   = _tc[j]   << (BIT_DEPTH - 8);

        const int no_p = _no_p[j];

        const int no_q = _no_q[j];



        if (d0 + d3 >= beta) {

            pix += 4 * ystride;

            continue;

        } else {

            const int beta_3 = beta >> 3;

            const int beta_2 = beta >> 2;

            const int tc25   = ((tc * 5 + 1) >> 1);



            if (abs(P3  -  P0) + abs(Q3  -  Q0) < beta_3 && abs(P0  -  Q0) < tc25 &&

                abs(TP3 - TP0) + abs(TQ3 - TQ0) < beta_3 && abs(TP0 - TQ0) < tc25 &&

                                      (d0 << 1) < beta_2 &&      (d3 << 1) < beta_2) {

                // strong filtering

                const int tc2 = tc << 1;

                for (d = 0; d < 4; d++) {

                    const int p3 = P3;

                    const int p2 = P2;

                    const int p1 = P1;

                    const int p0 = P0;

                    const int q0 = Q0;

                    const int q1 = Q1;

                    const int q2 = Q2;

                    const int q3 = Q3;

                    if (!no_p) {

                        P0 = p0 + av_clip(((p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) - p0, -tc2, tc2);

                        P1 = p1 + av_clip(((p2 + p1 + p0 + q0 + 2) >> 2) - p1, -tc2, tc2);

                        P2 = p2 + av_clip(((2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) - p2, -tc2, tc2);

                    }

                    if (!no_q) {

                        Q0 = q0 + av_clip(((p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3) - q0, -tc2, tc2);

                        Q1 = q1 + av_clip(((p0 + q0 + q1 + q2 + 2) >> 2) - q1, -tc2, tc2);

                        Q2 = q2 + av_clip(((2 * q3 + 3 * q2 + q1 + q0 + p0 + 4) >> 3) - q2, -tc2, tc2);

                    }

                    pix += ystride;

                }

            } else { // normal filtering

                int nd_p = 1;

                int nd_q = 1;

                const int tc_2 = tc >> 1;

                if (dp0 + dp3 < ((beta + (beta >> 1)) >> 3))

                    nd_p = 2;

                if (dq0 + dq3 < ((beta + (beta >> 1)) >> 3))

                    nd_q = 2;



                for (d = 0; d < 4; d++) {

                    const int p2 = P2;

                    const int p1 = P1;

                    const int p0 = P0;

                    const int q0 = Q0;

                    const int q1 = Q1;

                    const int q2 = Q2;

                    int delta0   = (9 * (q0 - p0) - 3 * (q1 - p1) + 8) >> 4;

                    if (abs(delta0) < 10 * tc) {

                        delta0 = av_clip(delta0, -tc, tc);

                        if (!no_p)

                            P0 = av_clip_pixel(p0 + delta0);

                        if (!no_q)

                            Q0 = av_clip_pixel(q0 - delta0);

                        if (!no_p && nd_p > 1) {

                            const int deltap1 = av_clip((((p2 + p0 + 1) >> 1) - p1 + delta0) >> 1, -tc_2, tc_2);

                            P1 = av_clip_pixel(p1 + deltap1);

                        }

                        if (!no_q && nd_q > 1) {

                            const int deltaq1 = av_clip((((q2 + q0 + 1) >> 1) - q1 - delta0) >> 1, -tc_2, tc_2);

                            Q1 = av_clip_pixel(q1 + deltaq1);

                        }

                    }

                    pix += ystride;

                }

            }

        }

    }

}

static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix,

                                        ptrdiff_t _xstride, ptrdiff_t _ystride,

                                        int *_beta, int *_tc,

                                        uint8_t *_no_p, uint8_t *_no_q)

{

    int d, j;

    pixel *pix        = (pixel *)_pix;

    ptrdiff_t xstride = _xstride / sizeof(pixel);

    ptrdiff_t ystride = _ystride / sizeof(pixel);



    for (j = 0; j < 2; j++) {

        const int dp0  = abs(P2  - 2 * P1  + P0);

        const int dq0  = abs(Q2  - 2 * Q1  + Q0);

        const int dp3  = abs(TP2 - 2 * TP1 + TP0);

        const int dq3  = abs(TQ2 - 2 * TQ1 + TQ0);

        const int d0   = dp0 + dq0;

        const int d3   = dp3 + dq3;

        const int beta = _beta[j] << (BIT_DEPTH - 8);

        const int tc   = _tc[j]   << (BIT_DEPTH - 8);

        const int no_p = _no_p[j];

        const int no_q = _no_q[j];



        if (d0 + d3 >= beta) {

            pix += 4 * ystride;

            continue;

        } else {

            const int beta_3 = beta >> 3;

            const int beta_2 = beta >> 2;

            const int tc25   = ((tc * 5 + 1) >> 1);



            if (abs(P3  -  P0) + abs(Q3  -  Q0) < beta_3 && abs(P0  -  Q0) < tc25 &&

                abs(TP3 - TP0) + abs(TQ3 - TQ0) < beta_3 && abs(TP0 - TQ0) < tc25 &&

                                      (d0 << 1) < beta_2 &&      (d3 << 1) < beta_2) {

                

                const int tc2 = tc << 1;

                for (d = 0; d < 4; d++) {

                    const int p3 = P3;

                    const int p2 = P2;

                    const int p1 = P1;

                    const int p0 = P0;

                    const int q0 = Q0;

                    const int q1 = Q1;

                    const int q2 = Q2;

                    const int q3 = Q3;

                    if (!no_p) {

                        P0 = p0 + av_clip(((p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) - p0, -tc2, tc2);

                        P1 = p1 + av_clip(((p2 + p1 + p0 + q0 + 2) >> 2) - p1, -tc2, tc2);

                        P2 = p2 + av_clip(((2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) - p2, -tc2, tc2);

                    }

                    if (!no_q) {

                        Q0 = q0 + av_clip(((p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3) - q0, -tc2, tc2);

                        Q1 = q1 + av_clip(((p0 + q0 + q1 + q2 + 2) >> 2) - q1, -tc2, tc2);

                        Q2 = q2 + av_clip(((2 * q3 + 3 * q2 + q1 + q0 + p0 + 4) >> 3) - q2, -tc2, tc2);

                    }

                    pix += ystride;

                }

            } else { 

                int nd_p = 1;

                int nd_q = 1;

                const int tc_2 = tc >> 1;

                if (dp0 + dp3 < ((beta + (beta >> 1)) >> 3))

                    nd_p = 2;

                if (dq0 + dq3 < ((beta + (beta >> 1)) >> 3))

                    nd_q = 2;



                for (d = 0; d < 4; d++) {

                    const int p2 = P2;

                    const int p1 = P1;

                    const int p0 = P0;

                    const int q0 = Q0;

                    const int q1 = Q1;

                    const int q2 = Q2;

                    int delta0   = (9 * (q0 - p0) - 3 * (q1 - p1) + 8) >> 4;

                    if (abs(delta0) < 10 * tc) {

                        delta0 = av_clip(delta0, -tc, tc);

                        if (!no_p)

                            P0 = av_clip_pixel(p0 + delta0);

                        if (!no_q)

                            Q0 = av_clip_pixel(q0 - delta0);

                        if (!no_p && nd_p > 1) {

                            const int deltap1 = av_clip((((p2 + p0 + 1) >> 1) - p1 + delta0) >> 1, -tc_2, tc_2);

                            P1 = av_clip_pixel(p1 + deltap1);

                        }

                        if (!no_q && nd_q > 1) {

                            const int deltaq1 = av_clip((((q2 + q0 + 1) >> 1) - q1 - delta0) >> 1, -tc_2, tc_2);

                            Q1 = av_clip_pixel(q1 + deltaq1);

                        }

                    }

                    pix += ystride;

                }

            }

        }

    }

}

static void FUNC_0(hevc_loop_filter_luma)(uint8_t *_pix,

                                        ptrdiff_t _xstride, ptrdiff_t _ystride,

                                        int *_beta, int *_tc,

                                        uint8_t *_no_p, uint8_t *_no_q)

{

    int VAR_0, VAR_1;

    pixel *pix        = (pixel *)_pix;

    ptrdiff_t xstride = _xstride / sizeof(pixel);

    ptrdiff_t ystride = _ystride / sizeof(pixel);



    for (VAR_1 = 0; VAR_1 < 2; VAR_1++) {

        const int VAR_2  = abs(P2  - 2 * P1  + P0);

        const int VAR_3  = abs(Q2  - 2 * Q1  + Q0);

        const int VAR_4  = abs(TP2 - 2 * TP1 + TP0);

        const int VAR_5  = abs(TQ2 - 2 * TQ1 + TQ0);

        const int VAR_6   = VAR_2 + VAR_3;

        const int VAR_7   = VAR_4 + VAR_5;

        const int VAR_8 = _beta[VAR_1] << (BIT_DEPTH - 8);

        const int VAR_9   = _tc[VAR_1]   << (BIT_DEPTH - 8);

        const int VAR_10 = _no_p[VAR_1];

        const int VAR_11 = _no_q[VAR_1];



        if (VAR_6 + VAR_7 >= VAR_8) {

            pix += 4 * ystride;

            continue;

        } else {

            const int VAR_12 = VAR_8 >> 3;

            const int VAR_13 = VAR_8 >> 2;

            const int VAR_14   = ((VAR_9 * 5 + 1) >> 1);



            if (abs(P3  -  P0) + abs(Q3  -  Q0) < VAR_12 && abs(P0  -  Q0) < VAR_14 &&

                abs(TP3 - TP0) + abs(TQ3 - TQ0) < VAR_12 && abs(TP0 - TQ0) < VAR_14 &&

                                      (VAR_6 << 1) < VAR_13 &&      (VAR_7 << 1) < VAR_13) {

                

                const int VAR_15 = VAR_9 << 1;

                for (VAR_0 = 0; VAR_0 < 4; VAR_0++) {

                    const int VAR_16 = P3;

                    const int VAR_27 = P2;

                    const int VAR_27 = P1;

                    const int VAR_27 = P0;

                    const int VAR_27 = Q0;

                    const int VAR_27 = Q1;

                    const int VAR_27 = Q2;

                    const int VAR_23 = Q3;

                    if (!VAR_10) {

                        P0 = VAR_27 + av_clip(((VAR_27 + 2 * VAR_27 + 2 * VAR_27 + 2 * VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15);

                        P1 = VAR_27 + av_clip(((VAR_27 + VAR_27 + VAR_27 + VAR_27 + 2) >> 2) - VAR_27, -VAR_15, VAR_15);

                        P2 = VAR_27 + av_clip(((2 * VAR_16 + 3 * VAR_27 + VAR_27 + VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15);

                    }

                    if (!VAR_11) {

                        Q0 = VAR_27 + av_clip(((VAR_27 + 2 * VAR_27 + 2 * VAR_27 + 2 * VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15);

                        Q1 = VAR_27 + av_clip(((VAR_27 + VAR_27 + VAR_27 + VAR_27 + 2) >> 2) - VAR_27, -VAR_15, VAR_15);

                        Q2 = VAR_27 + av_clip(((2 * VAR_23 + 3 * VAR_27 + VAR_27 + VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15);

                    }

                    pix += ystride;

                }

            } else { 

                int VAR_24 = 1;

                int VAR_25 = 1;

                const int VAR_26 = VAR_9 >> 1;

                if (VAR_2 + VAR_4 < ((VAR_8 + (VAR_8 >> 1)) >> 3))

                    VAR_24 = 2;

                if (VAR_3 + VAR_5 < ((VAR_8 + (VAR_8 >> 1)) >> 3))

                    VAR_25 = 2;



                for (VAR_0 = 0; VAR_0 < 4; VAR_0++) {

                    const int VAR_27 = P2;

                    const int VAR_27 = P1;

                    const int VAR_27 = P0;

                    const int VAR_27 = Q0;

                    const int VAR_27 = Q1;

                    const int VAR_27 = Q2;

                    int VAR_27   = (9 * (VAR_27 - VAR_27) - 3 * (VAR_27 - VAR_27) + 8) >> 4;

                    if (abs(VAR_27) < 10 * VAR_9) {

                        VAR_27 = av_clip(VAR_27, -VAR_9, VAR_9);

                        if (!VAR_10)

                            P0 = av_clip_pixel(VAR_27 + VAR_27);

                        if (!VAR_11)

                            Q0 = av_clip_pixel(VAR_27 - VAR_27);

                        if (!VAR_10 && VAR_24 > 1) {

                            const int VAR_28 = av_clip((((VAR_27 + VAR_27 + 1) >> 1) - VAR_27 + VAR_27) >> 1, -VAR_26, VAR_26);

                            P1 = av_clip_pixel(VAR_27 + VAR_28);

                        }

                        if (!VAR_11 && VAR_25 > 1) {

                            const int VAR_29 = av_clip((((VAR_27 + VAR_27 + 1) >> 1) - VAR_27 - VAR_27) >> 1, -VAR_26, VAR_26);

                            Q1 = av_clip_pixel(VAR_27 + VAR_29);

                        }

                    }

                    pix += ystride;

                }

            }

        }

    }

}

static void FUNC_0(hevc_loop_filter_luma)(uint8_t *_pix,
ptrdiff_t _xstride, ptrdiff_t _ystride,
int *_beta, int *_tc,
uint8_t *_no_p, uint8_t *_no_q)
{ int VAR_0, VAR_1; pixel *pix        = (pixel *)_pix; ptrdiff_t xstride = _xstride / sizeof(pixel); ptrdiff_t ystride = _ystride / sizeof(pixel); for (VAR_1 = 0; VAR_1 < 2; VAR_1++) { const int VAR_2  = abs(P2  - 2 * P1  + P0); const int VAR_3  = abs(Q2  - 2 * Q1  + Q0); const int VAR_4  = abs(TP2 - 2 * TP1 + TP0); const int VAR_5  = abs(TQ2 - 2 * TQ1 + TQ0); const int VAR_6   = VAR_2 + VAR_3; const int VAR_7   = VAR_4 + VAR_5; const int VAR_8 = _beta[VAR_1] << (BIT_DEPTH - 8); const int VAR_9   = _tc[VAR_1]   << (BIT_DEPTH - 8); const int VAR_10 = _no_p[VAR_1]; const int VAR_11 = _no_q[VAR_1]; if (VAR_6 + VAR_7 >= VAR_8) { pix += 4 * ystride; continue; } else { const int VAR_12 = VAR_8 >> 3; const int VAR_13 = VAR_8 >> 2; const int VAR_14   = ((VAR_9 * 5 + 1) >> 1); if (abs(P3  -  P0) + abs(Q3  -  Q0) < VAR_12 && abs(P0  -  Q0) < VAR_14 &&
abs(TP3 - TP0) + abs(TQ3 - TQ0) < VAR_12 && abs(TP0 - TQ0) < VAR_14 &&
(VAR_6 << 1) < VAR_13 &&      (VAR_7 << 1) < VAR_13) { const int VAR_15 = VAR_9 << 1; for (VAR_0 = 0; VAR_0 < 4; VAR_0++) { const int VAR_16 = P3; const int VAR_27 = P2; const int VAR_27 = P1; const int VAR_27 = P0; const int VAR_27 = Q0; const int VAR_27 = Q1; const int VAR_27 = Q2; const int VAR_23 = Q3; if (!VAR_10) { P0 = VAR_27 + av_clip(((VAR_27 + 2 * VAR_27 + 2 * VAR_27 + 2 * VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15); P1 = VAR_27 + av_clip(((VAR_27 + VAR_27 + VAR_27 + VAR_27 + 2) >> 2) - VAR_27, -VAR_15, VAR_15); P2 = VAR_27 + av_clip(((2 * VAR_16 + 3 * VAR_27 + VAR_27 + VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15); } if (!VAR_11) { Q0 = VAR_27 + av_clip(((VAR_27 + 2 * VAR_27 + 2 * VAR_27 + 2 * VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15); Q1 = VAR_27 + av_clip(((VAR_27 + VAR_27 + VAR_27 + VAR_27 + 2) >> 2) - VAR_27, -VAR_15, VAR_15); Q2 = VAR_27 + av_clip(((2 * VAR_23 + 3 * VAR_27 + VAR_27 + VAR_27 + VAR_27 + 4) >> 3) - VAR_27, -VAR_15, VAR_15); } pix += ystride; } } else { int VAR_24 = 1; int VAR_25 = 1; const int VAR_26 = VAR_9 >> 1; if (VAR_2 + VAR_4 < ((VAR_8 + (VAR_8 >> 1)) >> 3))
VAR_24 = 2; if (VAR_3 + VAR_5 < ((VAR_8 + (VAR_8 >> 1)) >> 3))
VAR_25 = 2; for (VAR_0 = 0; VAR_0 < 4; VAR_0++) { const int VAR_27 = P2; const int VAR_27 = P1; const int VAR_27 = P0; const int VAR_27 = Q0; const int VAR_27 = Q1; const int VAR_27 = Q2; int VAR_27   = (9 * (VAR_27 - VAR_27) - 3 * (VAR_27 - VAR_27) + 8) >> 4; if (abs(VAR_27) < 10 * VAR_9) { VAR_27 = av_clip(VAR_27, -VAR_9, VAR_9); if (!VAR_10)
P0 = av_clip_pixel(VAR_27 + VAR_27); if (!VAR_11)
Q0 = av_clip_pixel(VAR_27 - VAR_27); if (!VAR_10 && VAR_24 > 1) { const int VAR_28 = av_clip((((VAR_27 + VAR_27 + 1) >> 1) - VAR_27 + VAR_27) >> 1, -VAR_26, VAR_26); P1 = av_clip_pixel(VAR_27 + VAR_28); } if (!VAR_11 && VAR_25 > 1) { const int VAR_29 = av_clip((((VAR_27 + VAR_27 + 1) >> 1) - VAR_27 - VAR_27) >> 1, -VAR_26, VAR_26); Q1 = av_clip_pixel(VAR_27 + VAR_29); } } pix += ystride; } } } } }